AudioTrack: releaseBuffer() track 0xa0079000 disabled due to previous underrun,

wangdeqiang2007 2018-03-26 05:50:17
在开发音频的过程中碰到这个输出 AudioTrack: releaseBuffer() track 0xa0079000 disabled due to previous underrun, restarting;直接的现象就是有些声音没有播放出来

1. 语音属于来自网络,不是那么实时;
2. 我使用android 5.1没有上述问题;但是使用7.1就会出现。

代码非常简单:
...
try {
int read;
//loop to read data and play
audioTrack.play();
long last=System.currentTimeMillis();
//在播放停止的时候,缓存里面还可能有数据,一直播放结束
while(((read=mLoopQueue.read(mBuffer))>0) || mIsPlaying){
if(read==0){
Thread.sleep(100);
continue;
}
int ret = audioTrack.write(mBuffer,0,read);
//check ret
switch (ret){
case AudioTrack.ERROR_INVALID_OPERATION:
case AudioTrack.ERROR_BAD_VALUE:
case AudioManager.ERROR_DEAD_OBJECT:
playFail();
break;
default:
break;
}
}
//error
}catch (RuntimeException e){
e.printStackTrace();
playFail();
}
...

求高人指点!!!!!
...全文
1891 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
键盘舞者113 2018-03-27
  • 打赏
  • 举报
回复
我也不太懂就贴个我使用AudioTrack播放音乐的代码
            mIsRecording = true;
            try {
                // 开通输出流到指定的文件
                DataOutputStream dos = new DataOutputStream(
                        new BufferedOutputStream(
                                new FileOutputStream(mAudioFile)));
                // 根据定义好的几个配置,来获取合适的缓冲大小
                int bufferSize = AudioRecord.getMinBufferSize(mFrequence,
                        mChannelConfig, mAudioEncoding);
                // 实例化AudioRecord
                AudioRecord record = new AudioRecord(
                        MediaRecorder.AudioSource.MIC, mFrequence,
                        mChannelConfig, mAudioEncoding, bufferSize);
                // 定义缓冲
                short[] buffer = new short[bufferSize];


                // 开始录制
                record.startRecording();


                int r = 0; // 存储录制进度
                // 定义循环,根据isRecording的值来判断是否继续录制
                while (mIsRecording) {
                    // 从bufferSize中读取字节,返回读取的short个数
                    int bufferReadResult = record
                            .read(buffer, 0, buffer.length);
                    // 循环将buffer中的音频数据写入到OutputStream中
                    for (int i = 0; i < bufferReadResult; i++) {
                        dos.writeShort(buffer[i]);
                    }
                    publishProgress(new Integer(r)); // 向UI线程报告当前进度
                    r++; // 自增进度值
                }
                // 录制结束
                record.stop();
                Log.i("slack", "::" + mAudioFile.length());
                dos.close();
            } catch (Exception e) {
                // TODO: handle exception
                Log.e("slack", "::" + e.getMessage());
            }
return null;

80,359

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧