首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解码/编码flac到wav时出错

解码/编码flac到wav时出错
EN

Stack Overflow用户
提问于 2011-12-29 09:32:57
回答 1查看 1.6K关注 0票数 4

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

解码:失败状态: FLAC__STREAM_DECODER_END_OF_STREAM logou

T

这是main.c

代码语言:javascript
复制
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;
}

请帮帮我。我为什么要犯这个错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-09 09:12:08

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

代码语言:javascript
复制
if((fout = fopen(outfile, "wb")) == NULL) {

FLAC示例的工作方式似乎有些混乱。

代码语言:javascript
复制
FLAC__stream_decoder_init_file

打开文件,将文件名赋予它进行解码,并为解码设置回调。

代码语言:javascript
复制
FLAC__stream_decoder_process_until_end_of_stream

对文件进行解码,对于每一个解码的帧,它调用在调用write_callback时提供的FLAC__stream_decoder_init_file函数,参数作为它的最后一个参数。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8666053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档