从22kHz的到8kHz的下采样PCM / WAV音频 [英] Downsampling pcm/wav audio from 22khz to 8khz

查看:536
本文介绍了从22kHz的到8kHz的下采样PCM / WAV音频的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Andr​​oid应用程序需要PCM(22kHz)环绕转换为AMR,但是API <一个href=\"https://github.com/android/platform_frameworks_base/blob/master/media/java/android/media/AmrInputStream.java\"相对=nofollow> AmrInputStream 只支持 8kHz的PCM的

My android application needs to convert PCM(22khz) to AMR , but the API AmrInputStream only supports with pcm of 8khz.

我怎么能 downsample的 PCM 22 kHz到8千?

推荐答案

采样率是AmrInputStream.java硬codeD。

The sample rate is hard coded in AmrInputStream.java.

// frame is 20 msec at 8.000 khz
private final static int SAMPLES_PER_FRAME = 8000 * 20 / 1000;

所以,你必须到PCM首先转换为AMR。

So you have to convert the PCM to AMR first.

InputStream inStream;
inStream = new FileInputStream(wavFilename);
AmrInputStream aStream = new AmrInputStream(inStream);

File file = new File(amrFilename);        
file.createNewFile();
OutputStream out = new FileOutputStream(file); 

//adding tag #!AMR\n
out.write(0x23);
out.write(0x21);
out.write(0x41);
out.write(0x4D);
out.write(0x52);
out.write(0x0A);    

byte[] x = new byte[1024];
int len;
while ((len=aStream.read(x)) > 0) {
    out.write(x,0,len);
}

out.close();

有关下采样,您可以尝试<一个href=\"http://mary.dfki.de/javadoc/4.0.0/marytts/util/data/audio/AudioConverterUtils.html#downSampling%28javax.sound.sampled.AudioInputStream,%20int%29\"相对=nofollow>玛丽API 。

For Downsampling, You can try the Mary API.

这篇关于从22kHz的到8kHz的下采样PCM / WAV音频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆