A lightweight audio recording library that records in .wav format
Kotlin: build.gradle.kts
dependencies {
implementation("com.github.karya-inc:rawaudiorecorder:<latest_release>")
}
Groovy: build.gradle
dependencies {
implementation 'com.github.karya-inc:rawaudiorecorder:<latest_release>'
}
Create an instance of RecorderEventListener
private val listener = object : RecorderEventListener {
override fun onPause() {}
override fun onResume() {}
override fun onPrepared() {
}
// maxAmplitude: Maximum amplitude in current chunk, duration: Time elapses in seconds
override fun onProgressUpdate(maxAmplitude: Int, duration: Long) {
}
override fun onStart() {
}
// durationMs: duration of the recorded file in milliseconds
override fun onStop(durationMs: Long) {
}
}
Create an instance of RawAudioRecorder. RawAudioRecoder needs a CoroutineScope, which can be lifecyclsScope if you're creating it inside Activity or preferably viewModelScope when using in an MVVM project.
val recorder = RawAudioRecorder(listener, viewModelScope)
Prepare the recorder
recorder.prepare(filePath = audioFilepath, config = RecorderConfig(), suppressNoise = true)
Start the recording
recorder.startRecording()
// Pause
recorder.pauseRecording()
// Resume
recorder.resumeRecording()
// Stop
recorder.stopRecording()
data class RecorderConfig(
var sampleRate: SampleRate = SampleRate._16_K,
var channels: Int = AudioFormat.CHANNEL_IN_MONO,
var audioEncoding: AudioEncoding = AudioEncoding.PCM_16BIT
)
Configuration | Available values |
---|---|
sampleRate | SampleRate._8_K (8Khz) |
SampleRate._16_K (16Khz) | |
SampleRate._44_K (44.1Khz) | |
audioEncoding | AudioEncoding.PCM_8BIT |
AudioEncoding.PCM_16BIT | |
AudioEncoding.PCM_32BIT, required 'sdk >= Build.VERSION_CODES.S' | |
channels | AudioFormat.CHANNEL_IN_MONO, other configurations from android.media.AudioFormat |
Checkout the sample App for reference
![sample2](https://private-user-images.githubusercontent.com/69595691/248496601-d4575a5d-cf95-4c2f-9cf9-48b285e2e271.jpeg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5NzcxODgsIm5iZiI6MTczODk3Njg4OCwicGF0aCI6Ii82OTU5NTY5MS8yNDg0OTY2MDEtZDQ1NzVhNWQtY2Y5NS00YzJmLTljZjktNDhiMjg1ZTJlMjcxLmpwZWc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwMTA4MDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iOTg1NDVkNmI0N2MyM2U5YjQ1OGRjMGJmNTljNmI4M2I3NThjMjk4MzE2ZDBlYTQyYmE1ODRhNDA2ZjdjMGE3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.WsPLtJBDAR8AZCX7lB2R9XYYJONinxUT4FLmjpf241E)
![sample1](https://private-user-images.githubusercontent.com/69595691/248496607-5cd9c003-9b88-4c4e-943e-2ffae9e797ae.jpeg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5NzcxODgsIm5iZiI6MTczODk3Njg4OCwicGF0aCI6Ii82OTU5NTY5MS8yNDg0OTY2MDctNWNkOWMwMDMtOWI4OC00YzRlLTk0M2UtMmZmYWU5ZTc5N2FlLmpwZWc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwMTA4MDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04MDc4MDU4NTZjZjdjZmM0YzZkOGUwOGQwNjhlMzJkZmVjYmMxYWI3MjQ3MjA0ODgwYzFiZjQ0YWJkYmNiZDVjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Yeu-ICMM2UbZXC21cefZqQElaBOsDUcRla2C2SCWrqE)