2011-08-09 22 views
5

PCMサンプルのストリームは2種類あります。どういうわけかそれらを混ぜて、同じ出力デバイスで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 そして、他のタブでは、2番目のPCMストリームを再生する: $aplay -f cd -D default pcm_sound2.wav

それはあなたの2つのPCMデータ・ストリームをミックスします。

乾杯、

+0

この回答は非常に参考になりますが、私はちょっと混乱していて、もっと説明していただければ幸いです。 2番目の 'aplay'コマンドは' -D default'を持っていますが、最初のコマンドはなぜですか? 'bindings'セクションの意味は何ですか?' ctl.dmixer'は何ですか? 2つ以上のストリームを混合することは可能ですか? 3つの 'aplay'コマンドを同時に実行するとどうなりますか?なぜ 'pcm .default'と' pcm.dmixer'の名前を変更して間接を避けることができるのでしょうか? – 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のWikiリンクで示唆したように、私はさらにそれを簡略化することができます。

# 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 

しかし、最後の3つの例では、Dmixプラグインのパラメータを指定できません。私は複数のストリームを "hw:3"にミックスするデバイスを作りたかったのです。私はこれがデフォルトのデバイスではないので、Dmixへのパラメータとしてこれを指定しなければならないと思いますので、上記の2番目の例を参考にしました。私の実際の~/.asoundrcには、 "hw:0,0"というブロックがあり、 "hw0mix"というブロックがあります。次の行のコメントを変更することで、(新しく作成された)ストリームの出力を、

#pcm.!default hw0mix 
pcm.!default hw3mix 

NB:私の様々なUSBサウンドのために安定したデバイス番号を確保する方法を見つけるために少し大変でした...:「3 HW」:上記「0,0 HW」のようなデバイスを指し、デバイスの場合は、「同じタイプの複数のカードを注文する」の指示hereが見つかりました。構成は、ファイル内の1行で構成され、/etc/modprobe.d/になっています。これは再起動後も同じデバイスを参照するために0や3のような数字を得る方法です。

関連する問題