サウンド関連のアプリケーションを開発しています。音声をロボットの音のように完全に違う音に変えたり、音声をエコーさせたりしようとしています。私はサウンドプールで試しましたが、それを達成する方法を知っている人は誰もいません。私はこれを達成するために基本的なアイデアだけが必要です、助けてください。どうもありがとう。
3 に答える
ピッチとエコーは別物です。
ピッチ:
再生レートを変更することで、ピッチを変更できます。audioTrackとsetPlayBackRateまたはSoundPoolとsetRateの 2 つの方法でそれを行うことができます。必要に応じて、AudioTrack は大きなファイルでより広い範囲のピッチ (1hz から x2 まで) を許可し、サウンド エフェクト用の SoundPool と picth は x0.5 から x2 の間で変化します。
エコー/リバーブ:
API レベル 9 以降、これをAudioEffectでアーカイブするには、AudioTrack または MediaPlayer インスタンスにアタッチします。
ロボット エフェクトの場合、オーディオに一定のピッチを設定します。つまり、FFT を実行し、すべてを 1 つの周波数ビンに移動してから、逆 FFT を実行して時間領域に戻します。
エコー効果の場合、希望のエコー遅延と同じ長さの別のバッファーを保持できます。そして、すべてのサンプルに対して、次のようなことを行います (疑似コード):
output = mix(currentSample, echoBuffer[echoPos]*echoVolume)
echoBuffer[echoPos] = mix(currentSample, echoBuffer[echoPos]*echofeedback)
echoPos += 1
私は同様のプロジェクトに取り組んでおり、DSP (デジタル信号処理)、PCM 16 形式、できればフーリエ変換を検討する必要があると言えます。
AudioRecord クラスを使用してオーディオをループバックすることができます (スレッドを実行して、AudioTrack のバッファを絶えず埋めます)。
しかし、達成しようとしているものに対して遅延が大きすぎる可能性があります。
頑張ってください!
いくつかの本当に良いポインタ: Android AudioRecord クラス - ライブ マイク オーディオをすばやく処理し、コールバック関数を設定する