int iMinBufSize = AudioTrack.getMinBufferSize(44000,
                          AudioFormat.CHANNEL_CONFIGURATION_MONO,
                          AudioFormat.ENCODING_PCM_16BIT);
aAudioTrack01 = new AudioTrack(AudioManager.STREAM_MUSIC, 44000,
                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
                    AudioFormat.ENCODING_PCM_16BIT,
                    iMinBufSize,
                    AudioTrack.MODE_STREAM);
aAudioTrack01.play();
byte data[] = new byte[iMinBufSize];
然后通过文件读取context.openFileInput把mp3读到data中
aAudioTrack01.write(data, 0, data.length);出来的声音是噪音,话说是否audiotrack只能读取录制的音乐么或者有什么其他方法能够把声音通过单声道播放,或是需要通过驱动手动修改么

解决方案 »

  1.   

    貌似不行吧,context.openFileInput的读出字符流AudioTrack.write只把它当普通字符流出来,应该发出的是杂音。。
    soundpool应该能控制声道
      

  2.   

    如果是单声道的mp3音频文件
    采样率要除2
    同时采样率应该是从mp3中得到,不应该写死。
    可参考mp3的数据格式中的帧头结构,得到采样率
    http://blog.163.com/waft_xu/blog/static/438152942008139330707/
    int iMinBufSize = AudioTrack.getMinBufferSize(44000/2,
      AudioFormat.CHANNEL_CONFIGURATION_MONO,
      AudioFormat.ENCODING_PCM_16BIT);
    aAudioTrack01 = new AudioTrack(AudioManager.STREAM_MUSIC, 44000/2,
      AudioFormat.CHANNEL_CONFIGURATION_MONO,
      AudioFormat.ENCODING_PCM_16BIT,
      iMinBufSize,
      AudioTrack.MODE_STREAM);
      

  3.   

    刚刚的有个地方错了。如果是单声道的mp3音频文件
    采样率要除2
    同时采样率应该是从mp3中得到,不应该写死。
    可参考mp3的数据格式中的帧头结构,得到采样率
    http://blog.163.com/waft_xu/blog/static/438152942008139330707/
    int iMinBufSize = AudioTrack.getMinBufferSize(44000/2,
      AudioFormat.CHANNEL_CONFIGURATION_STEREO,
      AudioFormat.ENCODING_PCM_16BIT);
    aAudioTrack01 = new AudioTrack(AudioManager.STREAM_MUSIC, 44000/2,
      AudioFormat.CHANNEL_CONFIGURATION_STEREO,
      AudioFormat.ENCODING_PCM_16BIT,
      iMinBufSize,
      AudioTrack.MODE_STREAM);