アプリの内部音を録音することはできますか?
私のアプリでは、音楽シーケンスを作成して再生できます。
soundPool.play(soundIds[i], 1f, 1f, 1, 0, Constants.TIME_RATE);
シーケンスを記録して mp3 にエクスポートできるようにしたいと考えています。
Audio Captureを調べましたが、setAudioSource (int audio_source) は MIC 録音のみを受け入れるようです。
ありがとう
アプリの内部音を録音することはできますか?
私のアプリでは、音楽シーケンスを作成して再生できます。
soundPool.play(soundIds[i], 1f, 1f, 1, 0, Constants.TIME_RATE);
シーケンスを記録して mp3 にエクスポートできるようにしたいと考えています。
Audio Captureを調べましたが、setAudioSource (int audio_source) は MIC 録音のみを受け入れるようです。
ありがとう
http://xzpeter.org/?p=254によると、Android ソースを変更すると、内部サウンドの再生をキャプチャすることが可能です。特にAudioFlinger::MixerThreadクラスの書き込み機能。(この記事は少し古いことに注意してください。最新の Android バージョンAudioFlingerでは再編成され、書き込みコードが関数内で見つかるようになりましたthreadLoop_write())。
元のソリューション作成者の引用:
AudioFlinger は dir の下に実装されてい
frameworks/base/services/audioflinger/ます。これから行うことは、ミキサー出力を見つけることです。ファイル AudioFlinger.cpp にはAudioFlinger::MixerThread::threadLoop()、ミキサーの作業スレッドである があり、この MixerThread は から継承されていAudioFlinger::BaseThreadます。次に、mOutput->write最適なエディター (vim、emacs、gedit など) でキーワードを検索すると、threadLoop()関数の下に次のようなものが見つかります。mLastWriteTime = systemTime(); mInWrite = true; mBytesWritten += mixBufferSize; int bytesWritten = (int)mOutput->write(mMixBuffer, mixBufferSize); if (bytesWritten < 0) mBytesWritten -= mixBufferSize; mNumWrites++; mInWrite = false;それは、ミキサーの出力バッファがハードウェア関連のコードに転送され、オーディオクリップが 、
mMixbufferサイズがmixBufferSize. このバッファには、44100Hz のサンプリング レート、2 チャネル、パラメータとして 16 ビットのリトル エンディアンを持つ PCM 生オーディオ データがあります。このバッファを のようなファイルに書き出す場合、/data/wav.rawadb pull を使用してデータ ファイルをホスト マシンに取得し、aplay で再生できます。
aplay -t raw -c 2 -f S16_LE -r 44100 wav.raw
とにかく、それを mp3 に変換するには、Michael が述べたように外部エンコーダを使用する必要があります。