24620


androidでmp3を2倍速で再生しようとしています。

SoundPoolのplayには、  
public final int play (int soundID, float leftVolume, float rightVolume, int
priority, int loop, float rate)  
rate：再生速度（0.5〜2.0：0.5倍から2倍の速度まで設定できる）とありました。

今回、再生するmp3は長さが1時間ぐらいのなので、SoundPoolでは再生できそうにないので、別の方法を探しています。すみませんがアドバイスをよろしくお願い致します。


CC BY-SA 3.0
2016-04-20T06:06:22.297
24177
2016-05-07T00:56:31.683
7212
question
android
androidでmp3を2倍速で再生するには


`AudioTrack`というクラスで`setPlaybackRate(int sampleRateInHz)`が使えます。  
<http://developer.android.com/intl/ja/reference/android/media/AudioTrack.html#setPlaybackRate(int)>

ただしこのクラスは音声の波形データを再生するためのクラスなので、  
`MediaCodec`や`MediaExtractor`と合わせて使うことになります。  
SoundPoolよりも使い勝手は落ちますがご質問の内容と同等のことが可能です。

またAPI Level 23以上であれば、`MediaPlayer`の`setPlaybackParams`を使うことで  
音声ファイルの再生速度を変更することが可能です。  
<http://developer.android.com/intl/ja/reference/android/media/MediaPlayer.html#setPlaybackParams(android.media.PlaybackParams)>

ご質問には特に書かれていませんでしたが、こちらの方法では音程を保ったまま再生速度を変更することができます。  
（逆に言うとSoundPoolやAudioTrackでは再生速度を変えると音程も変わってしまいます。）


CC BY-SA 3.0
2016-04-23T07:01:50.163
24278
2016-04-23T07:01:50.163
915
24177
answer


自己レスです。  
音程を変えずに2倍速で再生することができました。

以下のExoPlayerとsonicを組み合わせることで実現できました。  
<https://github.com/ariestiyansyah/indonesiax-android-app>  
<https://github.com/waywardgeek/sonic-ndk>

ExoPlayerでは、MediaCodecでmp3をデコードしてそれをAudioTrackに出力して再生していました。それを、AudioTrackに出力する前に、sonicの音声の波形データを加工する処理を追加することで2倍速で再生できました。

ソースの変更箇所は、ごくわずかで思ってより簡単に済みました。アドバイスありがとうございました。


CC BY-SA 3.0
2016-05-07T00:39:15.887
24620
2016-05-07T00:56:31.683
2016-05-07T00:56:31.683
7212
7212
24177
answer