1

我正在尝试使用 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 中,字节被写入另一个线程并在这个线程上读取。这首歌持续播放,没有任何停顿,但播放速度很慢。我不知道它可能是什么。有任何想法吗?

4

3 回答 3

1

假设这实际上是一个立体声流,你为什么要创建AudioTrackwith CHANNEL_CONFIGURATION_MONO

于 2012-10-17T19:25:00.300 回答
1

尝试

track.setPlaybackRate(88200);
track.play();

它应该以正常速度播放

于 2013-08-13T14:27:19.450 回答
0

事实证明,所有设置都很好。我最终使用了“CHANNEL_CONFIGURATION_STEREO”设置,但我尝试在实际设备上运行该应用程序。当我从设备流式传输它时,音乐非常好。但是模拟器导致了这首歌的所有问题。

我希望这就是原因,模拟器只是一个内存猪并且运行效率低下。

于 2012-10-18T16:56:48.880 回答