【发布时间】:2011-02-22 19:45:56
【问题描述】:
我正在开发一个用于对来自麦克风的音频进行实时处理的 Android 应用程序。采样和播放工作有效,但我很难实现第一个音频效果 - 失真。音频来自短裤的缓冲区,因此每次收到其中一个时,我都会尝试将这些值映射到有符号短裤的完整大小,然后如果它们高于某个水平,则基本上剪辑这些值。由此产生的音频肯定是失真的,但不是以一种理想的方式。我已经包含了完成此操作的代码。任何人都可以在这里看到错误吗?
public void onMarkerReached(AudioRecord recorder) {
// TODO Auto-generated method stub
short max = maxValue(buffers[ix]);
short multiplier;
if(max!=0)
multiplier = (short) (0x7fff/max);
else
multiplier = 0x7fff;
double distLvl =.8;
short distLvlSho = 31000;
short max2 =100;
for(int i=0;i<buffers[ix].length;i++){
buffers[ix][i]=(short) (buffers[ix][i]*multiplier);
if(buffers[ix][i]>distLvlSho)
buffers[ix][i]=distLvlSho;
else if(buffers[ix][i]<-distLvlSho)
buffers[ix][i]=(short)-distLvlSho;
buffers[ix][i]=(short) (buffers[ix][i]/multiplier);
}
buffers 数组是一个 2D 的 short 数组,处理只在数组中的一个数组中完成,这里是 buffers[ix]。
【问题讨论】:
标签: java android audio signal-processing