前提・実現したいこと
前奏とループ部分に分かれた音源があり、前奏を流し終わった後はループ部分を繰り返し再生したい。
なお、フォーマットの仕様上どうしても前に間隔が空くためmp3は考慮しないものとする。
発生している問題・エラーメッセージ
前奏→ループ部分は間隔が空くことなく繋がるが、ループ部分がループする時に間隔が空いたり(wav音源の場合)再生しきってないのにループしたりする(ogg音源の場合)。
該当のソースコード
Java
1 overture = new MediaPlayer(); 2 refrain = new MediaPlayer(); 3 4 AudioAttributes at = new AudioAttributes.Builder() 5 .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) 6 .setUsage(AudioAttributes.USAGE_GAME) 7 .setLegacyStreamType(AudioManager.STREAM_MUSIC) 8 .build(); 9 10 try 11 { 12 //path、pathloopは音源のパス 13 overture.setDataSource(path); 14 refrain.setDataSource(pathloop); 15 16 overture.setAudioAttributes(at); 17 refrain.setAudioAttributes(at); 18 19 overture.prepare(); 20 refrain.prepare(); 21 22 overture.setNextMediaPlayer(refrain1); 23 24 overture.setLooping(false); 25 refrain.setLooping(true); 26 } 27 //catch文は省略、この後いくつか処理をした後にoverture.start()関数を呼び出す
試したこと
ループ部分を鳴らすMediaPlayerインスタンスを2つ用意し、setNextMediaPlayerで交互に再生しようとしたが失敗(OnCompletionListenerで再生位置を巻き戻してもうまくいかず)。
補足情報(FW/ツールのバージョンなど)
テストした端末はXperia XZ1(Android 8.0)。
IDEはAndroid Studio 3.3。
参考にしたページ
あなたの回答
tips
プレビュー