b0wie
Anmeldungsdatum: 28. Mai 2022
Beiträge: Zähle...
|
Liebe Linux Freunde, ich stehe nun das erste mal vor ein kleines Problem. Ich möchte gerne über eine Bestimmte Soundkarte prüfen, ob eine Audioausgabe stattfindet und falls ja, soll das Skript ein RTS Pin (USB) schalten. Habe hier etwas ähnliches, was aber nicht funktioniert. Kurze Anmerkung noch zu meinem Scripting Kenntnissen: Totaler Neuling. Hier nun ein Beispielskript: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | #!/bin/bash
# audio device
device=/dev/audio-line-in
# below this threshold audio will not be recorded.
noise_threshold=10
# run indefenitly, until Ctrl-C is pressed
while true; do
# noise_level() represents a function to determine
# the noise level from device
if noise_level( $device ) > $noise_threshold; then
# Befehl ausführen, RTS Pin schalten
fi;
done;
|
Kann einer Helfen?
Moderiert von sebix: Thema in einen passenden Forenbereich verschoben. Bitte beachte die als wichtig markierten Themen („Welche Themen gehören hier her und welche nicht?“) in jedem Forenbereich. Danke.
|
Marantkurz
Anmeldungsdatum: 7. September 2023
Beiträge: 941
|
Moin!, ernsthaft?, Du willst dabei
noise_level
prüfen? Ob, und Wohin eine Audioausgabe stattfindet kannst Du bspw. mit pactl list sinks short sehen. (RUNNING). Soll es nicht per Soundserver sein geht das auch anders.
|
b0wie
(Themenstarter)
Anmeldungsdatum: 28. Mai 2022
Beiträge: 12
|
Guten morgen, nein das war nicht mein ernst. Das ist ein Beispielskript. Ich möchte nichts abfangen, sondern nur prüfen, ob ein Sound aus den Lautsprechern gesendet wird. Ich habe eine Anwendung die eine Sprachkommuniktion zulassen. Sobald dort gesprochen wird, möchte ich lediglich einen RTS oder alternativ ein DTR Pin schalten.
|
Marantkurz
Anmeldungsdatum: 7. September 2023
Beiträge: 941
|
Ich möchte nichts abfangen,
?? Läuft ein Soundserver? ps -C pipewire
ps -C pulseaudio Sobald dort gesprochen wird, möchte ich lediglich einen RTS oder alternativ ein DTR Pin schalten.
Wie willst Du das schalten? Im Terminal das per Hand auszulösen probiert? Geht es um einen Raspi?
|
b0wie
(Themenstarter)
Anmeldungsdatum: 28. Mai 2022
Beiträge: 12
|
Marantkurz schrieb: Ich möchte nichts abfangen,
?? Läuft ein Soundserver? ps -C pipewire
ps -C pulseaudio Sobald dort gesprochen wird, möchte ich lediglich einen RTS oder alternativ ein DTR Pin schalten.
Wie willst Du das schalten? Im Terminal das per Hand auszulösen probiert? Geht es um einen Raspi?
Ob ein Soundserver läuft weiß ich ehrlich gesagt nicht. So weiter hinter bin ich noch nie gestiegen. Ich erhalte folgende Ausgabe: ps -C pipewire
--------------
PID TTY TIME CMD
1945 ? 00:28:15 pipewire
1946 ? 00:00:00 pipewire
ps -C pulseaudio
PID TTY TIME CMD Wie ich den RTS Pin bei Bash oder über die Konsole schalte weiß ich ehrlich gesagt auch noch nicht. Ich habe das bisher immer mit einem Python Skript erledigt:
| import serial
import time
# COM Port
com_a = '/dev/ttyUSB1'
serial_a = serial.Serial(str(com_a), baudrate = 38400, timeout = 3.0)
serial_a.setDTR(1)
serial_a.setRTS(1)
|
Nein, ich nutze dafür keinen Raspi. Nutze einen normalen ausgesonderten "TinyPC" von meiner Firma.
|
Marantkurz
Anmeldungsdatum: 7. September 2023
Beiträge: 941
|
OK, das Python Script kannst Du auch jetzt nutzen. Vorerst zeige mal wenn Ausgabe auf der betreffenden Soundkarte erfolgt: pactl list sinks short
|
b0wie
(Themenstarter)
Anmeldungsdatum: 28. Mai 2022
Beiträge: 12
|
Das Schalten des RTS/DTR Pins funktioniert üebr Pyhton hervorragend, allerdings etwas träge. Wenn ein Sound die Lautsprecher verlässt, dann erhalte ich folgende Ausgabe: | 49 alsa_output.pci-0000_00_09.2.analog-stereo PipeWire s32le 2ch 48000Hz SUSPENDED
52 alsa_output.usb-BurrBrown_from_Texas_Instruments_USB_AUDIO_CODEC-00.analog-stereo PipeWire s16le 2ch 48000Hz RUNNING
1372 alsa_output.pci-0000_00_01.1.hdmi-stereo-extra1 PipeWire s32le 2ch 48000Hz SUSPENDED
|
Die selbe Ausgabe erhalte ich, auch wenn kein Sound über die Lautsprecher geht. Die Sound Ein- und Ausgabe funktioniert jedoch einwandfrei.
|
Marantkurz
Anmeldungsdatum: 7. September 2023
Beiträge: 941
|
Die selbe Ausgabe erhalte ich, auch wenn kein Sound über die Lautsprecher geht.
Nö, nicht ganz, Status "RUNNING" bei der "usb-BurrBrown_from_Texas_Instruments_USB_AUDIO_CODEC-00.analog-stereo" sollte sich ändern. Teste mal.
|
b0wie
(Themenstarter)
Anmeldungsdatum: 28. Mai 2022
Beiträge: 12
|
Nein leider nicht. Ob mit oder ohne Sound: Status "Running" steht nach wie vor da.
|
Marantkurz
Anmeldungsdatum: 7. September 2023
Beiträge: 941
|
Die betreffende Anwendung wird das offenhalten. Weniger gut. Zeige mal während LS Ausgabe und ohne LS Ausgabe:(warte mal ca. 5s wenn keine Ausgabe mehr da war) pactl list sink-inputs
|
b0wie
(Themenstarter)
Anmeldungsdatum: 28. Mai 2022
Beiträge: 12
|
Marantkurz schrieb: Die betreffende Anwendung wird das offenhalten. Weniger gut. Zeige mal während LS Ausgabe und ohne LS Ausgabe:(warte mal ca. 5s wenn keine Ausgabe mehr da war) pactl list sink-inputs
Ohne LS Ausgabe:
https://pastebin.com/MFz0RMnL Mit LS Ausgabe:
https://pastebin.com/eMUgyKtq
|
Marantkurz
Anmeldungsdatum: 7. September 2023
Beiträge: 941
|
OK, das sieht so aus als wäre eine Messung des Pegels notwendig. Muss ich aber auch erst etwas recherchieren. Falls Jmd. weitermachen will, mglw lässt sich Hieraus was machen: https://stackoverflow.com/questions/5046975/how-to-read-out-volume-level-of-clients-of-pulseaudio-in-the-console oder per arecord, etc. – Was ist eigentlich das Folgende? Abtastwert-Angabe: u8 1ch 1Hz, application.name = "PipeWire ALSA [sox]" Ziel-Eingabe #1166
Treiber: PipeWire
Besitzer-Modul: k. A.
Client: 1165
Ziel: 1475
Abtastwert-Angabe: u8 1ch 1Hz
Kanalzuordnung: mono
Format: pcm, format.sample_format = "\"u8\"" format.rate = "1" format.channels = "1" format.channel_map = "\"mono\""
Unterbrochen: nein
Stumm: nein
Lautstärke: mono: 65536 / 100% / 0,00 dB
Verteilung 0,00
Pufferlatenz: 0 usec
Ziel-Latenz: 0 usec
Resample-Methode: PipeWire
Eigenschaften:
application.name = "PipeWire ALSA [sox]"
node.name = "alsa_playback.sox"
device.description = "ALSA Playback [sox]"
media.name = "ALSA Playback"
media.type = "Audio"
media.category = "Playback"
node.latency = "536/1"
node.rate = "1/1"
stream.is-live = "true"
node.want-driver = "true"
node.autoconnect = "true"
media.class = "Stream/Output/Audio"
adapt.follower.spa-node = ""
object.register = "false"
factory.id = "8"
clock.quantum-limit = "8192"
factory.mode = "split"
audio.adapt.follower = ""
library.name = "audioconvert/libspa-audioconvert"
client.id = "188"
object.id = "189"
object.serial = "1166"
module-stream-restore.id = "sink-input-by-application-name:PipeWire ALSA [sox]"
|
b0wie
(Themenstarter)
Anmeldungsdatum: 28. Mai 2022
Beiträge: 12
|
Guten Morgen, habe etwas probiert und schaffe es nicht zu prüfen ob dein Sound aus der Karte kommt, oder eben nicht. Hab es auch so probiert, nur keine Chance.
| if grep -q RUNNING /proc/asound/card1/pcm0p/sub0/status 2>&1; then
echo "Playing"
else
echo "Idle"
fi
|
Hat jemand noch eine Möglichkeit zu prüfen, ob ein Sound wiedergegeben wird?
|
Marantkurz
Anmeldungsdatum: 7. September 2023
Beiträge: 941
|
Moin, cat /proc/asound/card1/pcm0p/sub0/status wird tatsächlich zwischendurch auf "closed" geschalten? Hatte Gestern das (mit sox) gefunden: sox -q -t alsa pipewire -d -n stats trim 0 0.1 Zeigt Level. Wie?
Die 0.1 auf > 5 setzen, laufen lassen, dann "pavucontrol -t 2", dort Monitor der Karte wählen, dann die 5 wieder runter setzen. edit Periodische Abfrage: watch -n0.3 cat /proc/asound/card1/pcm0p/sub0/status
|
Marantkurz
Anmeldungsdatum: 7. September 2023
Beiträge: 941
|
Also, wenn Du ca. 0.5-1s Verzögerung(da wäre py bestimmt schon mit drin) verkraften kannst könnte man das über die (welche auch immer) Aufnahmeauswertung machen. – Korrektur: sox -q -t alsa -d -n stats trim 0 0.1 Der nimmt wenn Pipewire default Gerät ist automatisch "pipewire". Zu sehen Hier: arecord -L
|