将 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的主要内容,如果未能解决你的问题,请参考以下文章

多媒体文件格式:PCM / WAV 格式

C++ 将原始音频从 22050 上采样到 48000 Hz

将音频缓冲区从 44100 重新采样到 16000

如何将 8 kHz 音频采样率提高到 16 kHz STM32

iOS 将音频采样率从 16 kHz 转换为 8 kHz

音频相关