2

次のコードを使用して、オーディオのレコード部分のピッチを調整しようとしています。

http://developer.android.com/guide/topics/media/audio-capture.html

私の推測では、この調整はMediaRecorder.

http://developer.android.com/reference/android/media/MediaRecorder.html

しかし、どのメソッドを呼び出してピッチを変更すればよいかわかりません。

SO を調べると、Android でサウンドファイルの周波数を変更していることがSoundPoolわかりましたが、フォローしているオーディオ キャプチャ ガイドの要素と統合する方法について混乱しています。私が使用している開発者ガイドに基づく、より簡単な解決策はありますか?

4

1 に答える 1

4
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
mSoundPool = new SoundPool(size, AudioManager.STREAM_MUSIC, 0);
mSoundPoolMap = new HashMap<Integer, Integer>();
mSoundPoolMap.put(index, mSoundPool.load(context, R.raw.sound, 1));


mSoundPool.play(id, streamVolume, streamVolume, 1, loop, 1f);

周波数は 1f の部分です。.5f から 2.0f の間の値に変更すると、サンプルの速度が遅くなるか速くなり、ピッチが変化します。

私のアプリの1つからのいくつかのコードは次のとおりです。

    private SoundPool soundpool; 
    private HashMap<Integer, Integer> soundsMap;

    protected void onCreate(Bundle savedInstanceState) {

soundpool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
        soundsMap = new HashMap<Integer, Integer>();
        soundsMap.put(cowbell1, soundpool.load(this, R.raw.cowbell, 1));
        soundsMap.put(cowbell2, soundpool.load(this, R.raw.cowbell1, 1));
        soundsMap.put(cowbell3, soundpool.load(this, R.raw.windhh3, 1));

}

    public void playSound(int sound, float fSpeed) {
    AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
    float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    float volume = streamVolumeCurrent / streamVolumeMax;  
    soundpool.play(soundsMap.get(sound), volume, volume, 1, 0, fSpeed);
   }

サウンドを呼び出すには、これを使用します。

                playSound(cowbell1, 1.0f);
or 
                playSound(cowbell2, 1.0f);

レートは、1.0f 値を変更することで変更できます。

それでも問題が解決しない場合は、コードを投稿してください。確認します。

于 2013-09-24T22:15:30.893 に答える