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

これが実際にステレオ ストリームであると仮定すると、なぜ で を作成しAudioTrackているのCHANNEL_CONFIGURATION_MONOですか?

于 2012-10-17T19:25:00.300 に答える
0

したがって、すべての設定が適切であることがわかります。「CHANNEL_CONFIGURATION_STEREO」の設定で終わってしまいましたが、実機でアプリを動かしてみました。デバイスからストリーミングしたとき、音楽はまったく問題ありませんでした。しかし、シミュレーターが曲のすべての問題を引き起こしていました。

それが理由であり、シミュレーターがメモリを大量に消費し、非効率的に実行されることを願っています。

于 2012-10-18T16:56:48.880 に答える