2

マイクから録音し、いくつかのエフェクトを追加して、これをファイルに保存しようとしています

Android NDK に含まれているネイティブ オーディオの例から始めました。リバーブを追加して再生することはできましたが、これを達成する方法の例やヘルプは見つかりませんでした。

どんな助けでも大歓迎です。

4

2 に答える 2

8

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;

...

于 2013-08-26T13:48:30.603 に答える
0

cからjavaに生のベクターを渡して、mediaRecorderでmp3にエンコードして、生のベクターからオーディオソースを設定できるかどうかはわかりませんが、多分...

于 2014-05-19T21:33:22.947 に答える