将 pcm/wav 音频从 22khz 下采样到 8khz
Posted
技术标签:
【中文标题】将 pcm/wav 音频从 22khz 下采样到 8khz【英文标题】:Downsampling pcm/wav audio from 22khz to 8khz 【发布时间】:2013-02-18 04:25:55 【问题描述】:我的 android 应用程序需要将 PCM(22khz) 转换为 AMR,但 API AmrInputStream 仅支持 pcm of 8khz。
我如何下采样 pcm 从 22 khz 到 8 khz?
【问题讨论】:
【参考方案1】:采样率在 AmrInputStream.java 中硬编码。
// frame is 20 msec at 8.000 khz
private final static int SAMPLES_PER_FRAME = 8000 * 20 / 1000;
所以您必须先将 PCM 转换为 AMR。
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();
对于下采样,您可以尝试the Mary API。
【讨论】:
我已经这样做了,我想做的是在转换为 amr 之前对 pcm 进行下采样。 查找mary api 对音频文件进行下采样。 这个 api 不能在 android 上运行。 :( 是的,但我很确定 Android 中没有其他 API 可以对音频文件进行下采样,除非您实现或使用现有库。 是的,here 你是,this link 包含使用 ffmpeg 的指南。但是您想在 Android 中使用本机代码来执行此操作吗?【参考方案2】:我找到了一个 java 下采样库:https://github.com/hutm/Js-s-rC jni也可以使用c版本
【讨论】:
以上是关于将 pcm/wav 音频从 22khz 下采样到 8khz的主要内容,如果未能解决你的问题,请参考以下文章
C++ 将原始音频从 22050 上采样到 48000 Hz