2011-08-09 2 views
5

두 가지 다른 PCM 샘플 스트림이 있습니다. 어떻게 든 그것들을 섞어서 동일한 출력 장치에서 ALSA로 재생할 수 있습니까?ALSA를 사용하여 여러 PCM 스트림을 혼합하는 방법

필자는 믹서를 사용하여 읽을 수도 있지만 설명서가 없으므로 이해하기 어렵습니다. 아무도 구현할 수있는 방법에 대한 어떤 종류의 정보도 제공해 줄 수 있습니까?

감사합니다.

답변

3

그 때문에 .asoundrc 파일 시스템이 있는지 확인하십시오. 해당 폴더가 없으면 폴더를 만들고/home 폴더에 저장할 수 있습니다. 이러한 설정으로 업데이트 :

pcm.!default { 
       type plug 
       slave.pcm "dmixer" 
} 
pcm.dmixer { 
      type dmix 
     ipc_key 1024 
     slave { 
      pcm "hw:1,0" 
      period_time 0 
       period_size 1024 
      buffer_size 4096 
      rate 44100 
     } 
     bindings { 
      0 0 
      1 1 
     } 
} 
ctl.dmixer { 
     type hw 
     card 0 
} 

사용 $aplay -l는 시스템에있는 장치의 목록을 얻을 수 있습니다. hw : X, Y는 하드웨어 맵핑에서 나옵니다. 여기서 X는 카드 번호이고 Y는 장치 번호입니다.

지금, 터미널을 열고 함께 첫 번째 PCM 스트림을 재생 : $aplay -f cd pcm_sound1.wav 그리고 다른 탭에서 두 번째 PCM 스트림을 재생 : $aplay -f cd -D default pcm_sound2.wav

그것은 당신이 개 PCM 데이터 스트림을 혼합합니다.

건배,

+0

이 답변은 매우 유용하지만 조금 혼란스럽고 자세한 설명을 부탁드립니다. 두 번째'aplay' 명령이'-D default'를 갖는 이유는 무엇입니까? 'bindings' 섹션의 의미는 무엇이며'ctl.dmixer '는 무엇입니까? 두 개 이상의 스트림을 혼합 할 수 있습니까? 예 : 3 개의'aplay' 명령을 동시에 실행한다면? ''plug '타입의 "default"장치가'dmixer'를 가리키는 이유는'pcm.dmixer'의 이름을'pcm.! default'로 바꾸고 간접 참조를 피할 수 있을까요? – Metamorphic

1

별도의 답변이 필요한지 확실하지 않습니다. HSC의 답변과 예제를 "ALSA Wiki - The Dmix Howto"에 사용했습니다. Dmix 문서는 실제로 실망 스럽습니다.

다음은 나를 위해 작동하는 ~/.asoundrc의 예입니다. "bindings"섹션은 불필요하지만 HOWTO는 "멀티 채널 칩이 더 빨리 작동한다"(도움이 될지 모르겠다.) 도움이된다고 말한다. "0 1 1 0"을 바인드하면 오른쪽/왼쪽 채널이 전환됩니다. "0 1 1 1"을 바인딩하면 오른쪽 귀에 쓰레기가 생깁니다 ... 분명히 ipc_key은 필수 매개 변수입니다. 방금 임의의 정수를 선택했습니다.

# example 1 
pcm.hw3mix { 
    type dmix 
    ipc_key 1939 # must be unique 
    slave { 
     pcm "hw:3" 
     period_time 0 
     period_size 1024 # must be power of 2 
     buffer_size 4096 
     rate 44100 
    } 
    bindings { 
     0 0 
     1 1 
    } 
} 

pcm.!default hw3mix 

마지막 줄에 내 새로운 hw3mix이 기본 장치가됩니다.

나는 위를 단순화 :

# example 2 
pcm.hw3mix { 
    type dmix 
    ipc_key 1939 # must be unique 
    slave { pcm "hw:3" } 
} 

pcm.!default hw3mix 

잘 작동하는 것 같다.

위의 ALSA 위키 링크를 제안, 나는 더로 단순화 할 수 있습니다 :

# example 3 
pcm.dsp0 { 
    type plug 
    slave.pcm "dmix" 
} 

pcm.!default dsp0 

과이에 더 단순화 될 수 있습니다 심지어

# example 4 
pcm.!default { 
    type plug 
    slave.pcm "dmix" 
} 

나 :

# example 5 
pcm.!default plug:dmix 

그러나 마지막 세 예제를 통해 Dmix 플러그인에 대한 매개 변수를 지정할 수 없습니다. 여러 개의 스트림을 "hw : 3"으로 믹스하는 장치를 만들고 싶었습니다. Dmix에 대한 매개 변수로 지정되어야한다고 생각합니다. 기본 장치가 아니기 때문에 위의 두 번째 예제를 사용했습니다.내 실제 ~/.asoundrc에는 "hw0mix"라는 "hw : 0,0"블록이 있으므로 다음 줄의 주석을 변경하여 헤드폰과 스피커 사이에서 (새로 만든) 스트림의 출력을 전환 할 수 있습니다.

#pcm.!default hw0mix 
pcm.!default hw3mix 

주의 : 및 "HW : 3": 위의 "0,0 HW"와 같은 장치를 말한다 ... 내 다양한 ​​USB 사운드 안정 장치 번호를 확인하는 방법을 찾을 조금 힘들었다 장치에서 "동일한 유형의 여러 카드 주문"에서 지침 here을 발견했습니다. 구성은 파일의 한 줄로 이루어져 /etc/modprobe.d/입니다. 이것이 다시 부팅 할 때 동일한 장치를 참조하는 0과 3 같은 숫자를 얻는 방법입니다.

관련 문제