gpt4 book ai didi

java - AudioSystem.write(input, AudioFileFormat.Type.WAVE, file) 生成损坏的 WAVE 文件。 RIFF 长度无效

转载 作者:行者123 更新时间:2023-12-01 18:06:25 26 4
gpt4 key购买 nike

此代码生成的 WAV 文件在许多应用程序中不起作用。

当我 checkin RIFFVIEWER 应用程序时,它提示 RIFF 长度无效。 BWFMetaEdit 声称文件已被截断。一些宽容的应用程序(例如 Audacity)可以播放它们。

我在这里做错了什么还是java音频有问题?

// The essence data is PCM formatted, so convert it to a WAVE file
File extractPCM(WAVEPCMDescriptor descriptor, EssenceData data, String name) {
try {
Stream stream = data.getEssenceStream();
URI uri = stream.getStreamURI();
int hashCode = uri.hashCode();

File file = new File(mediaDir,
name + "_" +
String.format("%08X", hashCode)
+ ".wav"
);

if (file.exists()) {
return file;
}

mediaDir.mkdir(); // Ensure exists

log("Copying essence data stream");

stream.setPosition(0);
ByteBuffer buff = stream.read((int)stream.getLength());
stream.close();
buff.flip();

AudioFormat format = new AudioFormat(
Encoding.PCM_SIGNED,
(float)descriptor.getSampleRate().doubleValue(),
(int)descriptor.getQuantizationBits(),
(int)descriptor.getChannelCount(),
(int)descriptor.getBlockAlign(),
(float)descriptor.getAverageBytesPerSecond(),
false
);
AudioInputStream input = new AudioInputStream(
new ByteArrayInputStream(buff.array()), format, buff.capacity());
AudioSystem.write(input,
AudioFileFormat.Type.WAVE, file);
log("Extracted file " + file);
return file;
} catch (EndOfDataException | IllegalArgumentException | IOException e1) {
log(e1);
return null;
}
}

最佳答案

看起来我是以字节的形式提供长度,而不是示例帧。

当我将缓冲区大小除以帧大小时,非容忍应用程序将停止提示。

AudioInputStream input = new AudioInputStream(
new ByteArrayInputStream(buff.array()), format, buff.capacity() / format.getFrameSize());

关于java - AudioSystem.write(input, AudioFileFormat.Type.WAVE, file) 生成损坏的 WAVE 文件。 RIFF 长度无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60549913/

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