AmrInputStreamを使用してPCM-16からAMRへの変換を行っています。AmrInputStreamの詳細については、http://hi-android.info/src/android/media/AmrInputStream.java.htmlを参照してください。
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である必要があります)。
私の質問は、8000HzでサンプリングされたPCM-16ファイルでこれを機能させることができたということに関するものです。元のPCM-16ファイルに使用される(より高い)周波数は、(アンダーサンプリングされた)出力になります。私が試したAmrInputStream.javaファイルにSAMPLES_PER_FRAME変数がありますが、何にも影響を与えていないようです。
アドバイスや関連する議論は大歓迎です!