ALSAエラー:チャンネル数(2)を再生できません。パラメータが無効です。

ALSAエラー:チャンネル数(2)を再生できません。パラメータが無効です。

ALSA経由でUSBマイクを使用して録音しようとすると、次のエラーが発生します。Channel count (2) not available for playback: Invalid argument

私の最初の考えは、ALSAがマイクを見つけることができなかったということでしたが、私が知っているとかなりうまくいきました。次に考えたのは、ALSAがステレオで録音したいと思っていて、私のマイクはモノラルでしか働いていないからです。この場合、ALSAをモノラルで実行するようにどのように変更しますか?それとも私が完全に間違った道を行っているのでしょうか?

編集する:

ジャックマイクをUSBドングルに接続してからRPiに接続したことに注意してください。 USBドングルにはマイク入力とヘッドフォン入力の両方がありますが、使用しません。使用しているサウンドカードにスピーカーがないため、エラーが発生しているかどうか疑問に思います。しかし、ヘッドフォンをUSBドングルに接続しても問題は解決しません。

編集2:私は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:...ここに内容を書き込むことができ、何も変更されません。 「を使用するようになっています。~/.asoundrchw:...~/.asoundrc

最初のステップは正しいデバイスを識別することです。実行すると、arecord -l次の内容が表示されます。

card X: NAME_OF_CARD, device Y: NAME_OF_DEVICE
  ...

上記のパラメータの値をに変更しますplughw:X,Y。たとえばplughw:1,0、それを削除して、他の考えられる~/.asoundrcエラーの原因を取り除き、やり直してください。plughw:...掲示するplug 入れる特定のハードウェアデバイスの直前にスレーブデバイスとして使用されます。

それでも機能しない場合は、2つの理由がある可能性があり、受信したエラーメッセージから可能なヒントを得ることができます。

(1)Mathworksブロックは、プラグインではなくハードウェアデバイスでのみ直接機能し、チャンネル数を変更できないように書かれています(文書に記載されていない追加のパラメータがある可能性があります)。 。この場合、できることはありません。試してみることができますオーディオファイルリーダー反対側の名前付きパイプにありますが、arecordそれが多くの役に立つかどうかはわかりません。これは一時的な方法の解決策です。

(2)plughwプラグインはIIRCチャンネルを自動的に切り替えるようになっていますが、そうでない場合があります。その後、プラグインを明示的に作成する必要があります~/.asoundrcが、必要な場合にのみ可能です。

関連情報