Code Monkey home page Code Monkey logo

pvrecorder's Introduction

PvRecorder

GitHub release GitHub

PyPI Nuget Go Reference 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.

Go Demo

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.

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.

Go

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.

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.

pvrecorder's People

Contributors

dependabot[bot] avatar erismik avatar hellow554 avatar kenarsa avatar ksyeo1010 avatar laves avatar mrrostam avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.