Skocz do zawartości

Pomocna odpowiedź

Ja będę to chciał uruchamiać bez środowiska graficznego lub w ograniczonym środowisku graficznym (w rozdzielczości 1920x1080 ale z widocznym tylko 1920x357 pikseli), więc nie będzie widać całego ekranu. W moim przypadku opcja nasłuchiwania portu serial jest korzystniejsza. 

Przed chwilą, ethanak napisał:

PA w Ubu powinien na dzień dobry przekierować audio na usb jeśli coś podłączyłeś.

Używaj paplay a nie aplay.

I zgadnij, czemu po latach używania Ubuntu wolę czystego Debiana.

Wszystko podłączone jest i dzała na przemysłowym komputerze jednopłytkowym, z automatu ustawione jest wyjście audio wbudowane na płycie.

Czyli nie możesz użyć standardowego PA, bo nie będziesz miał dźwieku bez zalogowania (tak działa PA).

Chyba że masz PA w trybie system, ale to nie jest standard i trzeba pokombinować żeby ruszyło.

Weźcie sobie poczytajcie dokumentację PA.

A na SBC  pewnie działa bo tam masz normalny OS bez PA. Instalowanie Ubuntu w przemysłowym SBC to strzelanie sobie w stopę (pomijając fakt, że to nie jest system dla przemysłu i ktoś, kto na to pozwolił nie powinien mieć mocy decyzyjnej)

1 godzinę temu, ethanak napisał:

A na SBC  pewnie działa bo tam masz normalny OS bez PA. Instalowanie Ubuntu w przemysłowym SBC to strzelanie sobie w stopę (pomijając fakt, że to nie jest system dla przemysłu i ktoś, kto na to pozwolił nie powinien mieć mocy decyzyjnej)

Wolałbym skupić się na rozwiązaniu niż dywagować decyzje na, które nie mam żadnego wpływu, ktoś wybrał Ubuntu i jedyne co mogę zrobić to dostosować się do jego decyzji. SBC to przemysłowy x86 z SECO. Co oznacza skrót PA (żebym mógł poczytać)?

10 godzin temu, pswiton napisał:

Co oznacza skrót PA (żebym mógł poczytać)?

PA to PulseAudio.

A PulseAudio to serwer dźwięku.

A w Ubuntu serwer dźwięku startuje gdy użytkownik zaloguje się do interfejsu graficznego, i tylko programy uruchomione przez tego użytkownika mają prawo grać. Ot, taki wynalazek coby ludziom życie utrudnić 🙂

Oczywiście można uruchomić PA w trybie "system", ale to trochę dłubaniny w konfiguracji.

Można też nie instalować PA (nigdy nie próbowałem przy Ubuntu, podobno się da) i lecieć gołą Alsą, ale to raczej nie po ubuntowemu, a część programów na Ubuntu wymaga pulsa.

Na razie masz takie coś:

#!/usr/bin/env python3
import serial, subprocess, os

filename="serkey.mp3"
fname=os.path.join((os.path.dirname(os.path.abspath(__file__))),filename)

try:
    serport=serial.Serial('/dev/ttyACM0',115200,timeout=0.1)
except:
    serport=serial.Serial('/dev/ttyACM1',115200,timeout=0.1)

while True:
    r=serport.readline()
    if r.strip() == b'#up':
        subprocess.call(['play','-q','-t','mp3',filename])
        while serport.read():
            pass

Potrzebne pakiety:

  • sox
  • libsox-fmt-all
  • python3-serial

Masz tu kod i testowy plik mp3: serkey.tgz

Plik serkey.mp3 musi być w tym samym folderze co serkey.py - możesz sprawdzić czy wszystko jest zainstalowane wchodząc do tego folderu i wydając polecenie

play -t mp3 serkey.mp3

Aha, nie neguję decyzji kogoś kto wybrał taki czy inny system dla SBC. Tyle że do zastosowań przemysłowych Ubuntu jakoś niespecjalnie mi się widzi - do tego jest raczej RH czy CentOS, ew. Debian. Ubuntu to świetne distro na desktop i tylko desktop (piszę to jako admin pewnego serwera na Ubuntu Server) 🙂 

Dobra, męcz się dalej, powodzenia 🙂

 

  • Lubię! 1

Dzięki za powyższe, zrobiłem wszystko zgodnie z instrukcją. polecenie play -t mp3 serkey.mp3 działa, ale po uruchomieniu programu wyrzuca mi poniższe:

patw@patw-Default-string:/home$ sudo ./serkey.py
play WARN alsa: can't encode 0-bit Unknown or not applicable
play WARN alsa: can't encode 0-bit Unknown or not applicable

Czytałeś to co napisałem wcześniej o PulseAudio?

Uruchamiasz program przez sudo, czyli z roota, czyli z innego uzytkownika, a PulseAudio na to nie pozwala.

Musisz odpalić bez sudo.

Jeśli będzie się pruł o brak dostępu do seriala, musisz dopisać się do grupy dialout:

sudo usermod -a -G dialout twojanazwa

(oczywiście zastąp "twojanazwa" nazwą użytkownika) , wyloguj się i zaloguj jeszcze raz.

 

 

  • Lubię! 1
(edytowany)

Ale to jeszcze nie koniec - trzeba jeszcze operować mikserem bo ktoś może wyciszyć dźwięk. Nie było tego bo nie chciałem zaciemniać kodu.

Czyli trzeba doinstalować jeszcze python3-alsaaudio

A nowa wersja programu będzie wyglądać tak:

#!/usr/bin/env python3
import serial, subprocess, os, alsaaudio

volume = 80
filename="serkey.mp3"
fname=os.path.join((os.path.dirname(os.path.abspath(__file__))),filename)

try:
    serport=serial.Serial('/dev/ttyACM0',115200,timeout=0.1)
except:
    serport=serial.Serial('/dev/ttyACM1',115200,timeout=0.1)
M=alsaaudio.Mixer()

while True:
    r=serport.readline()
    if r.strip() == b'#up':
        oldvol = M.getvolume()
        if oldvol[0] < volume or oldvol[1] < volume:
            M.setvolume(volume)
        else:
            oldvol=None
        subprocess.call(['play','-q','-t','mp3',filename])
        if oldvol is not None:
            M.setvolume(oldvol[0],0)
            M.setvolume(oldvol[1],1)
        while serport.read():
            pass
    

Oczywiście do zmiennej volume musisz wpisać minimalną głośność (w procentach) jaką chcesz mieć zamiast tego 80.

Aha, żebyś nie myślał że to wszystko: jesteśmy mniej wiecej w połowie drogi 🙂

Edytowano przez ethanak
  • Lubię! 2

No to druga połowa (przestawienie PA z trybu user na system i stworzenie demona). Ale to jutro, bo dzisiaj zajmuję się degustacją pewnego złotego napoju 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...