我的 android 应用程序需要将 PCM(22khz) 转换为 AMR ,但 API AmrInputStream仅支持pcm 为 8khz。
如何将pcm 从 22 khz下采样到 8 khz?
我的 android 应用程序需要将 PCM(22khz) 转换为 AMR ,但 API AmrInputStream仅支持pcm 为 8khz。
如何将pcm 从 22 khz下采样到 8 khz?
采样率在 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();
对于下采样,您可以尝试Mary API。
我找到了一个 java downsample 库:https ://github.com/hutm/JSSRC 还有一个 ac 版本可以被 jni 使用