gpt4 book ai didi

iphone - 将 flac 解码为 wav 或从 wav 解码时出错

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

我在 xcode 项目中添加了 LibFlac。然后我在我的项目中添加了来自 Libflac 的decode/main.c。我通过了 infile.flac 并运行了项目的可执行文件,但它给出了以下错误

decoding: FAILED state: FLAC__STREAM_DECODER_END_OF_STREAM logou

t

这是main.c

int main(int argc, char *argv[])
{
FLAC__bool ok = true;
FLAC__StreamDecoder *decoder = 0;
FLAC__StreamDecoderInitStatus init_status;
FILE *fout;

const char *infile = "infile.flac";
const char *outfile = "outfile.wav";

/*
if(argc != 3) {
fprintf(stderr, "usage: %s infile.flac outfile.wav\n", argv[0]);
return 1;
}
*/

if((fout = fopen("infile.flac", "wb")) == NULL) {
fprintf(stderr, "ERROR: opening %s for output\n", argv[2]);
return 1;
}

if((decoder = FLAC__stream_decoder_new()) == NULL) {
fprintf(stderr, "ERROR: allocating decoder\n");
fclose(fout);
return 1;
}

(void)FLAC__stream_decoder_set_md5_checking(decoder, true);

init_status = FLAC__stream_decoder_init_file(decoder, infile, write_callback, metadata_callback, error_callback, /*client_data=*/fout);
if(init_status != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
fprintf(stderr, "ERROR: initializing decoder: %s\n", FLAC__StreamDecoderInitStatusString[init_status]);
ok = false;
}

if(ok) {
ok = FLAC__stream_decoder_process_until_end_of_stream(decoder);
fprintf(stderr, "decoding: %s\n", ok? "succeeded" : "FAILED");
fprintf(stderr, " state: %s\n", FLAC__StreamDecoderStateString[FLAC__stream_decoder_get_state(decoder)]);
}

FLAC__stream_decoder_delete(decoder);
fclose(fout);

return 0;
}

请帮助我。为什么我会收到此错误?

最佳答案

使用“wb”打开输入文件将在打开它时截断您的输入文件。那不可能是你想要的,对吧?我认为你的意思是;

if((fout = fopen(outfile, "wb")) == NULL) {

FLAC 示例的工作原理似乎有些困惑。

FLAC__stream_decoder_init_file

打开您为其指定文件名的文件进行解码,并设置解码回调。

FLAC__stream_decoder_process_until_end_of_stream

解码文件,对于每个解码的帧,它调用 FLAC__stream_decoder_init_file 调用中提供的 write_callback 函数,并使用最后一个参数给出的参数。

也就是说,所有写文件的工作都是在write_callback中完成的。这是为您提供解码数据的地方,您应该逐帧生成并写入输出文件。如果您查看 http://flac.cvs.sourceforge.net/viewvc/flac/flac/examples/c/decode/file/main.c?view=markup 中的示例这似乎是您一开始复制的内容,这正是它的作用。

关于iphone - 将 flac 解码为 wav 或从 wav 解码时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8666053/

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