尝试通过 ALSA 使用 USB 麦克风录音时出现以下错误:Channel count (2) not available for playback: Invalid argument
我最初的想法是 ALSA 无法找到麦克风,但事实证明它发现得很好。我的下一个想法是,这可能是因为 ALSA 想要以立体声录制,而我的麦克风只能作为单声道使用。如果是这种情况,我该如何更改 ALSA 以运行单声道?或者我完全走错了路?
编辑:
应该注意的是,我将插孔麦克风插入 USB 转换器,然后插入 RPi。 USB 转换器都有麦克风输入和耳机输入,但我不使用。我想知道是否出现错误,因为我使用的声卡上没有扬声器;然而,即使将耳机插入 USB 转换器,问题仍然存在。
Edit2:我正在我的Raspberry Pi上运行Simulink模型,需要实时记录。如果我通过笔记本电脑模拟到树莓派,它可以正常工作,没有任何错误。当我尝试在 Raspberry Pi 上运行该模型时,问题就出现了,然后出现了错误。
Edit3:使用命令进行检查amixer
,并得到以下结果:
Simple mixer control 'Headphone',0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 62
Mono:
Front Left: Playback 42 [68%] [-20.00dB] [on]
Front Right: Playback 42 [68%] [-20.00dB] [on]
Simple mixer control 'Mic',0
Capabilities: pvolume pvolume-joined cvolume cvolume-joined pswitch pswitch-joined cswitch cswitch-joined
Playback channels: Mono
Capture channels: Mono
Limits: Playback 0 - 43 Capture 0 - 63
Mono: Playback 40 [93%] [26.00dB] [on] Capture 60 [95%] [46.00dB] [on]
我认为问题以某种方式依赖于麦克风的播放。也许你们中的一些人可以帮我解决这个问题。
我的.asoundrc:
defaults.ctl.card 1
defaults.pcm.card 1
defaults.pcm.device 0
编辑.asoundrc:
pcm.!default {
type hw
card 1
slave {
pcm "hw:1,0"
channels 1
}
}
ctl.!default {
type hw
card 1
channels 1
}
模型编辑:当模型仅包含以下块时,问题仍然出现: https://se.mathworks.com/help/supportpkg/raspberrypi/ref/alsaaudiocapture.html
答案1
是的,因为如果您直接从硬件设备录制,则只能以硬件直接支持的格式、通道数、比特率等进行录制。所以当你做类似的事情时
arecord -D hw:0,0 out.wav
你会遇到这个问题;您需要添加正确的参数,如下所示
arecord -D hw:0,0 -c 1 -f S16_BE -f44100 out.wav
(当然是您设备的参数,而不是这些),或者您可以使用 ALSA 自动为每个设备提供的转换插件,如下所示
arecord -D plughw:0,0 ... out.wav
然后它将转换为您指定的任何格式。
这同样适用于尝试通过 ALSA 进行记录的任何其他应用程序。~/.asoundrc
如果需要,您还可以设置自己的合理默认值。
用于arecord -L
获取可以录制的设备/插件的列表。您可能想要使用自动提供的dsnoop
插件,但您没有告诉我们您需要录音的目的,以及当您尝试录音时到底做了什么。
编辑:
好的,缺少的信息是:
您正在使用一个名为数学工作坊。该程序有一个用于音频捕获的块,其中有一个参数称为设备名称。该参数默认为
hw:1,0
.
只要这个参数设置为任意hw:...
值,你就可以往你的里面写东西,~/.asoundrc
直到你脸色发青,并且不会改变任何东西,因为hw:...
意味着“直接使用硬件,不用介意~/.asoundrc
”中指定的所有其他插件。 。
第一步是识别正确的设备:执行arecord -l
,您会看到类似的内容
card X: NAME_OF_CARD, device Y: NAME_OF_DEVICE
...
现在将上述参数的值更改为plughw:X,Y
,例如plughw:1,0
,删除您的~/.asoundrc
以删除可能的其他错误源,然后重试。plughw:...
将放置一个plug
插入直接在给定硬件设备前面作为从设备。
如果仍然不起作用,有两个可能的原因,您将收到的错误消息将给出可能的提示:
(1)Mathworks块的编写方式只能直接与硬件设备一起工作,不能与插件一起工作,并且它无法更改通道数(也许有一个他们忘记在文档中提及的额外参数) 。在这种情况下,你无能为力。你可以尝试使用音频文件阅读器在另一端的命名管道上arecord
,但我不确定这会起到多大作用,这是一种权宜之计。
(2) 该plughw
插件应该自动转换频道 IIRC,但也许不会。然后您必须在您的 中明确编写一个插件~/.asoundrc
,但只有在必要时才这样做。