ALSA dmix 插件和采样率问题

发布于 2024-08-10 20:04:33 字数 313 浏览 2 评论 0原文

我在嵌入式项目上使用 ALSA dmix 插件,并通过使用 mpg321-alsa 播放来混合 mp3 文件。在我的 asound.conf 中,我将 dmix 采样率设置为 44100Hz。

如果我尝试播放以 44100Hz(或均匀划分为 44100Hz 的速率)以外的速率采样的任何 mp3 文件,那么音频质量会下降,甚至更糟的是文件的开头会被忽略。这有一个随机的方面:如果我创建一个长度为 300 毫秒的音频文件并通过 mpg321-alsa 播放它,那么有时它播放正常,有时根本没有声音。

这是 dmix 的已知问题吗?除了重新采样 mp3 文件之外,还有其他解决方法吗?

I'm using the ALSA dmix plugin on an embedded project, and mixing mp3 files by playing them with mpg321-alsa. In my asound.conf I've set my dmix sample rate to 44100Hz.

If I try to play any mp3 file sampled at a rate other than 44100Hz (or a rate that divides evenly into 44100Hz) then either the audio quality is degraded or even worse the start of the file is omitted. There's a random aspect to this: if I create an audio file that's say 300ms long and play it via mpg321-alsa then sometimes it plays OK and sometimes there's no sound at all.

Is this a known issue with dmix? Are there any workarounds, short of resampling the mp3 files?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

郁金香雨 2024-08-17 20:04:33

请参阅 ALSA 插件文档

请注意,dmix 插件本身仅支持单个配置。也就是说,它仅支持固定速率(默认 48000)、格式(S16)、通道 (2) 和 period_time (125000)。要使用其他配置,您必须在从属 PCM 定义中显式设置该值。速率、格式和频道可以通过额外的插件来覆盖,但无论如何只有一种基本配置。

作为一个例子(修改以满足您的需要),

pcm.dsp0 {
    type plug
    slave.pcm "asym0"
    slave.rate 44100
}

pcm.asym0 {
    type asym
    playback.pcm "dmix0"
    capture.pcm "dsnoop0"
}

pcm.dmix0 {
    type dmix
    ipc_key 1024
    ipc_perm 0666
    slave {
        pcm {
            type hw
            card 0
            device 0
        }
        period_time 0
        period_size 1024
        buffer_size 65536
        format "S16_LE"
        periods 128
        rate 44100
    }
}

pcm.dsnoop0 {
    type dsnoop
    ipc_key 1025
    ipc_perm 0666
    slave.pcm {
        type hw
        card 0
        device 0
    }
}

See the ALSA plugin documentation.

Note that the dmix plugin itself supports only a single configuration. That is, it supports only the fixed rate (default 48000), format (S16), channels (2), and period_time (125000). For using other configuration, you have to set the value explicitly in the slave PCM definition. The rate, format and channels can be covered by an additional plug plugin, but there is only one base configuration, anyway.

As an example (modify to fit your needs),

pcm.dsp0 {
    type plug
    slave.pcm "asym0"
    slave.rate 44100
}

pcm.asym0 {
    type asym
    playback.pcm "dmix0"
    capture.pcm "dsnoop0"
}

pcm.dmix0 {
    type dmix
    ipc_key 1024
    ipc_perm 0666
    slave {
        pcm {
            type hw
            card 0
            device 0
        }
        period_time 0
        period_size 1024
        buffer_size 65536
        format "S16_LE"
        periods 128
        rate 44100
    }
}

pcm.dsnoop0 {
    type dsnoop
    ipc_key 1025
    ipc_perm 0666
    slave.pcm {
        type hw
        card 0
        device 0
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文