gpt4 book ai didi

Android AudioTrack 播放 .wav 文件,只得到白噪声

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:59 24 4
gpt4 key购买 nike

当我使用以下代码播放文件时:

private void PlayAudioFileViaAudioTrack(int ResId) throws IOException {

int intSize = android.media.AudioTrack.getMinBufferSize(11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);

AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, intSize,
AudioTrack.MODE_STREAM);

int count = 256 * 1024; // 256 kb
byte[] byteData = null;
byteData = new byte[(int) count];
InputStream in = null;
AssetFileDescriptor fd = null;
fd = mResources.openRawResourceFd(ResId);
in = mResources.openRawResource(ResId);

int bytesRead = 0, amount = 0;
int size = (int) fd.getLength();
at.play();
while (bytesRead < size) {
amount = in.read(byteData, 0, count);
if (amount != -1) {
at.write(byteData, 0, amount);
}
}
in.close();
at.stop();
at.release();

}

我唯一听到的是静态的白噪声。我检查过我的 .wav 文件是否具有相同的属性(采样率、比特率)。我对原始音频数据 (PCM) 了解不多,所以我想知道是否有人能看出我的代码有什么问题。

最佳答案

从您的代码中我可以看到您只是从 wav 文件中读取数据并将它们导入 AudioTrack。 Wav 文件有一个小标题,您可以在此处看到 https://ccrma.stanford.edu/courses/422/projects/WaveFormat/因此,您必须跳过 header 并将文件描述符指向实际音频数据所在的正确位置。

此外,当您播放音频文件并处理字节操作时,您应该注意字节顺序。看这里Using AudioTrack in Android to play a WAV file

在我的代码下方(缺少一些检查和 WAV header 跳过),它在 Nexus One 和 Galaxy S 中都可以使用频率为 8000Hz 和 16 位编码的 wav 文件。

public void playWav(){
int minBufferSize = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
int bufferSize = 512;
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);
String filepath = Environment.getExternalStorageDirectory().getAbsolutePath();

int i = 0;
byte[] s = new byte[bufferSize];
try {
FileInputStream fin = new FileInputStream(filepath + "/REFERENCE.wav");
DataInputStream dis = new DataInputStream(fin);

at.play();
while((i = dis.read(s, 0, bufferSize)) > -1){
at.write(s, 0, i);

}
at.stop();
at.release();
dis.close();
fin.close();

} catch (FileNotFoundException e) {
// TODO
e.printStackTrace();
} catch (IOException e) {
// TODO
e.printStackTrace();
}
}

关于Android AudioTrack 播放 .wav 文件,只得到白噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7372813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com