使用AudioTrack在Android中播放wav文件:嘈杂的声音
为了在Android上产生声音,我使用了使用AudioTrack在Android中播放wav文件:嘈杂的声音,android,audio,Android,Audio,为了在Android上产生声音,我使用了AudioTrack 我已经能够产生正弦波、锯齿波、方波,但如果能有更真实的声音就好了 我发现.wav文件最容易在AudioTrack上播放,因为它们基本上只是一个带头的字节序列 因此,我在res/raw文件夹中获得了我的wav文件,并尝试使用以下代码播放它: public void writeWav(){ byte[] byteData = null; InputStream is = getResources().openRawResource
AudioTrack
我已经能够产生正弦波、锯齿波、方波,但如果能有更真实的声音就好了
我发现.wav
文件最容易在AudioTrack
上播放,因为它们基本上只是一个带头的字节序列
因此,我在res/raw
文件夹中获得了我的wav文件,并尝试使用以下代码播放它:
public void writeWav(){
byte[] byteData = null;
InputStream is = getResources().openRawResource(R.raw.high);
byteData = new byte[mBufferSize];
try {
is.read(byteData);
is.close();
}
catch (FileNotFoundException e) {}
catch (IOException e) {}
mAudioTrack.write(byteData, 0, byteData.length);
}
但我得到的只是噪音。我意识到有很多关于
AudioTrack
和wav文件的问题,但我找不到噪音问题的答案。使用AudioTrack播放声音时使用此方法。它对我有用
public void playAudioTrack() {
int sampleFreq = 16000;
File file = new File("--filePath--");
int shortSizeInBytes = Short.SIZE / Byte.SIZE;
int minBufferSize = AudioTrack.getMinBufferSize(sampleFreq, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT);
int bufferSizeInBytes = (int)(file.length() / shortSizeInBytes);
final AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, sampleFreq,
AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize,
AudioTrack.MODE_STREAM);
int i = 0;
byte[] s = new byte[bufferSizeInBytes];
try {
final FileInputStream fin = new FileInputStream("--filePath--");
final DataInputStream dis = new DataInputStream(fin);
at.setNotificationMarkerPosition((int)(file.length() / 2));
at.play();
while ((i = dis.read(s, 0, bufferSizeInBytes)) > -1) {
at.write(s, 0, i);
}
} catch (FileNotFoundException e) {
} catch (IOException e) {
} catch (Exception e) {
}
}