在嵌入式平台中利用alsa dmix实现混音
2010-12-24 12:18:41| 分类: Audio|字号 订阅参考:http://blog.chinaunix.net/u3/112227/showart_2261230.html首先了解下alsa的基本架构: Application -
---------------
Alsa-lib User Space
-------------------------------------
Alsa Kernel Space
-------
sound driver
----------------------------------
Hardware
并链 接libasound .
对于上面的架构,在某一时刻只能有一个程序打开声卡并占有它,此时其它程序打开的话,会返回busy.
ESD , pulseaudio
--------------------
Alsa-lib User Space
-------------------------------------
Alsa Kernel Space
-------
sound driver
----------------------------------
Hardware
此时,应用程序将调用ESD,pulseaudio等混音器提供的接口。对于ESD,很多程序支持,比如mplayer . 对于pulseaudio ,有相应的patch。
Alsa本身也提供混音的plugin,dmix .
App1 App2
---------------
Alsa-lib (dmix) User Space
-------------------------------------
Alsa Kernel Space
-------
sound driver
----------------------------------
Hardware
此架构和架构1,应用程序不需要做任何修改,只需要修改/usr/share/alsa/asound.conf
架构1的/usr/share/alsa/asound.conf的例子:
pcm.!default {
type hw
card 0
}
ctl.!default {
type hw
card 0
}
架构3的/usr/share/alsa/asound.conf的例子:
pcm.card0 {
type hw
card 0
}
pcm.!default {
type plug
slave.pcm "dmixer"
}
pcm.dmixer {
type dmix
ipc_key 1025
slave {
pcm "hw:0,0"
period_time 0
period_size 4096
buffer_size 16384
periods 128
rate 44100
}
bindings {
0 0
1 1
}
}
关于配置,可以参考这个网站:
http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html
对于period_size和buffer_size,要注意,这里将它们修改为1024 ,8192.
用mplayer进行测试:
board1:$mplayer -slave -quiet test1.mp3
board2:$mplayer -slave -quiet test2.mp3
就可以听到2个音乐混在一起输出,且可以各自控制各自的播放。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐
- · 在 ALIENTEK 阿波罗STM32F429开发板上使用 openvela 运行LVGL示例(一)
- · 还在手打Prompt?这份2025最新AI绘画关键词+教程+报告资料包直接拿走
- · Android Studio 几个开发要点(Java)
1.1w
1
0
- 0
扫一扫分享内容
分享
顶部

所有评论(0)