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 끼워 넣다특정 하드웨어 장치 바로 앞에 슬레이브 장치로 사용됩니다.

그래도 작동하지 않으면 두 가지 이유가 있을 수 있으며, 수신되는 오류 메시지에서 가능한 힌트를 얻을 수 있습니다.

(1) Mathworks 블록은 플러그인이 아닌 하드웨어 장치에서만 직접 작동하고 채널 수를 변경할 수 없는 방식으로 작성되었습니다(문서에서 언급하지 않은 추가 매개변수가 있을 수 있음). . 이 경우에는 할 수 있는 일이 없습니다. 당신은 사용해 볼 수 있습니다오디오 파일 리더다른 쪽 끝에 있는 명명된 파이프에 있지만 arecord그것이 많은 도움이 될지 확신할 수 없습니다. 이는 임시방편의 솔루션입니다.

(2) plughw플러그인은 IIRC 채널을 자동으로 전환하도록 되어 있지만 그렇지 않을 수도 있습니다. 그런 다음 에 플러그인을 명시적으로 작성해야 ~/.asoundrc하지만 필요한 경우에만 가능합니다.

관련 정보