πŸš€ Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more β†’
Socket
Book a DemoInstallSign in
Socket

capacitor-voice-recorder

Package Overview
Dependencies
Maintainers
1
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

capacitor-voice-recorder

Capacitor plugin for voice recording

7.0.6
latest
Source
npm
Version published
Weekly downloads
7.2K
-1.92%
Maintainers
1
Weekly downloads
Β 
Created
Source

Capacitor Voice Recorder

tchvu3/capacitor-voice-recorder

Capacitor plugin for simple voice recording


Maintainers

MaintainerGitHub
Avihu Harushtchvu3

Installation

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

Configuration

Using with Android

Add the following to your AndroidManifest.xml:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

Using with iOS

Add the following to your Info.plist:


<key>NSMicrophoneUsageDescription</key>
<string>This app uses the microphone to record audio.</string>

Supported methods

NameAndroidiOSWeb
canDeviceVoiceRecordβœ…βœ…βœ…
requestAudioRecordingPermissionβœ…βœ…βœ…
hasAudioRecordingPermissionβœ…βœ…βœ…
startRecordingβœ…βœ…βœ…
stopRecordingβœ…βœ…βœ…
pauseRecordingβœ…βœ…βœ…
resumeRecordingβœ…βœ…βœ…
getCurrentStatusβœ…βœ…βœ…

Overview

The capacitor-voice-recorder plugin allows you to record audio on Android, iOS, and Web platforms. Below is a summary of the key methods and how to use them.

Checking Device Capabilities and Permissions

canDeviceVoiceRecord

Check if the device/browser can record audio.

VoiceRecorder.canDeviceVoiceRecord().then((result: GenericResponse) => console.log(result.value));
Return ValueDescription
{ value: true }The device/browser can record audio.
{ value: false }The browser cannot record audio. Note: On mobile, it always returns { value: true }.

requestAudioRecordingPermission

Request audio recording permission from the user.

VoiceRecorder.requestAudioRecordingPermission().then((result: GenericResponse) => console.log(result.value));
Return ValueDescription
{ value: true }Permission granted.
{ value: false }Permission denied.

hasAudioRecordingPermission

Check if the audio recording permission has been granted.

VoiceRecorder.hasAudioRecordingPermission().then((result: GenericResponse) => console.log(result.value));
Return ValueDescription
{ value: true }Permission granted.
{ value: false }Permission denied.
Error CodeDescription
COULD_NOT_QUERY_PERMISSION_STATUSFailed to query permission status.

Managing Recording

startRecording

Start the audio recording.

Optional options can be used with this method to save the file in the device's filesystem and return a path to that file instead of a base64 string. This greatly increases performance for large files.

VoiceRecorder.startRecording(options?: RecordingOptions)
    .then((result: GenericResponse) => console.log(result.value))
    .catch(error => console.log(error));
OptionDescription
directorySpecifies a Capacitor Filesystem Directory
subDirectorySpecifies a custom sub-directory (optional)
Return ValueDescription
{ value: true }Recording started successfully.
Error CodeDescription
MISSING_PERMISSIONRequired permission is missing.
DEVICE_CANNOT_VOICE_RECORDDevice/browser cannot record audio.
ALREADY_RECORDINGA recording is already in progress.
MICROPHONE_BEING_USEDMicrophone is being used by another app.
FAILED_TO_RECORDUnknown error occurred during recording.

stopRecording

Stops the audio recording and returns the recording data.

When a directory option has been passed to the VoiceRecorder.startRecording method the data will include a path instead of a recordDataBase64

VoiceRecorder.stopRecording()
    .then((result: RecordingData) => console.log(result.value))
    .catch(error => console.log(error));
Return ValueDescription
recordDataBase64The recorded audio data in Base64 format.
msDurationThe duration of the recording in milliseconds.
mimeTypeThe MIME type of the recorded audio.
pathThe path to the audio file
Error CodeDescription
RECORDING_HAS_NOT_STARTEDNo recording in progress.
EMPTY_RECORDINGRecording stopped immediately after starting.
FAILED_TO_FETCH_RECORDINGUnknown error occurred while fetching the recording.

pauseRecording

Pause the ongoing audio recording.

VoiceRecorder.pauseRecording()
    .then((result: GenericResponse) => console.log(result.value))
    .catch(error => console.log(error));
Return ValueDescription
{ value: true }Recording paused successfully.
{ value: false }Recording is already paused.
Error CodeDescription
RECORDING_HAS_NOT_STARTEDNo recording in progress.
NOT_SUPPORTED_OS_VERSIONOperation not supported on the current OS version.

resumeRecording

Resumes a paused audio recording.

VoiceRecorder.resumeRecording()
    .then((result: GenericResponse) => console.log(result.value))
    .catch(error => console.log(error));
Return ValueDescription
{ value: true }Recording resumed successfully.
{ value: false }Recording is already running.
Error CodeDescription
RECORDING_HAS_NOT_STARTEDNo recording in progress.
NOT_SUPPORTED_OS_VERSIONOperation not supported on the current OS version.

getCurrentStatus

Retrieves the current status of the recorder.

VoiceRecorder.getCurrentStatus()
    .then((result: CurrentRecordingStatus) => console.log(result.status))
    .catch(error => console.log(error));
Status CodeDescription
NONEPlugin is idle and waiting to start a new recording.
RECORDINGPlugin is currently recording.
PAUSEDRecording is paused.

Format and Mime type

The plugin will return the recording in one of several possible formats. The format is dependent on the os / web browser that the user uses. On android and ios the mime type will be audio/aac, while on chrome and firefox it will be audio/webm;codecs=opus and on safari it will be audio/mp4. Note that these three browsers have been tested on. The plugin should still work on other browsers, as there is a list of mime types that the plugin checks against the user's browser.

Note that this fact might cause unexpected behavior in case you'll try to play recordings between several devices or browsersβ€”as they do not all support the same set of audio formats. It is recommended to convert the recordings to a format that all your target devices support. As this plugin focuses on the recording aspect, it does not provide any conversion between formats.

Playback

To play the recorded file, you can use plain JavaScript:

With Base64 string

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

With Blob

import { Capacitor } from '@capacitor/core'
import { Directory, Filesystem } from '@capacitor/filesystem'

const PATH = '...' // from plugin

/** Generate a URL to the blob file with @capacitor/core and @capacitor/filesystem */
const getBlobURL = async (path: string) => {
  const directory = Directory.Data // Same Directory as the one you used with VoiceRecorder.startRecording

  if (config.public.platform === 'web') {
    const { data } = await Filesystem.readFile({ directory, path })
    return URL.createObjectURL(data)
  }

  const { uri } = await Filesystem.getUri({ directory, path })
  return Capacitor.convertFileSrc(uri)
}

/** Read the audio file */
const play = async () => {
  const url = await getBlobURL(PATH)
  const audioRef = new Audio(url)
  audioRef.onended = () => { URL.revokeObjectUrl(url) }
  audioRef.play()
}

/** Load the audio file (ie: to send to a Cloud Storage service) */
const load = async () => {
  const url = await getBlobURL(PATH)
  const response = await fetch(url)
  return response.blob()
}

Compatibility

Versioning follows Capacitor versioning. Major versions of the plugin are compatible with major versions of Capacitor. You can find each version in its own dedicated branch.

Plugin VersionCapacitor Version
5.*5
6.*6
7.*7

Donation

If you enjoy my work and find it useful, feel free to invite me to a cup of coffee :)

"Buy Me A Coffee"

License

This project is licensed under the MIT License - see the LICENSE file for details.

Credit

Thanks to independo-gmbh for the readme update.

Keywords

capacitor

FAQs

Package last updated on 05 Jun 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts