マイクから録音し、いくつかのエフェクトを追加して、これをファイルに保存しようとしています
Android NDK に含まれているネイティブ オーディオの例から始めました。リバーブを追加して再生することはできましたが、これを達成する方法の例やヘルプは見つかりませんでした。
どんな助けでも大歓迎です。
マイクから録音し、いくつかのエフェクトを追加して、これをファイルに保存しようとしています
Android NDK に含まれているネイティブ オーディオの例から始めました。リバーブを追加して再生することはできましたが、これを達成する方法の例やヘルプは見つかりませんでした。
どんな助けでも大歓迎です。
OpenSL は、ファイル形式とアクセスのためのフレームワークではありません。生の PCM ファイルが必要な場合は、それを書き込み用に開き、OpenSL コールバックからのすべてのバッファをファイルに入れます。ただし、エンコードされたオーディオが必要な場合は、独自のコーデックとフォーマット ハンドラーが必要です。ffmpeg ライブラリまたは組み込みの stagefright を使用できます。
書き込み再生バッファーをローカルの raw PCM ファイルに更新する
native-audio-jni.c から始めます
#include <stdio.h>
FILE* rawFile = NULL;
int bClosing = 0;
...
void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
{
assert(bq == bqPlayerBufferQueue);
assert(NULL == context);
// for streaming playback, replace this test by logic to find and fill the next buffer
if (--nextCount > 0 && NULL != nextBuffer && 0 != nextSize) {
SLresult result;
// enqueue another buffer
result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, nextBuffer, nextSize);
// the most likely other result is SL_RESULT_BUFFER_INSUFFICIENT,
// which for this code example would indicate a programming error
assert(SL_RESULT_SUCCESS == result);
(void)result;
// AlexC: here we write:
if (rawFile) {
fwrite(nextBuffer, nextSize, 1, rawFile);
}
}
if (bClosing) { // it is important to do this in a callback, to be on the correct thread
fclose(rawFile);
rawFile = NULL;
}
// AlexC: end of changes
}
...
void Java_com_example_nativeaudio_NativeAudio_startRecording(JNIEnv* env, jclass clazz)
{
bClosing = 0;
rawFile = fopen("/sdcard/rawFile.pcm", "wb");
...
void Java_com_example_nativeaudio_NativeAudio_shutdown(JNIEnv* env, jclass clazz)
{
bClosing = 1;
...
cからjavaに生のベクターを渡して、mediaRecorderでmp3にエンコードして、生のベクターからオーディオソースを設定できるかどうかはわかりませんが、多分...