gpt4 book ai didi

java - jFLAC。分割 FLAC 文件

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

我需要将 flac 文件分割成许多部分。我正在使用 jFLAC 库读取 flac 文件

FLACDecoder decoder = new FLACDecoder(inputStream);

然后我尝试解码到 SeekPoints 之间的父文件

decoder.decode(seekPointFrom, seekPointTo);

我也不太明白如何正确地获取此搜索点的秒值。例如,我需要第一个搜索点从 0 秒开始,第二个搜索点到 150 秒。如何获得正确的搜索点对象? Seekpoint structor 是

/**
* The constructor.
* @param sampleNumber The sample number of the target frame
* @param streamOffset The offset, in bytes, of the target frame with respect to beginning of the first frame
* @param frameSamples The number of samples in the target frame
*/
public SeekPoint(long sampleNumber, long streamOffset, int frameSamples) {
this.sampleNumber = sampleNumber;
this.streamOffset = streamOffset;
this.frameSamples = frameSamples;
}

解码器还有一些监听器来监听每个读取 block 操作。

 @Override
public void processPCM(ByteData pcm) {
try {
outputStream.write(pcm.getData(), 0, pcm.getLen());
} catch (IOException e) {
e.printStackTrace();
}
}

写入完成后,我想播放新的 flac 文件,但我的播放器警告该文件不正确。我需要做什么才能正确打开我的 flac 文件?也许我需要向该文件或其他文件写入一些 header ?

最佳答案

对于 FLAC SeekPoints,不能保证有一个对应于给定的秒 - 整个音频文件中可能只有几个 SeekPoints。

因此,我最近更新了 jFLAC 的搜索功能,让您至少能找到最近的音频帧: https://github.com/nguillaumin/jflac/commit/585940af97157eb11b60c15cc8cb13ef3fc27ce3

关于写出新文件,解码数据将位于原始 PCM 样本中。因此,如果您想要有效的 FLAC 文件作为输出,则需要将其通过管道传输到 FLAC 编码器中。或者,您可以写出 Wave header 并转储原始 PCM 样本,然后将生成的 Wave 文件转换为 FLAC 文件。

关于java - jFLAC。分割 FLAC 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889302/

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