【发布时间】:2019-03-27 23:23:04
【问题描述】:
我正在使用 Java WavFile 类的迭代方法在 Java 中拆分立体声 wav 文件。当我使用 python 读取生成的单声道 wav 文件并使用 scipy.io.wavfile 中的读取方法输出采样率和数据时,出现错误:
'值错误:文件意外结束。'
我尝试的其他单声道 wav 文件没有出现此错误,只有我使用 Java 制作的文件。查看其他论坛帖子,我知道这一定与我如何设置文件的标题信息有关,但是,在尝试争吵并阅读 API 文档以确保我的用法正确之后,我不知所措。
我的 Java 代码
try {
WavFile srcFile = WavFile.openWavFile(this.audioFile);
long numFrames = srcFile.getNumFrames();
long sampleRate = srcFile.getSampleRate();
int channels = 2;
int bitRate = 16;
File[] files = new File[channels];
WavFile[] wavFiles = new WavFile[channels];
for (int i = 1; i < channels + 1; i++) {
//Populates File Array
files[i - 1] = new File("output" + i + ".WAV");
wavFiles[i - 1] = WavFile.newWavFile(files[i - 1], 1, numFrames, bitRate, sampleRate);
}
int bufferLength = Math.toIntExact(numFrames);
int[][] buffer = new int[channels][bufferLength];
long frameCounter = 0;
while (frameCounter < numFrames){
srcFile.readFrames(buffer,bufferLength);
for (int j = 0; j<channels;j++){
wavFiles[j].writeFrames(buffer[j],bufferLength);
}
frameCounter += bufferLength;
}
} catch (Exception ex) {
System.out.println("WavFile failed to open source file: " + ex);
}
从wav文件中提取数据的简单python代码
import scipy.io.wavfile as wav
fs, data = wav.read(file)
wav.close()
根据我的理解,python 代码在读取 wav 文件时应该没有问题,无论其来源如何。
【问题讨论】:
-
您能否链接到您的 Java 代码生成的文件之一?
-
我不完全确定这会起作用,但作为一个建议,尝试通过以下方式放置您的 wav 文件:
ffmpeg -i "orig.wav" -f wav -bitexact -acodec pcm_s16le -ar 22050 -ac 1 "ffmpeg.wav",然后尝试再次运行 python 脚本。另外,尝试使用 ffmpeg 创建一个 wav 文件以查看它是否运行。这只是为了排除安装错误的可能性。 -
这是一个保管箱链接。我希望这行得通。 dropbox.com/s/leolwqmimiriqab/output1.WAV?dl=0
-
使用 ffmpeg 允许代码运行。它究竟是做什么的?明天我有空的时候再读一读。但是,如果您愿意用自己的话来表达,那会有所帮助。
-
我只需要关闭语句。 ffmpeg 确保存在标头信息所述的帧数量。