ALSA 错误:通道计数 (2) 不可用于播放:参数无效

ALSA 错误:通道计数 (2) 不可用于播放:参数无效

尝试通过 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,但只有在必要时才这样做。

相关内容