kas*_*urd 5 audio android playback recording android-ndk
我的目标是在录制设备的麦克风输入时以低延迟播放本地文件.我来到Superpowered库,因为从文档中它提供了低延迟功能.我使用SuperpoweredAdvancedAudioPlayer和SuperpoweredAndroidAudioIO创建了播放器,它播放得很好.
SuperpoweredAndroidAudioIO具有带有参数boolean enableInput,boolean enableOutput的construcor.目前我正在使用enableInput == false和enableOutput == true.当我把这些参数设置为true时 - 没有效果.
我想知道是否可以同时录制文件和播放其他文件?
在库中还有SuperpoweredRecorder类,但它表示不能直接写入磁盘.并且需要使用createWAV,fwrite,closeWAV方法.我已经尝试过单独使用Recorder,但质量不好(它比实际录音快两三倍+声音被分散).这是我用过的最简单的录音代码:
void SuperpoweredFileRecorder::start(const char *destinationPath) {
file = createWAV(destinationPath, sampleRate, 2);
audioIO = new SuperpoweredAndroidAudioIO(sampleRate, bufferSize, true, false, audioProcessing, NULL, bufferSize); // Start audio input/output.
}
void SuperpoweredFileRecorder::stop() {
closeWAV(file);
audioIO->stop();
}
static bool audioProcessing(void *clientdata, short int *audioInputOutput, int numberOfSamples, int samplerate) {
fwrite(audioInputOutput, sizeof(short int), numberOfSamples, file);
return false;
}
Run Code Online (Sandbox Code Playgroud)
可能我不能将Superpowered用于此目的,只需要直接使用OpenSL ES进行录制.
提前致谢!
经过实验,我找到了解决方案.
我发布了一些我实现的想法的代码片段:
https://bitbucket.org/snippets/kasurd/Mynnp/nativesuperpoweredrecorder-with
希望它能帮助别人!
小智 5
您可以使用 SuperpoweredAndroidAudioIO 的一个实例(将enableInput 和enableOutput 设置为true)来执行此操作。
音频处理回调(在您的情况下是audioProcessing())在audioInputOutput参数中接收音频(麦克风)。只需将其传递给 SuperpoweredRecorder,它就会将其写入磁盘。
之后,进行 SuperpoweredAdvancedAudioPlayer 处理,并将结果转换为audioInputOutput。这将进入音频输出。
所以就像伪代码一样:
audioProcessing(audioInputOutput) {
recorder->process(audioInputOutput)
player->process(some_buffer)
float_to_short_int(some_buffer, audioInputOutput)
}
Run Code Online (Sandbox Code Playgroud)
切勿在音频处理回调中执行任何 fwrite,因为它必须在很短的时间内完成,并且磁盘操作可能太慢。
| 归档时间: |
|
| 查看次数: |
2474 次 |
| 最近记录: |