[ROZW po części] Routing dźwięku z karty na kartę

Gdy jakieś urządzenie nie chce w Slackware działać...

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
SaraniS
Użytkownik
Posty: 176
Rejestracja: 2005-08-10, 08:22
Lokalizacja: Olesno Slaskie
Kontakt:

[ROZW po części] Routing dźwięku z karty na kartę

Post autor: SaraniS »

Witam
Szukam rozwiązania już od jakiegoś tygodnia i im więcej czytam, tym mniej wiem...
Mam laptopa, z HD Audio (obsługiwane przez Alsę bez problemu).
Mam kartę TV na USB, a w niej - "kartę dźwiękową" USB Audio (też bez problemu obsługiwana przez Alsę).
Niestety, w żadnym programie do oglądania TV (poza MPlayerem z odpowiednimi ustawieniami, ale o tym później) nie słychać dźwięku :( Jest to zrozumiałe dla mnie, albo programy szukają dźwięku na Line In głównej karty, albo, jeśli nawet pobierają go z prawidłowej, to zapewne tam też próbują go wypuścić.
Wyjątkiem jest, jak wspomniałem, MPlayer, któremu można wskazać, żeby pobierał dźwięk z hw:1.0 a odtwarza go i tak na głównej, ale nie jest to najbardziej intuicyjny program do oglądania TV. Poza tym mam w nim co jakąś minutę przez 5 sekund zniekształcenia dźwięku (brzmi jak robot). Sam MPlayer w konsoli milczy na ten temat.
Na obecną chwilę obejściem jest dla mnie skrypt

Kod: Zaznacz cały

arecord -fS16_LE -r48000 -c2 -Dhw:1 | aplay -fS16_LE -r48000 -c2 -D dmixer &
/usr/bin/tvtime
killall arecord
ale wprowadza słyszalne opóźnienie dźwięku w stosunku do obrazu, w dodatku rosnące z czasem odtwarzania. W konsoli krzyczy

Kod: Zaznacz cały

underrun!!! (at least X,XXX ms long) # gdzie X,XXX rośnie odpowiednio do opóźnienia
Jak to wyeliminować?
Stąd moje 2 pytania
:arrow: jak skonfigurować .asoundrc do takiego przekierowania dźwięku (sądzę, że routing na tym poziomie wniesie mniejsze opóźnienie, niż na poziomie arecord/ aplay)?
:arrow: a może da się "poinstruować" TVTime, podobnie jak MPlayera, że ma pobierać dźwięk z hw:1.0 a oddawać go na pcm.!default?

Aha, dodam, bo może to istotne - ALSA w jądrze, bez OSS compatibility; jądro 2.6.30.3 (obecnie).
Aha, i raczej wolałbym to uzyskać w "czystej" Alsie, bez wszelkich Artsów, Jacków i innych ;)
Pozdrawiam
Ostatnio zmieniony 2009-08-10, 15:01 przez SaraniS, łącznie zmieniany 3 razy.
Toshiba Satellite L40-14B: Cel530 1.73GHz/ 2GiB RAM/ 320GiB HDD Slackware 14.0 Linux 3.2.29, KDE 4.8.5, Opera 12, Skype 4.2, XMMS/ amarok/ MPlayer
RLU #398894
Awatar użytkownika
Hannibal
Moderator w st. spocz.
Posty: 1644
Rejestracja: 2004-06-08, 16:03
Lokalizacja: Łódź

Re: [ROZW po części] Routing dźwięku z karty na kartę

Post autor: Hannibal »

Ja używam takiego skrypciku do uruchomiania tvtime'a:

Kod: Zaznacz cały

#!/bin/sh
modprobe saa7134_alsa
(sleep 8; sox -r 32000 -t alsa hw:1,0 -t alsa hw:0,0) &
tvtime --mixer=/dev/mixer:pcm
wait tvtime
killall -9 sox;
Na wiekowej Toshibie M1 działa mi to bez żadnych opóźnień.
[size=75]Hannibal@current@2.6.X[/size]
Awatar użytkownika
SaraniS
Użytkownik
Posty: 176
Rejestracja: 2005-08-10, 08:22
Lokalizacja: Olesno Slaskie
Kontakt:

Re: [ROZW po części] Routing dźwięku z karty na kartę

Post autor: SaraniS »

Ja zanim zacząłem używać arecord | aplay, też używałem sox-a. Jednak w jego przypadku też mam dźwięk opóźniony za obrazem :( Tyle tylko, że w odróżnieniu od arecord | aplay, ten nic nie wywala na konsolę.
Co do parametru --mixer w tvtime, to nie bardzo wiem, czy odnosi się on do wejścia w programie, czy do wyjścia - tak czy inaczej, niezależnie jakie urządzenie mu podam, dźwięku w nim i tak nie ma (w przypadku uruchomienia bez arecord czy sox). Właśnie najbardziej podobałaby mi się opcja jak w MPlayerze, gdzie mogę podać żeby czytał dane z dowolnego (oczywiście sensownego) urządzenia wejścia. Ale tvtime raczej tego nie oferuje. Pozostaje więc przekierowanie na poziomie Alsy, o tyle lepsze, że działa globalnie na wszystkie programy.
Ogólnie to chodzi mi o taki efekt, żeby hw:1.0 (czyli Capture tej karty) było przez programy widoczne jako hw:0.X
Toshiba Satellite L40-14B: Cel530 1.73GHz/ 2GiB RAM/ 320GiB HDD Slackware 14.0 Linux 3.2.29, KDE 4.8.5, Opera 12, Skype 4.2, XMMS/ amarok/ MPlayer
RLU #398894
Awatar użytkownika
Hannibal
Moderator w st. spocz.
Posty: 1644
Rejestracja: 2004-06-08, 16:03
Lokalizacja: Łódź

Re: [ROZW po części] Routing dźwięku z karty na kartę

Post autor: Hannibal »

Powinieneś wybadać w jakim momencie występuje opóźnienie. Niestety nie mam pomysłu jak to zrobić. Być może programiki się nie wyrabiają, może bufory alsy masz za małe/za duże, może magistrala PCI się nie wyrabia. I spróbuj próbkowania 32000 tak jak u mnie - być może karty telewizyjne nie obsługują więcej i sąd może wynikać opóźnienie - z prostych obliczeń wynika że powinno to być 0.5s na każdą 1s.
[size=75]Hannibal@current@2.6.X[/size]
Awatar użytkownika
SaraniS
Użytkownik
Posty: 176
Rejestracja: 2005-08-10, 08:22
Lokalizacja: Olesno Slaskie
Kontakt:

Re: [ROZW po części] Routing dźwięku z karty na kartę

Post autor: SaraniS »

Od próbkowania dźwięk tylko zmienia "pitch", jednak synchro jest OK - mam tak na MPlayerze, gdy go puszczę z domyślnym 44.1kHz podczas gdy dmixer działa mi na 48kHz. Ale owszem, spróbować można.
Zresztą dmixer uruchomiłem dopiero wczoraj, a to opóźnienie miałem od zawsze - dlatego właśnie zacząłem kombinować z czymś innym niż sox ;)
Co do wybadania, jedyne co mi przychodzi do głowy, to uruchomienie całości z maksymalnym verbosity (lub debugiem, jeśli jest). Może coś ciekawego mi wypisze...

===========EDYTA============
Jednak miałeś rację! Tylko, że "w odwrotną stronę" - potrzebowałem ustawić w MPlayer takie próbkowanie, jakie mam w całym systemie (czyli te 48kHz) - i teraz MPlayer jest OK :)

Z problemów z MPlayerem i tą kartą TV jeszcze pozostały mi 3 :P ale to już w innym temacie ;)
Ostatnio zmieniony 2009-08-10, 15:01 przez SaraniS, łącznie zmieniany 3 razy.
Toshiba Satellite L40-14B: Cel530 1.73GHz/ 2GiB RAM/ 320GiB HDD Slackware 14.0 Linux 3.2.29, KDE 4.8.5, Opera 12, Skype 4.2, XMMS/ amarok/ MPlayer
RLU #398894
ODPOWIEDZ