Nagrywaj wejście liniowe z dwóch aplikacji za pomocą Alsa

1

Obecnie pracuję nad małą aplikacją, która działa na Cubieboard (ARMv7, podobny do rasp-pi).

To, co naprawdę muszę zrobić, to dostęp i rejestracja liniowego sygnału audio z dwóch różnych aplikacji.

Pierwszy to PyAudio, a drugi to Darkice Media Streamer . Karta dźwiękowa używa sterownika jądra sun4i-CODEC od twórców Cubieboard. Warstwa audio jest obecnie dostarczana przez ALSA Audio .

Obecnie obie aplikacje rejestrują od hw: 0,0 i intefere. Więc jeśli uruchomię klienta Darkice, mój skrypt Python nie ma dostępu i vice verca.

Ouput z mojego arecord -L:

null
Discard all samples (playback) or generate zero samples (capture)
default
sysdefault:CARD=sun4icodec
    sun4i-CODEC, sun4i PCM
    Default Audio Device
dmix:CARD=sun4icodec,DEV=0
    sun4i-CODEC, sun4i PCM
    Direct sample mixing device
dsnoop:CARD=sun4icodec,DEV=0
    sun4i-CODEC, sun4i PCM
    Direct sample snooping device
hw:CARD=sun4icodec,DEV=0
    sun4i-CODEC, sun4i PCM
    Direct hardware device without any conversions
plughw:CARD=sun4icodec,DEV=0
    sun4i-CODEC, sun4i PCM
    Hardware device with all software conversions

To jest mój wynik amixer:

imple mixer control 'Master',0
  Capabilities: pvolume pvolume-joined penum
  Playback channels: Mono
  Limits: Playback 0 - 63
  Mono: Playback 63 [100%]
Simple mixer control 'LineL',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'LineR',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Mic Input Mux',0
  Capabilities: volume volume-joined penum
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 15
  Mono: 15 [100%]
Simple mixer control 'MicL',0
  Capabilities: volume volume-joined penum
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 3
  Mono: 1 [33%]
Simple mixer control 'MicR',0
  Capabilities: volume volume-joined penum
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 3
  Mono: 3 [100%]
Simple mixer control 'Playback',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Capture',0
  Capabilities: cvolume cvolume-joined penum
  Capture channels: Mono
  Limits: Capture 0 - 7
  Mono: Capture 7 [100%]
Simple mixer control 'ADC Input Mux',0
  Capabilities: volume volume-joined penum
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 7
  Mono: 7 [100%]
Simple mixer control 'Fm',0
  Capabilities: volume volume-joined penum
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 7
  Mono: 7 [100%]
Simple mixer control 'FmL',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'FmR',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Ldac Left Mixer',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Ldac Right Mixer',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Rdac Right Mixer',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [off]

Więc jakie jest najlepsze rozwiązanie tego problemu? Dzielisz wejście stereo na dwa różne dekory? Używać innej warstwy audio? Nie wiem!

Z góry dziękuję,

~ MxAgent

Micronax
źródło
Spróbuj dsnoopzamiast hw.
CL.
Daje mi to IOError: [Errno Input overflowed] -9981błąd podczas uruchamiania PyAudio ..
Micronax
Czy działa z dwiema arecordinstancjami lub innymi programami?
CL.
Czy to możliwe, że jest to spowodowane problemami z wydajnością tego małego procesora ARM?
Micronax,
To może być możliwe. Ile obciążenia procesora masz podczas nagrywania?
CL.