1 Ostatnio edytowany przez Pecus (2017-05-05 09:04:08)

Otóż mam taki problem z konfiguracją dźwięku w Malince. Może nie tyle samego dźwięku ile jego routowania.

Jest sobie projekt radia internetowego na RPI z obsługą serwisu Pandora przez aplikację pianobar. Chciałbym jednocześnie streamować dalej to, co pianobar gra. W tym celu stoi sobie serwer icecast2 i darkice do kodowania w locie do mp3.

Jednoczesne streamowanie zrealizowane jest przez stworzenie wirtualnego wyjścia dźwięku, które wystawia ten dźwięk równolegle na domyślne wyjście audio i na standardową "kartę" aloop która jest żródłem danych dla darkice.
Jest to zrobione przy pomocy pliku : /home/pi/.asoundrc

pcm.!default {
  type asym
  playback.pcm "LoopAndReal"
  capture.pcm "looprec"
}

pcm.looprec {
    type hw
    card "Loopback"
    device 1
    subdevice 0
}

pcm.LoopAndReal {
  type plug
  slave.pcm mdev
  route_policy "duplicate"
}

pcm.mdev {
  type multi
  slaves.a.pcm pcm.MixReale
  slaves.a.channels 2
  slaves.b.pcm pcm.MixLoopback
  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
}

pcm.MixReale {
  type dmix
  ipc_key 1024
  slave {
    pcm "hw:0,0"
    rate 44100
    periods 128
    period_time 0
    period_size 1024 # must be power of 2
    buffer_size 8192
  }
}

pcm.MixLoopback {
  type dmix
  ipc_key 1025
  slave {
    pcm "hw:Loopback,0,0"
    rate 44100
    periods 128
    period_time 0
    period_size 1024 # must be power of 2
    buffer_size 8192
  }
}

Plik ten znalazłem w necie, ale już się trochę naumiałem i widzę, że jest w nim co trzeba i jak trzeba.
Definiuje on kartę wirtualną "LoopAndReal" która stanowi połączenie dwóch wyjść Audio: "MixReale" przekierowanego na sprzętową kartę nr 0 i "MixLoopback" przekierowanego na kartę "Loopback" (jest widoczna w liście kart pod numerem 2 ale tu jest po nazwie).
Jednocześnie karta "LoopAndReal" jest ustawiona jako domyślna, choć to mam powielone w pliku: /etc/libao.conf

default_driver=alsa
dev=LoopAndReal
quiet

No i działa to wszystko.... ale pod jednym warunkiem, że jako karta numer 0 występuje moja zewnętrzna karta USB a wewnętrzne audio ma numer 1. Czyli gra prze kartę USB i jednocześnie streamuje/nagrywa - co tylko chcę przez kartę "Loopback" (nr 2).
Jednak jeśli zamienię miejscami kartę USB i wewnętrzne audio. Czyli wewnętrzne audio dostaje numer 0 a karta USB numerek 1, to za chiny nie gra ani nie streamuje, mimo że cała konfiguracja reszty jest identyczna.Może mamy tu kogoś znającego się na konfiguracji alsy ??

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

2

Jeśli nie przeszkadzają Ci projekty niejakiego Lennarta Poetteringa, do takich zabaw z wieloma wirtualnymi wyjściami audio i pchaniem dźwięku po sieci (w sumie dałoby radę też zastąpić IceCasta), polecałbym serwer dźwięku PulseAudio, który "zastępuje" ALSA w warstwie konfiguracyjnej, a przy tym jest nieco prostszyt w konfiguracji do tak zaawansowanych zadań.

.: miejsce na twoją reklamę :.

3

Z racji, że to bałagan i nie ma offtopica - więc powiem że dowcip z avatarem jest wyborny :D

Kontakt: pin@usdk.pl

4

Wiesz. Chodzi jednak o to, by nic (jak najmniej) dodatkowo nie instalować. Wszystko chodzi mi na karcie USB (jakiejś przypadkowej) a na wbudowanej nie chce. Chciałbym zapewnić uniwersalność rozwiązania, więc obsługa standardowego wyjścia audio jest potrzebna (choć sam nie używam) co więcej wiem że takie multiplikowanie wyjść audio działać musi na wbudowanej karcie, więc gdzieś mam jakiś (myślę że drobny) błąd. Za dużo już jest innego kodu obsługującego wygodna zmianę konfigu audio przez użytkownika, by to wszystko zmieniać.

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

5

Akurat PulseAudio chyba nawet jest domyślnie w Raspbianie czy jaka jest tam ta domyślna dystrybucja, a nawet jeśli to to nie jest cały program, tylko serwer audio.

Chociaż tak jak teraz myślę, to czy czasem sam SoC w Malinie nie pozwala tylko na jedno "fizyczne" wyjście audio i nie odłącza sprzętowo wewnętrznego audio w przypadku przekierowania strumienia audio na zewnętrzną kartę? Może się wydawać niemożliwe, ale nie takie hacki już widziano.

.: miejsce na twoją reklamę :.

6 Ostatnio edytowany przez Pecus (2017-05-04 21:33:46)

W takiej sytuacji powinno zadziałać po wypięciu karty USB (i takie zachowanie mogłoby pozostać i byłbym zadowolony), a skubane tez nie działa.

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

7

No to pozostaje mi nic innego…
http://vignette1.wikia.nocookie.net/nonsensopedia/images/7/73/Za%C5%82amany_Sznuk.jpg

.: miejsce na twoją reklamę :.

8

Dzięki pomocy forumowiczów, którzy po prostu zmusili mnie do poszukania głębiej i pomyślenia bardziej - działa :)

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.