关于android录音实时传输出现噪音的问题
目前在做的一个项目需要将从audiorecorder录音后得到的byte数据直接传输到后台,同时要在本地做存储。
1,本地存储:我是用RandomAccessFile的方式写入到本地文件的;
/* RIFF header */
file.writeBytes("RIFF"); // riff id
file.writeInt(0); // riff chunk size *PLACEHOLDER*
file.writeBytes("WAVE"); // wave type
/* fmt chunk */
file.writeBytes("fmt "); // fmt id
file.writeInt(Integer.reverseBytes(16)); // fmt chunk size
file.writeShort(Short.reverseBytes((short) 1)); // format: 1(PCM)
file.writeShort(Short.reverseBytes((short) CHANNELS)); // channels: 1
file.writeInt(Integer.reverseBytes(FREQUENCY)); // samples per second
file.writeInt(Integer.reverseBytes((int) (CHANNELS * FREQUENCY * BITS / 8))); // BPSecond
file.writeShort(Short.reverseBytes((short) (CHANNELS * BITS / 8))); // BPSample
file.writeShort(Short.reverseBytes((short) (CHANNELS * BITS))); // bPSample
2,传输到后台:
我也把相同的文件头写入到了数据流中,然后audiorecorder产生的byte不做处理,直接用socket流传输到后台:
/* RIFF header */
dataOutputStream.writeBytes("RIFF"); // riff id
dataOutputStream.writeInt(0); // riff chunk size *PLACEHOLDER*
dataOutputStream.writeBytes("WAVE"); // wave type
/* fmt chunk */
dataOutputStream.writeBytes("fmt "); // fmt id
dataOutputStream.writeInt(Integer.reverseBytes(16)); // fmt chunk size
dataOutputStream.writeShort(Short.reverseBytes((short) 1)); // format: 1(PCM)
dataOutputStream.writeShort(Short.reverseBytes((short) CHANNELS)); // channels: 1
dataOutputStream.writeInt(Integer.reverseBytes(FREQUENCY)); // samples per second
dataOutputStream.writeInt(Integer.reverseBytes((int) (CHANNELS * FREQUENCY * BITS / 8))); // BPSecond
dataOutputStream.writeShort(Short.reverseBytes((short) (CHANNELS * BITS / 8))); // BPSample
dataOutputStream.writeShort(Short.reverseBytes((short) (CHANNELS * BITS))); // bPSample
3,问题:
目前的情况是,本地存储的文件在播放时没有问题,声音很正常;但是传输到后台产生的文件,在播放时会出现周期性的dadada的声音。
1,本地存储:我是用RandomAccessFile的方式写入到本地文件的;
/* RIFF header */
file.writeBytes("RIFF"); // riff id
file.writeInt(0); // riff chunk size *PLACEHOLDER*
file.writeBytes("WAVE"); // wave type
/* fmt chunk */
file.writeBytes("fmt "); // fmt id
file.writeInt(Integer.reverseBytes(16)); // fmt chunk size
file.writeShort(Short.reverseBytes((short) 1)); // format: 1(PCM)
file.writeShort(Short.reverseBytes((short) CHANNELS)); // channels: 1
file.writeInt(Integer.reverseBytes(FREQUENCY)); // samples per second
file.writeInt(Integer.reverseBytes((int) (CHANNELS * FREQUENCY * BITS / 8))); // BPSecond
file.writeShort(Short.reverseBytes((short) (CHANNELS * BITS / 8))); // BPSample
file.writeShort(Short.reverseBytes((short) (CHANNELS * BITS))); // bPSample
2,传输到后台:
我也把相同的文件头写入到了数据流中,然后audiorecorder产生的byte不做处理,直接用socket流传输到后台:
/* RIFF header */
dataOutputStream.writeBytes("RIFF"); // riff id
dataOutputStream.writeInt(0); // riff chunk size *PLACEHOLDER*
dataOutputStream.writeBytes("WAVE"); // wave type
/* fmt chunk */
dataOutputStream.writeBytes("fmt "); // fmt id
dataOutputStream.writeInt(Integer.reverseBytes(16)); // fmt chunk size
dataOutputStream.writeShort(Short.reverseBytes((short) 1)); // format: 1(PCM)
dataOutputStream.writeShort(Short.reverseBytes((short) CHANNELS)); // channels: 1
dataOutputStream.writeInt(Integer.reverseBytes(FREQUENCY)); // samples per second
dataOutputStream.writeInt(Integer.reverseBytes((int) (CHANNELS * FREQUENCY * BITS / 8))); // BPSecond
dataOutputStream.writeShort(Short.reverseBytes((short) (CHANNELS * BITS / 8))); // BPSample
dataOutputStream.writeShort(Short.reverseBytes((short) (CHANNELS * BITS))); // bPSample
3,问题:
目前的情况是,本地存储的文件在播放时没有问题,声音很正常;但是传输到后台产生的文件,在播放时会出现周期性的dadada的声音。
...全文
相关推荐
WoMic手机当做电脑麦克风(安卓机可用)
公司要求给内部人员录一个系统使用教程的视频,但是我的笔记本电脑自带麦克风录入噪音太大,所有使用WoMic可以让手机作为电脑的麦克风,非常方便
Android蓝牙音频采集实现指南
本文还有配套的精品资源,点击获取 简介:在Android设备上,蓝牙音频采集是一项关键技术,它支持无线音频流传输,比如将音频从手机传输至蓝牙耳机或扬声器。本文将详细指导如何在Android应用中实现蓝牙连接与音频录制,并重点介绍如何将这两者结合使用。内容涵盖了蓝牙连接的建立,音频录制格式的设定,以及如何将录制的音频数据实时传输到蓝牙设备。同时,为了保证音频传输的稳定性和质量...
Android-Android录屏框架目的是使用systemuid实现内录submix的录制
Android录屏框架,目的是使用system uid实现(内录)submix的录制
Android 语音通信
Android 语音通信
安卓项目源码Android录音程序源码
安卓项目源码Android 录音程序源码


