複数のサウンドデバイスへのオーディオの同時出力


10

RasPiでオーディオをオンボードのオーディオ出力ポートとデジタル出力カード(I2S Hifiberry Digi)に送信したいのですが。これはALSAで可能であるべきです。ドライバーをロードして、両方のサウンドデバイスに個別に送信できますが、それらを組み合わせても機能しません。これを行う方法を説明する投稿がいくつかありますが、設定を機能させることができません。

aplayからのエラー:

Playing WAVE 'sin1000_48khz.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
ALSA lib pcm_params.c:2162:(snd1_pcm_hw_refine_slave) Slave PCM not usable
aplay: set_params:1059: Broken configuration for this PCM: no configurations available

「aplay -l」の出力

**** List of PLAYBACK Hardware Devices ****
card 0: sndrpihifiberry [snd_rpi_hifiberry_digi], device 0: HifiBerry Digi HiFi wm8804-spdif-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 1: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

「aplay -L」の出力

null
   Discard all samples (playback) or generate zero samples (capture)
sysdefault:CARD=sndrpihifiberry
    snd_rpi_hifiberry_digi,
    Default Audio Device
sysdefault:CARD=ALSA
    bcm2835 ALSA, bcm2835 ALSA
    Default Audio Device`

/etc/asound.confの内容

pcm.both {
    type route
    slave.pcm {
        type multi    
        slaves.a.pcm "hw:0,0"
        slaves.b.pcm "hw:1,0"
        slaves.a.channels 2
        slaves.b.channels 2

        bindings.0.slave a
        bindings.0.channel 0    
        bindings.1.slave a
        bindings.1.channel 1

        bindings.2.slave b
        bindings.2.channel 0
        bindings.3.slave b
        bindings.3.channel 1
    }

    ttable.0.0 1
    ttable.1.1 1

    ttable.0.2 1
    ttable.1.3 1
}

ctl.both {
    type hw
    card sndrpihifiberry
    device 0
}

pcm.hifiberry {
    type hw    
    card sndrpihifiberry
    device 0
}

ctl.hifiberry {
    type hw
    card sndrpihifiberry
    device 0
}

pcm.audioout {
    type hw
    card ALSA
    device 0
}

ctl.audioout {
    type hw
    card ALSA
    device 0
}

pcm.!default {
    type plug
    slave {
        pcm both
    }
}

#pcm.!default {    
#    type hw
#    card sndrpihifiberry
#    device 0
#}

ctl.!default {
    type hw
    card sndrpihifiberry
    device 0
}

PulseAudioを確認する必要があると思います。しかし、私はここでは間違っているかもしれません
Gerben 2014年

3
私はpulseaudioを調べました。私の経験では、基本的にそれは機能しませんでした。
クリスティ2014年

さらなる調査(およびPulseAudioを使用した2回目の試行)の後、問題はこの種の機能がサウンドカードのメモリまたはmmapサポートへの共有アクセスを必要とすることだと思います。RasPi I2Sドライバーはこれをサポートしていません。ALSAとPulseAudioのどちらからも特に有用なデバッグ情報がないため、これを実際に確認することはできません。一般に、複数の音源を使用するまで、すべてが機能します。これがRasPiカーネルで修正されるかどうかはわかりませんが、修正しようとすると、私が投資するよりも時間がかかります。
クリスティ2014年

PulseAudioを動作させることをお勧めします。これは、(ネットワーク上の他のサウンドカードに拡張することも含めて)やりたいことを正確に実行できるためです。
earthmeLon 2014年

上で述べたように、Pulseaudioを動作させました。個々のデバイスで正常に動作し、一度に複数の出力へのストリームを作成しようとすると失敗します。私はRasPi I2Sドライバーのメモリマッピングの欠如が原因であると考えていますが、さらなるデバッグには、本質的にALSAやPulseaudioの内部構造を学習することが含まれます。
クリスティ2014年

回答:


1

それは少しハッキーですが、teeコマンドを検討しましたか?T シャツのリダイレクトに関するStackExchangeの詳細を読んください。他の例については、Wikiの記事をご覧ください。ファイル名またはメディアコンテンツへのリンクを出力するコマンドがありls、それを使用teeして好みのメディアプレーヤーにコマンドを呼び出す場合、私は考えています。問題を回避する方法は次のとおりです...


#!/bin/bash
MediaPlayer="$1"
MediaOptions1="$2"
MediaOptions2="$3"
InputParcer="ls $4"
${InputParcer} | tee >(${MediaPlayer} ${MediaOptions1}) >(${MediaPlayer} ${MediaOptions2}) || echo 'Exiting baddly'

ノート:

上記はハードコーディングして、各出力フォークに対して一定のオプションを設定InputParcerできます。複数のメディアファイルを含むディレクトリまたはWebリンクを送信する場合は、変数を編集する必要があります。しかし、一度に一つのファイルこのはずの両方に出力する場合のMediaOptions1/2のいずれかのハードコーディングされたか、実行ごとに設定されています。それは少しハッキーです、あなたは警告されました。

...テストなどを行った後if [ ${#} < 4]; then echo "error"; fi、上部近くに投げ入れます。4私が感じた議論の数を編集する必要があります。そのまま実行bash scripted_dule_player 'aplay <common_options>' '<options_output1>' '<options_output2>' '</full/file/path/to/mediafile>'すると、システムに合わせて、実行したいオプションとファイルパスを変更することができます。間のもの<>

使用に関する問題teeは、Linuxの種類間での移植性が低く、出力間でオーディオが同期して再生されないという問題が発生する可能性があることです。代わりにomxplayer -o both、2つの別個のデバイスにサウンドを出力するためにを使用することをお勧めしますが、これはHDMI&オーディオ出力がプラグインされているRPiでのみテストされているため、OPで使用される設定ではなく、OPはに何かを要求しましたalsa

また、alsaマルチサウンドカードのマルチユーザー構成についての優れたブログもあります。おそらく、あなたのエラーが原因で、上記のコードが根拠のないポイントになってしまうでしょう。そこにあるガイドは、RaspbianではなくSlaker風味のLinuxに向けられていることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.