Made in Vancouver, Canada by Picovoice
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.
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.
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
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.
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.
The demo requires cgo
, which on Windows may mean that you need to install a gcc compiler like MinGW to build it properly.
From demo/go run the following commands from the terminal.
go run demo.go --output_wav_path {OUTPUT_WAV_PATH}
Replace {OUTPUT_WAV_PATH}
with a file path to save the audio data in wav
format.
For more information about Go demo, go to demo/go.
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.
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.
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.
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.
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.
To install the PvRecorder Go module to your project, use the command:
go get github.com/Picovoice/pvrecorder/binding/go
To start recording, initialize an instance and run Start()
:
import . "github.com/Picovoice/pvrecorder/binding/go"
recorder = NewPvRecorder(/*FrameLength*/512)
recorder.Init()
if err != nil {
// handle init error
}
defer recorder.Delete()
err = recorder.Start()
if err != nil {
// handle start error
}
Get a frame of audio by calling the Read()
function:
frame, err := recorder.Read()
if err != nil {
// handle error
}
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 Delete()
:
recorder.Delete()
For more information about the PvRecorder Go SDK, go to binding/go.
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.
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.
- 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
- Added logs that warn users if recorded audio is silent for a few number of seconds.