Android如何写一段空音频数据,静音数据
生活随笔
收集整理的這篇文章主要介紹了
Android如何写一段空音频数据,静音数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
遵循:BY-SA
署名-相同方式共享 4.0協議
作者:譚東
時間:2016年10月31日
環境:Windows 7
有的時候會遇到這樣的需求,例如直播時候,某段時間點了靜音,你的音頻錄制數據就要是靜音的。但是AudioRecorder還是有數據的,這時你就要自己處理這段時間的數據為靜音的,沒有音頻流的音頻。
其實就是你在靜音這段時間不使用系統返回的音頻data數據,而是寫入空data數據即可,有時需要包含頭文件。
這里以AAC音頻流為例。下面這段就是在AAC裸流里寫入了ADTS頭文件后,寫入了空數據數組,這樣出來的AAC音頻文件就是靜音后的音頻文件了。
@Overridepublic 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 LCint freqIdx = 4; // 44.1KHzint chanCfg = 2; // CPE// fill in ADTS datapacket[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如何写一段空音频数据,静音数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年9月电子学会图形化四级编程题解
- 下一篇: 讯飞语音空指针错误