噪音消除算法:
void calc1(short[] lin,int off,int len) {
int i,j;
for (i = 0; i < len; i++) {
j = lin[i+off];
lin[i+off] = (short)(j>>2);
}
}
自己录制PCM,播放PCM的DEMO。不用带耳机也不会产生回音.
Runnable test = new Runnable(){
public void run() {
int samp_rate = 8000 ;
int min = AudioRecord.getMinBufferSize(samp_rate,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
Log.e(TAG, "min buffer size:"+min);
//用于采集音频源
AudioRecord record = null;
record = new AudioRecord(
MediaRecorder.AudioSource.MIC,//the recording source
samp_rate, //采样频率,一般为8000hz/s
AudioFormat.CHANNEL_OUT_DEFAULT,
AudioFormat.ENCODING_PCM_16BIT,
min*10);
record.startRecording();
//用于播放音频源
int maxjitter = AudioTrack.getMinBufferSize(samp_rate,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,samp_rate,AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
maxjitter*10, AudioTrack.MODE_STREAM);
track.play();
int frame_size = 320;//g726_32 : 4:1的压缩比
byte [] audioData = new byte [frame_size/4];
short [] encodeData = new short[frame_size/2];
int num = 0;
//库函数
g726Codec codec = new g726Codec ();
short[] putIn = new short [160];
// int result= 0;
while(running)
{
num = record.read(encodeData, 0, 160);
Log.e(TAG, "num:"+num);
calc1(encodeData,0,160);
int wirteNum = track.write(encodeData, 0, num);
// if(wirteNum==160)
// {
// track.play();
// }
// System.arraycopy(encodeData, 0, putIn, 0, 80);
//
// num = record.read(encodeData, 0, 160);
// System.arraycopy(encodeData, 0, putIn, 80, 80);
// num = record.read(putIn, 0, 160);
// Log.e(TAG, "num:"+num);
// if(num == AudioRecord.ERROR_INVALID_OPERATION || num == AudioRecord.ERROR_BAD_VALUE) {
// Log.e(TAG, "Bad ");
// continue;
// }
//
// int iRet = codec.encode(encodeData, audioData);//先用G726进行编码
// Log.e(TAG, "encode iRet:"+iRet);
//
// iRet = codec.decode(audioData, encodeData);//然后用g726进行解码
// Log.e(TAG, "decode iRet:"+iRet);
//
// track.write(encodeData, 0, 160);
// try {
// Thread.sleep(200);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
record.stop();
record.release();
record = null;
track.stop();
track.release();
track = null;
}
};
void calc1(short[] lin,int off,int len) {
int i,j;
for (i = 0; i < len; i++) {
j = lin[i+off];
lin[i+off] = (short)(j>>2);
}
}
protected void onDestroy() {
super.onDestroy();
running = false;
}
分享到:
相关推荐
android音频降噪,采用webrtc技术,包含底层源码和so库
可以录音,停止录音,播放录音,监听声音,除噪音,无杂音,好用,简单
android 利用speex 降低声音噪音,回声消除demo,提高音频播放质量
AudioTool - 一个 android 库,提供音频处理功能,如增加/减少速度、音高、音量、低音等。库还提供剪切、噪声消除和其他有趣和有用的功能 AudioTool 提供: 过滤器 过滤器音频(...) removeAudioNoise(. . .) - 从...
研究Android系统音频架构和录音原理,实时处理麦克风采集到的PCM编码的音频流,使用声压级公式计算分贝值大小。按照软件开发流程,对手机分贝仪进行需求分析、界面设计、模块设计、数据库设计,最终编码实现。详细...
免费的VOIP网络电话,Android平台SIP客户端 支持服务端: Cisco CallManager, OpenSER, Kamailio, OpenSIPS, Asterisk, Radvision, Nortel, Avaya等等 支持语音编码: G.711 aLaw/uLaw, G.722.1, G.722, SPEEX, SPEEX...
移植调试 es8316 audio 驱动文件以及链接 platform/cpu dai/machine/code/通路,跟进 PlayBack 与 capture 录音流程,解决一个喇叭没 有声音、录音 apk 噪音大的问题;了解 audio json 文件的配置以及 pcm open ...
绿噪声-安卓版 添加一名作者 作者 URI: : Skype:bluesilver0702 描述:铃声革命......来自哥斯达黎加迷人而野性的100%真实录音 版本:2.0 执照:蓝银
BabyApp是一个智能录音机,当环境噪声超过预设阈值时将触发该录音机,并将随后的音频文件上传到Web服务器。 规格 该应用程序启动Android后台服务,该服务将测量Android智能手机的麦克风所注册的当前声音级别。 如果...
加入高斯噪声直接解调 output.wav, 得到 message 输入2, 选择模式二: 需要手机或者其他录音设备, 播放 output.wav, 然后录音, 得到 received.wav, 然后解调 received.wav, 得到message 1.2 Android 安卓应用使用说明...
WaveEditor for Android™录音机和编辑器 WaveEditor for Android™是一款用于编辑,录制和掌握音频的专业工具。WaveEditor还支持多种文件类型,使其适用于音频格式转换和媒体播放。 特点 •支持的导入格式:3gp,...
录音带有所需音源,声道,采样率,音频格式以及噪音抑制器,自动增益和撇去沉默等高级选项的录音 ♪分割音频和反向音频将 任何音频文件分成两部分,并使用即时预览反转任何音频文件 ♪文本到语音 AudioLab帮助您...
输入1,选择模式一:加入高斯噪声直接解调 output.wav,得到 message 输入2,选择模式二:需要手机或者其他录音设备,播放 output.wav,然后录音,得到 received.wav,然后解调 received.wav,得到message 1.2 ...