Android如何写一段空音频数据,静音数据
2016-10-31 10:16
831 查看
遵循:BY-SA
署名-相同方式共享
4.0协议
作者:谭东
时间:2016年10月31日
环境:Windows 7
有的时候会遇到这样的需求,例如直播时候,某段时间点了静音,你的音频录制数据就要是静音的。但是AudioRecorder还是有数据的,这时你就要自己处理这段时间的数据为静音的,没有音频流的音频。
其实就是你在静音这段时间不使用系统返回的音频data数据,而是写入空data数据即可,有时需要包含头文件。
这里以AAC音频流为例。下面这段就是在AAC裸流里写入了ADTS头文件后,写入了空数据数组,这样出来的AAC音频文件就是静音后的音频文件了。
@Override public void onFrameAvailable(Object o) { AudioBufFrame audioBufFrame = (AudioBufFrame) o; int outBufferSize = audioBufFrame.buf.limit() + 7; byte[] aacBytes = new byte[outBufferSize]; try { if (!write) { fout = new FileOutputStream(MyConfiguration.VIDEO_PATH + "/audio.aac"); write = true; } addADTStoPacket(aacBytes, outBufferSize); fout.write(aacBytes); } catch (IOException e) { e.printStackTrace(); } } /** * 添加ADTS头 * * @param packet * @param packetLen */ private void addADTStoPacket(byte[] packet, int packetLen) { int profile = 2; // AAC LC int freqIdx = 4; // 44.1KHz int chanCfg = 2; // CPE // fill in ADTS data packet[0] = (byte) 0xFF; packet[1] = (byte) 0xF9; packet[2] = (byte) (((profile - 1) << 6) + (freqIdx << 2) + (chanCfg >> 2)); packet[3] = (byte) (((chanCfg & 3) << 6) + (packetLen >> 11)); packet[4] = (byte) ((packetLen & 0x7FF) >> 3); packet[5] = (byte) (((packetLen & 7) << 5) + 0x1F); packet[6] = (byte) 0xFC; }
关于AAC头文件ADTS的文章和ByteBuffer的用法的文章看下面链接即可。
AAC的ADTS头文件信息介绍
ByteBuffer的用法
相关文章推荐
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一 AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- 【Android Audio】Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据