我正在尝试使用AudioTrack来播放音乐。 曲目播放,但音频播放率只有一半。这就像这首歌变成了慢动作。
try{
AudioTrack track= new AudioTrack( AudioManager.STREAM_MUSIC,
44100,
android.media.AudioFormat.CHANNEL_CONFIGURATION_MONO,
android.media.AudioFormat.ENCODING_PCM_16BIT,
android.media.AudioTrack.getMinBufferSize( 44100,
android.media.AudioFormat.CHANNEL_CONFIGURATION_STEREO,
android.media.AudioFormat.ENCODING_PCM_16BIT ),
AudioTrack.MODE_STREAM );
System.out.println("Min buffer: " + android.media.AudioTrack.getMinBufferSize( 44100,
android.media.AudioFormat.CHANNEL_CONFIGURATION_STEREO,
android.media.AudioFormat.ENCODING_PCM_16BIT ));
int cnt;
int totalWrite = 0;
boolean play = true;
byte buff[]=new byte[16384];
while((cnt=CircularByteBuffer.getInstance().getInputStream().read(buff))>0){
totalWrite += cnt;
System.out.println("Writing: " + cnt);
track.write(buff, 0, cnt);
if ( totalWrite > 60000 && play ){
track.play();
play = false;
}
}
}catch (Exception e)
{
}//end catch
在CircularByteBuffer中,字节正在另一个线程上写入并在此读取。这首歌在没有任何停顿的情况下持续播放,但它的播放速度很慢。我不知道它可能是什么。有什么想法吗?
答案 0 :(得分:1)
假设这实际上是一个立体声流,为什么要用AudioTrack
创建CHANNEL_CONFIGURATION_MONO
?
答案 1 :(得分:0)
事实证明所有设置都很好。我最终使用“CHANNEL_CONFIGURATION_STEREO”设置,但我尝试在实际设备上运行该应用程序。当我从设备上播放它时,音乐非常好。但模拟器导致了歌曲的所有问题。
我希望这就是原因,模拟器只是一个记忆力并且运行效率低下。
答案 2 :(得分:0)
尝试
track.setPlaybackRate(88200);
track.play();
它应该以正常速度播放