Skip to content

Latest commit

 

History

History
319 lines (218 loc) · 7.64 KB

README.md

File metadata and controls

319 lines (218 loc) · 7.64 KB

PvRecorder

GitHub release GitHub

PyPI Nuget npm Crates.io

Made in Vancouver, Canada by Picovoice

Twitter URL

YouTube Channel Views

PvRecorder is an easy-to-use, cross-platform audio recorder designed for real-time speech audio processing. It allows developers access to an audio device's input stream, broken up into data frames of a given size.

Table of Contents

Source Code

If you are interested in building PvRecorder from source or integrating it into an existing C project, the PvRecorder source code is located under the /project directory.

Demos

If using SSH, clone the repository with:

git clone --recurse-submodules [email protected]:Picovoice/pvrecorder.git

If using HTTPS, clone the repository with:

git clone --recurse-submodules https://github.com/Picovoice/pvrecorder.git

Python Demo

Install the demo package:

pip3 install pvrecorderdemo

To show the available audio devices run:

pv_recorder_demo --show_audio_devices

With a working microphone connected to your device run the following in the terminal:

pv_recorder_demo --output_wav_path {OUTPUT_WAV_PATH}

Replace {OUTPUT_WAV_PATH} with the path to save the audio data in wav format.

For more information about the Python demos go to demo/python.

.NET Demo

From demo/dotnet/PvRecorderDemo run the following in the terminal to build the demo:

dotnet build

Make sure there is a working microphone connected to your device. From demo/dotnet/PvRecorderDemo run the following in the terminal:

dotnet run -- --output_wav_path ${OUTPUT_WAV_PATH}

For more information about the .NET demo, go to demo/dotnet.

Node.js Demo

Install the demo package:

yarn global add @picovoice/pvrecorder-node-demo

With a working microphone connected to your device run the following in the terminal:

pvrecorder-node-demo --output_wav_path ${OUTPUT_WAV_PATH}

Replace {OUTPUT_WAV_PATH} with the file path to save the audio data in wav format.

For more information about NodeJS demo, go to demo/nodejs.

Rust Demo

Make sure there is a working microphone connected to your device. From demo/rust/ run the following in the terminal to build and run the demo:

cargo run --release -- --output_wav_path ${OUTPUT_WAV_PATH}

For more information about the Rust demo, go to demo/rust.

C Demo

Run the following commands to build the demo app:

cd demo/c
cmake -S . -B build -DPV_RECORDER_PLATFORM={PV_RECORDER_PLATFORM}
cmake --build build

The {PV_RECORDER_PLATFORM} variable will set the compilation flags for the given platform. Exclude this variable to get a list of possible values.

Get a list of available audio recording devices:

./pv_recorder_demo --show_audio_devices

Record to a file with a given audio device index:

./pv_recorder_demo -o test.wav -d 2

Hit Ctrl+C to stop recording. If no audio device index (-d) is provided, the demo will use the system's default recording device.

For more information about the C demo, go to demo/c.

SDKs

Python

To start recording, initialize an instance and run start():

from pvrecorder import PvRecorder

recorder = PvRecorder(frame_length=512)
recorder.start()

Read frames of audio:

while recorder.is_recording:
    frame = recorder.read()
    # process audio frame

To stop recording, run stop() on the instance:

recorder.stop()

Once you are done, free the resources acquired by PvRecorder. You do not have to call stop() before delete():

recorder.delete()

For more information about the PvRecorder Python SDK, go to binding/python.

.NET

Install the .NET SDK using NuGet or the dotnet CLI:

dotnet add package PvRecorder

Initialize and begin recording:

using Pv;

PvRecorder recorder = PvRecorder.Create(frameLength: 512);
recorder.Start();

Read frames of audio:

while (recorder.IsRecording)
{
    short[] frame = recorder.Read();
    // process audio frame
}

To stop recording:

recorder.Stop();

Once you are done, free the resources acquired by PvRecorder. You do not have to call Stop() before Dispose():

recorder.Dispose();

For more information about the PvRecorder .NET SDK, go to binding/dotnet.

Node.js

Install Node.js binding:

yarn add @picovoice/pvrecorder-node

To start recording, initialize the instance and run start():

const frameLength = 512;
const recorder = new PvRecorder(frameLength);
recorder.start()

Read frames of audio:

while (recorder.isRecording) {
    const frame = await recorder.read();
    // process audio frame
}

To stop recording, call stop() on the instance:

recorder.stop();

Once you are done, free the resources acquired by PvRecorder. You do not have to call stop() before release():

recorder.release();

For more information about the PvRecorder Node.js SDK, go to binding/nodejs.

Rust

Add pv_recorder to your app's Cargo.toml manifest:

[dependencies]
pv_recorder = "*"

To start recording, initialize the instance and run start():

use pv_recorder::PvRecorderBuilder

let frame_length = 512;
let recorder = PvRecorderBuilder::new(frame_length).init()?;
recorder.start()?;

Read frames of audio:

while recorder.is_recording() {
    let frame = recorder.read()?;
    // process audio frame
}

To stop recording, run stop() on the instance:

recorder.stop()?;

For more information about the PvRecorder Rust SDK, go to binding/rust.

Releases

v1.2.0 - July 13th, 2023

  • API improvements
  • Improved docs
  • Added unit tests and actions for each SDK
  • Addressed race condition when stop is called during a read
  • Fixed .NET version support
  • Demos write to WAV files

v1.1.0 - November 10th, 2022

  • Added logs that warn users if recorded audio is silent for a few number of seconds.