首页 > 解决方案 > 为什么 ALSA 播放速度过快?

问题描述

我正在使用 lame 解码一个 mp3 文件。MP3 正在通过 ALSA 播放,但音频播放速度过快。我正在用 C 语言编写代码。我尝试更改赋予 snd_pcm_writei 的帧的大小,但它仍然不起作用。

 if((err = snd_pcm_open(&handle, device, SND_PCM_STREAM_PLAYBACK, 0))
            < 0) 
    {
        printf("Playback open error: %s\n", snd_strerror(err));
        exit(EXIT_FAILURE);
    }
    if((err = snd_pcm_set_params(handle, SND_PCM_FORMAT_S16_LE,
            SND_PCM_ACCESS_RW_INTERLEAVED, 2, 44100, 1, 500000))
            < 0) 
    { /* 0.5sec */
        printf("Playback open error: %s\n", snd_strerror(err));
        exit(EXIT_FAILURE);
    }

fin = fopen("mpeg_dump.mp3", "rb");
    if (!fin) 
    {
        printf("Could not open input file\n");
        return 1;
    }


    int headerSize = get_header_size("mpeg_dump.mp3");
    printf("Header Size = %d\n", headerSize);
    fseek(fin,headerSize,SEEK_SET);
     hipVal = hip_decode_init();
     do
     {
        len = fread(buffer, 1, 4096, fin);
        total += len;
        if(len>0)
        {
        ret = hip_decode(hipVal, buffer, 4096, pcmlBuffer, pcmrBuffer);
            frames = snd_pcm_writei(handle, pcmrBuffer, ret);
                if(frames < 0)
                    frames = snd_pcm_recover(handle, frames,
                            0);
                if(frames < 0) 
                {
                    printf("snd_pcm_writei failed: %s\n",
                            snd_strerror(err));

                }
    }
     }while(len>0);

标签: cmp3alsalame

解决方案


推荐阅读