jFLAC。拆分FLAC文件

时间:2012-08-09 17:59:54

标签: java audio split flac

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

FLACDecoder decoder = new FLACDecoder(inputStream);

然后我试图将父文件解码为SeekPoints

decoder.decode(seekPointFrom, seekPointTo);

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

/**
 * 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;
}

解码器也有一些监听器可以监听每个读取的块操作。

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

写完后,我想玩新的flac文件,但我的播放器警告该文件不正确。我需要做什么才能打开我的flac文件?也许我需要在这个文件或其他东西上写一些标题?

1 个答案:

答案 0 :(得分:0)

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

因此,我最近使用搜索功能更新了jFLAC,以使您至少获得最接近的音频帧: https://github.com/nguillaumin/jflac/commit/585940af97157eb11b60c15cc8cb13ef3fc27ce3

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