我有一个应用程序,可将 PCM 数据的语音数据包从一个节点发送到另一个节点。该程序还会在启动时播放 wav 文件。可以听到 wav 文件,但听不到我的音频。我在 asound.conf 文件中添加了以下内容:
pcm.playmix {
type softvol
slave {
pcm "hw:0,0"
}
control.name "SpeakerVolume"
control.card 0
}
pcm.writeFile {
type file
slave {
pcm playmix # Now write to the actual sound card
}
file "/tmp/output.raw"
format "raw"
}
pcm.dsp0 {
type plug
slave.pcm "writeFile"
}
我使用 Audacity 查看 output.raw 文件,发现启动 wav 文件和来自 LAN 的 PCM 音频均存在。但是,我没有在接收计算机的扬声器上听到任何音频,即 LAN 流量。我目前不知道下一步该怎么做。在将数据传输到内核以在设备上播放时,output.raw 文件是否会被保存?如果我使用 aplay,那么我选择的任何 wav 文件都会播放。我唯一缺少的音频是来自 LAN 另一端的 PCM。
如有任何建议,我们将不胜感激。
答案1
事实证明,为 EMB-2610 的放大扬声器端口创建硬件的人只连接了左声道。我预先录制的 wav 文件是立体声的,所以我听到了一些声音。我创建了以下 ALSA 配置以将两个通道连接在一起。
pcm.mixed {
type dmix
ipc_key 9752933 #must be unique for all dsnoop plugins
ipc_key_add_uid yes
slave.pcm "hw:1" # or whatever
}
pcm.channel1 {
type route
slave {
pcm mixed
channels 2
}
ttable [ [ 1 0 ] ]
}
pcm.channel2 {
type route
slave {
pcm mixed
channels 2
}
ttable [ [ 0 1 ] ]
}
pcm.channel1_softvol {
type softvol
slave.pcm channel1
control.name "Channel 1 Capture Volume"
}
pcm.channel2_softvol {
type softvol
slave.pcm channel2
control.name "Channel 2 Capture Volume"
}
pcm.mixed_with_volumes {
type multi
slaves {
a { pcm channel1_softvol channels 1 }
b { pcm channel2_softvol channels 1 }
}
bindings [
{ slave a channel 0 }
{ slave b channel 0 }
]
}
pcm.dsp0 {
type plug
slave.pcm mixed_with_volumes
ttable [ [ 1.0 1.0 ] ]
}
我使用谷歌搜索找到了这个,有人试图将输入连接到一个流。 ipc_key 只需要是一个唯一的数字。