我正在使用AmrInputStream从PCM-16转换为AMR。 AmrInputStream的详细信息可以在这里找到http://hi-android.info/src/android/media/AmrInputStream.java.html使用AmrInputStream将PCM-16转换为AMR
我很新的编程,虽然它谈论使用JNI和东西,我不知道什么JNI是什么,我不认为这是讨论所必需的。上面的AmrInputStream显然也没有在SDK和NDK中找到,但我已经能够使用它了。
我一直在搜索互联网上如何使用流,但还没有找到任何示例。最后我进行了实验,发现它与任何InputStream都相似。这里有一个代码片段
InputStream inStream;
inStream = new FileInputStream("abc.wav");
AmrInputStream aStream = new AmrInputStream(inStream);
File file = new File("xyz.amr");
file.createNewFile();
OutputStream out = new FileOutputStream(file);
byte[] x = new byte[1024];
int len;
while ((len=aStream.read(x)) > 0) {
out.write(x,0,len);
}
out.close();
我测试了这一点,它一直(编辑(需要添加#AMR \ n标签用于播放输出文件!):该AMR标签必须是#AMR \ n )。
我的问题属于,我只能设法得到这个工作在8000赫兹采样的PCM-16文件。用于原始PCM-16文件的任何(更高)频率都会导致(欠采样)输出。 AmrInputStream.java文件中有一个SAMPLES_PER_FRAME变量,我尝试过,但它似乎没有影响任何东西。
欢迎任何建议或相关的讨论!
你有没有找到任何解决方案将更高频率的wav转换为android中的amr? –
@lan Low是否可以使用AmrInputStream转换为amr 16 khz? –
你如何编写amr头文件? –