Skip to content

origami-team/capacitor-voice-recorder

 
 

Repository files navigation


Capacitor Voice Recorder

tchvu3/capacitor-voice-recorder

Capacitor plugin for simple voice recording


Maintainers

Maintainer GitHub Social
Avihu Harush tchvu3 @tchvu3

Installation

npm install --save capacitor-voice-recorder
npx cap sync

ios note

Make sure to include the NSMicrophoneUsageDescription key, and a corresponding purpose string in your app's Info.plist

android note

Make sure to add the plugin to your MainActivity.java like so:

import com.tchvu3.capvoicerecorder.VoiceRecorder;
...
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
        add(VoiceRecorder.class); // Add this line
    }});
}

Configuration

No configuration required for this plugin.

Supported methods

Name Android iOS Web
canDeviceVoiceRecord
requestAudioRecordingPermission
hasAudioRecordingPermission
startRecording
stopRecording

Explanation

  • canDeviceVoiceRecord - return promise that resolves to {"value": true} / {"value": false} based on the phone's ability to record voice.

  • requestAudioRecordingPermission - if the permission has already been provided then the promise will resolve with {"value": true}, otherwise the promise will resolve to {"value": true} / {"value": false} based on the answer of the user to the request.

  • hasAudioRecordingPermission - will resolve to {"value": true} / {"value": false} based on the status of the permission.

  • startRecording - if the app lacks the required permission then the promise will reject with the message "MISSING_PERMISSION". if the phone is unable to record then the promise will reject with the message "CANNOT_VOICE_RECORD_ON_THIS_PHONE". if there's a recording already running then the promise will reject with "ALREADY_RECORDING", and if other apps are using the microphone then the promise will reject with "MICROPHONE_BEING_USED". in a case of unknown error the promise will reject with "FAILED_TO_RECORD".

  • stopRecording - will stop the recording that has been previously started. if the function startRecording() has not been called beforehand the promise will reject with: "RECORDING_HAS_NOT_STARTED". in case of success, you will get the recording in base-64, the duration of the recording in milliseconds, and the mime type.

Usage


import { Plugins } from "@capacitor/core"

// not mandatory, only for code completion
import { RecordingData, GenericResponse } from 'capacitor-voice-recorder'

const { VoiceRecorder } = Plugins

// will print true / false based on the device ability to record
VoiceRecorder.canDeviceVoiceRecord().then((result: GenericResponse) => console.log(result.value))

/** 
* will prompt the user to give the required permission, after that
* the function will print true / false based on the user response
*/
VoiceRecorder.requestAudioRecordingPermission().then((result: GenericResponse) => console.log(result.value))

// will print true / false based on the status of the recording permission
VoiceRecorder.hasAudioRecordingPermission.then((result: GenericResponse) => console.log(result.value))

/**
* In case of success the promise will resolve with {"value": true}
* in case of an error the promise will reject with one of the following messages:
* "MISSING_PERMISSION", "ALREADY_RECORDING", "CANNOT_RECORD_ON_THIS_PHONE", "MICROPHONE_BEING_USED" or "FAILED_TO_RECORD"
*/
VoiceRecorder.startRecording()
.then((result: GenericResponse) => console.log(result.value))
.catch(error => console.log(error))

/**
* In case of success the promise will resolve with:
* {"value": { recordDataBase64: string, msDuration: number, mimeType: string }},
* the file will be in *.acc format.
* in case of an error the promise will reject with one of the following messages:
* "RECORDING_HAS_NOT_STARTED" or "FAILED_TO_FETCH_RECORDING"
*/
VoiceRecorder.stopRecording()
.then((result: RecordingData) => console.log(result.value))
.catch(error => console.log(error))

Playback

To play the recorded file you can use plain javascript:

const base64Sound = '...' // from plugin
const audioRef = new Audio(`data:audio/aac;base64,${base64Sound}`)
audioRef.oncanplaythrough = () => audioRef.play()
audioRef.load()

About

Capacitor plugin for voice recording

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 52.5%
  • Swift 31.2%
  • TypeScript 7.6%
  • Objective-C 4.0%
  • Ruby 3.7%
  • JavaScript 1.0%