0
回答
音频 AudioTrack.MODE_STATIC(意思是静态模式);遇到了问题就解决
【腾讯云】学生服务器套餐10元/月 >>>   

 private void createAudioTrack() throws Exception
    {


        // 获得构建对象的最小缓冲区大小 一般情况 minBufferSize 会导致播出吱吱声音。
        int minBufSize = AudioTrack.getMinBufferSize(mAudioParam.mFrequency,   //参数是44100采样率 AudioParam.mChannel,                                                                           //参数为单声道
                mAudioParam.mSampBit);                                                    //参数是数据格式为16bit


        int mPrimePlaySize = minBufSize * 2;
        Log.d(TAG, "mPrimePlaySize = " + mPrimePlaySize);


        // STREAM_ALARM:警告声
        // STREAM_MUSCI:音乐声,例如music等
        // STREAM_RING:铃声
        // STREAM_SYSTEM:系统声音
        // STREAM_VOCIE_CALL:电话声音
        mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, mAudioParam.mFrequency,
                mAudioParam.mChannel, mAudioParam.mSampBit,
                minBufSize,
                // AudioTrack.MODE_STREAM);
                AudioTrack.MODE_STATIC);
        // AudioTrack中有MODE_STATIC和MODE_STREAM两种分类。
        // STREAM的意思是由用户在应用程序通过write方式把数据一次一次得写到audiotrack中。
        // 这个和我们在socket中发送数据一样,应用层从某个地方获取数据,例如通过编解码得到PCM数据,然后write到audiotrack。
        // 这种方式的坏处就是总是在JAVA层和Native层交互,效率损失较大。
        // 而STATIC的意思是一开始创建的时候,就把音频数据放到一个固定的buffer,然后直接传给audiotrack,
        // 后续就不用一次次得write了。AudioTrack会自己播放这个buffer中的数据。
        // 这种方法对于铃声等内存占用较小,延时要求较高的声音来说很适用。


    }
·············································

  /*
     * 获得PCM音频数据
     */
    public byte[] getPCMData()
    {
   
    File file = new File(filePath);
    if (file == null){
    return null;
    }
   
    FileInputStream inStream;
try {
inStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}

byte[] data_pack = null;
    if (inStream != null){
    long size = file.length();
   
    data_pack = new byte[(int) size];
    try {
inStream.read(data_pack);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
  
    }
   
    return data_pack;
    }
···········································································

 /*
     * 设置音频源
     */
    public void setDataSource(byte[] data) {
        mData = data;
    }

<无标签>
举报
weng4570
发帖于5年前 0回/1K+阅
顶部