Skip to content
Simplest Sound Recorder for React Native
Branch: master
Clone or download
Latest commit 9043560 Mar 5, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
ios Add requiresMainQueueSetup method Aug 13, 2018
.gitignore Init Aug 7, 2017
.npmignore Prepare for publish Aug 7, 2017
LICENSE Add License (Closes #6) Apr 9, 2018 Update Apr 23, 2018
RNSoundRecorder.podspec Create RNSoundRecorder.podspec Apr 25, 2018
index.js Add options Aug 7, 2017
package.json Release 1.3.3 Mar 5, 2019


No-hassle Sound Recorder for React Native.

There are existing libraries out in the wild

Why reinvent the wheel?

At the time of writing, the above libaries are either inconsistent or incomplete.

For example, the same startRecording call returns a Promise on Android but null in iOS.

Or stopRecording doesn't give a promise/callback at all. So forcing user to do silly things like "wait for 1 second" in order to make sure file is well written to disk.

Getting started

$ npm install react-native-sound-recorder --save

Mostly automatic installation

$ react-native link react-native-sound-recorder

Manual installation


  1. In XCode, in the project navigator, right click LibrariesAdd Files to [your project's name]
  2. Go to node_modulesreact-native-sound-recorder and add RNSoundRecorder.xcodeproj
  3. In XCode, in the project navigator, select your project. Add libRNSoundRecorder.a to your project's Build PhasesLink Binary With Libraries
  4. Run your project (Cmd+R)<


  1. Open up android/app/src/main/java/[...]/
  • Add import com.kevinresol.react_native_sound_recorder.RNSoundRecorderPackage; to the imports at the top of the file
  • Add new RNSoundRecorderPackage() to the list returned by the getPackages() method
  1. Append the following lines to android/settings.gradle:
    include ':react-native-sound-recorder'
    project(':react-native-sound-recorder').projectDir = new File(rootProject.projectDir, 	'../node_modules/react-native-sound-recorder/android')
  2. Insert the following lines inside the dependencies block in android/app/build.gradle:
      compile project(':react-native-sound-recorder')


iOS: Add the following entry to Info.plist:

<string>This sample uses the microphone to record your speech and convert it to text.</string>

Android: Add the following entry to AndroidManifest.xml:

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


import SoundRecorder from 'react-native-sound-recorder';

// Note: You may need to request runtime permission(s) first.

SoundRecorder.start(SoundRecorder.PATH_CACHE + '/test.mp4')
	.then(function() {
		console.log('started recording');

	.then(function(result) {
		console.log('stopped recording, audio file saved at: ' + result.path);


function start(path:String, ?options:Object):Promise<Void>;
function stop():Promise<{path:String, duration:Int}>;
function pause():Promise<Void>;
function resume():Promise<Void>;



  • quality:Enum (Check out the constants prefixed with "QUALITY_")
  • format:Enum (Check out the constants prefixed with "FORMAT_")
  • bitRate:Int, default: not set (will fail on iPhone5 if set)
  • channels:Int (1 or 2), default: 1
  • sampleRate:Int default: 16000


  • source:Enum (Check out the constants prefixed with "SOURCE_")
  • format:Enum (Check out the constants prefixed with "FORMAT_")
  • encoder:Enum (Check out the constants prefixed with "ENCODER_")
  • channels:Int (1 or 2), default: 1
  • bitRate:Int, default: 64000
  • sampleRate:Int default: 16000

Note that the above enums are platform-specific.

Path Constants

  • PATH_LIBRARY (N/A on Android)
You can’t perform that action at this time.