0

「new.wav」という名前の wav ファイルがあり、Android で MediaPlayer と AudioTrack を介して再生したい:

String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = "new.wav";
File f = new File(baseDir + File.separator + fileName);
byte[] b = null;

try {
    b=this.readFile(f);
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Log.i("123"," "+"length is "+b.length);
truncated=new byte[b.length-44];
truncated=Arrays.copyOf(b, b.length-44);
at=new AudioTrack(AudioManager.STREAM_MUSIC, 48000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, truncated.length /* 1 second buffer */, AudioTrack.MODE_STREAM);
at.write(truncated, 0, truncated.length);
at.play();

mp = new MediaPlayer();

try {
    mp.setDataSource(baseDir + File.separator + fileName);
} catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

try {
    mp.prepare();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

両方の方法を試してみたところ、AudioTrack が wav ファイルの元のサウンドを出力していないため、サウンドが同じではないことがわかりました。私のサンプルレートは問題ないと思います。この問題について誰か助けてもらえますか? ありがとう!

4

1 に答える 1

0

上記のコメントで述べたように、問題はチャネルの選択です。

于 2013-04-28T18:39:33.427 に答える