OpenBSD Audio Aufnahme und Wiedergabe konfigurieren

bsdfreak

Well-Known Member
Audio Wiedergabe funktioniert einwandfrei in OpenBSD 7.5. Nun möchte ich endlich auch ein paar Sprachaufnahmen machen. Audio Record ist ja standardmäßig deaktiviert. Um es zu aktivieren habe ich folgenden Befehl benutzt:

Code:
# sysctl kern.audio.record=1
# echo kern.audio.record=1 >> /etc/sysctl.conf

und dann den Rechner neu gestartet. Dann habe ich audacity installiert. In audacity ist das Aufnahme und Wiedergabe Device auf default voreingestellt, und das läßt sich auch nicht ändern. Bevor eine Sprachaufnahme gestartet wird, muß ich in der Konsole
Code:
sndioctl server.device=1
eingeben. Die Sprachaufnahme funktioniert dann mit meinem USB M-Audio Micro sehr gut. Wenn ich es aber in audacity wiedergeben will, bleibt es stumm. Das funktioniert erst, wenn ich dann in der Konsole
Code:
sndioctl server.device=0
eingebe. Aber das ist ja nicht praktikabel. Wie kann ich es konfigurieren, das ich nicht zwischen den Devices switchen muß? Weiß jemand Rat?
 
Audio Wiedergabe funktioniert einwandfrei in OpenBSD 7.5. Nun möchte ich endlich auch ein paar Sprachaufnahmen machen. Audio Record ist ja standardmäßig deaktiviert. Um es zu aktivieren habe ich folgenden Befehl benutzt:

Code:
# sysctl kern.audio.record=1
# echo kern.audio.record=1 >> /etc/sysctl.conf

und dann den Rechner neu gestartet.
Nur am Rande: syctl kern.audio.record=1 ändert das Device zur Laufzeit. Mit dem zweiten Befehl stellst du ein, dass es beim Booten automatisch geändert wird. Du hättest dir also entweder den ersten Befehl sparen können oder hättest nicht rebooten müssen.

Dann habe ich audacity installiert. In audacity ist das Aufnahme und Wiedergabe Device auf default voreingestellt, und das läßt sich auch nicht ändern. Bevor eine Sprachaufnahme gestartet wird, muß ich in der Konsole
Code:
sndioctl server.device=1
eingeben. Die Sprachaufnahme funktioniert dann mit meinem USB M-Audio Micro sehr gut. Wenn ich es aber in audacity wiedergeben will, bleibt es stumm. Das funktioniert erst, wenn ich dann in der Konsole
Code:
sndioctl server.device=0
eingebe. Aber das ist ja nicht praktikabel. Wie kann ich es konfigurieren, das ich nicht zwischen den Devices switchen muß? Weiß jemand Rat?
Sieh dir mal SNDIO(7) (man 7 sndio) an. Dort findest du AUDIORECDEVICE und AUDIOPLAYDEVICE. Genutzt habe ich das aber noch nicht.

HTH dennoch
 
So alles durchgelesen und ausprobiert. Leider ohne Erfolg. Sndio ist zwar einfach konzipiert und höllisch flexibel, aber leider für mich nicht alles nachvollziehbar.

Habe jetzt kurzerhand zwei c Programme (a.c und wi.c) geschrieben und mit clang compiliert:

Code:
#include <stdlib.h>

int main() {
    // Der Befehl, der auf der Konsole ausgeführt werden soll
    const char *command = "sndioctl server.device=1";

    // Den Befehl mit system() ausführen
    int result = system(command);

    // Optional: Überprüfen, ob der Befehl erfolgreich war
    if (result == -1) {
        // Fehler beim Aufrufen des Kommandos
        perror("system");
        return 1;
    }

    return 0;
}

und
Code:
#include <stdlib.h>

int main() {
    // Der Befehl, der auf der Konsole ausgeführt werden soll
    const char *command = "sndioctl server.device=0";

    // Den Befehl mit system() ausführen
    int result = system(command);

    // Optional: Überprüfen, ob der Befehl erfolgreich war
    if (result == -1) {
        // Fehler beim Aufrufen des Kommandos
        perror("system");
        return 1;
    }

    return 0;
}

Dann habe ich die ausführbaren Programme nach /usr/local/bin verschoben. a steht natürlich für Aufnahme, bei Wiedergabe mußte ich wi nehmen, da w bereits einen anderen Befehl ausführt. Keine saubere Lösung, aber so kann ich in jeder Konsole schnell von a (Aufnahme) zu wi (Wiedergabe) wechseln.

Das alles wäre nicht nötig, wenn das in audacity konfiguriert werden könnte, da aber steht es bei beiden auf standard und läßt sich in der GUI nicht ändern. Das kenn ich unter Linux anders. Leider weiss ich auch nicht, wie ich das manuell in der audacity Konfigurationsdatei ändern könnte und was an Stelle von Standard dort eingetragen werden müßte.

Uff anstrengend, aber es funktioniert, das alles ist ja nicht selbstverständlich. Und die Soundqualität unter OpenBSD ist einfach sehrgut.
 
Nach meinem Verständnis müsste es funktionieren, wenn du zB über die ~/.xinitrc sowas wie "env AUDIORECDEVICE=snd/1" setzt. Oder du startest audacity per "env AUDIORECDEVICE=snd/1 audacity".

Auf der OpenBSD Mailingliste habe ich allerdings einen älteren Beitrag gefunden, bei dem gesagt wird, dass es noch nicht funktioniert. Ob der Status noch korrekt ist, weiß ich nicht: https://misc.openbsd.narkive.com/lOKTJaHt/sndio-way-to-play-and-record-from-different-devices
 
Danke, probier ich sofort aus und melde mich, ob es funktioniert. Selber habe ich noch ausprobiert und in der /etc/rc.conf.loacal eingetragen:
Code:
sndiod -f rsnd/1 -f snd/0

Obwohl syntaktisch wohl korrekt, funktioniert nur die Wiedergabe und die Aufnahme leider nicht.
 
Der Eintrag in die .xinitrc funktioniert nicht. Aber wenn ich audacity mit:

Code:
env AUDIORECDEVICE=snd/1 audacity

starte dann funktioniert es einwandfrei. Danke, jetzt funktioniert es sauber, meine c Progs kann ich damit vergessen.
 
Weil viele Wege nach Rom führen und es für mich nicht nur ein entweder/oder sondern auch ein sowie als auch gibt. Das nenne ich Vielfalt. Ansonsten hast Du natürlich Recht, das wäre auch gegangen. Am Ende zählt eine Lösung, das Ergebnis.
 
Nachdem ich meine eher rudimentären C Kenntnisse etwas aufgefrischt habe, wende ich mich jetzt den Shell Scriptings zu. Ist die Standard Shell unter OpenBSD immer noch die Korn Shell oder wird mittlerweile die Bash bevorzugt?
 
Es ist wohl die Kornshell. Habe gerade mein erstes Script info.ksh geschrieben:

Code:
#!/bin/ksh

# Dieses Skript zeigt Informationen über das System an

# Funktionsdefinition zur Anzeige von Informationen

show_info() {
    echo "Systeminformationen:\n"

    uname -a
    echo

    echo "Festplattennutzung:"
    df -h
    echo

    echo "Speicherbelegung:"
    vmstat -s
    echo
}

# Hauptteil des Skripts

echo "Willkommen zum System-Info-Skript!"
echo "-------------------------------"
show_info
echo "Skript beendet."

Jetzt schaue ich mir alias Scripte an, ich lerne ja nie aus.:)
 
Nun möchte ich einen neuen alias anlegen. Mit
Code:
echo $SHELL
habe ich herausgefunden, das die Kornshell benutzt wird. Da ich im Homeverzeichnis keine .kshrc fand, habe ich eine neue angelegt und dann folgendes eingetragen:
Code:
alias aufnahme='sndioctl server.device=1'

Dann Rechner neu gestartet. Nach meinem Verständnis sollte er doch in der shell bei der eingabe von aufnahme jetzt
Code:
server.device=1
ausgeben. Aber es kommt die Fehlermeldung
Code:
Aufnahme not found
Was mache ich noch falsch?
 
Groß / Kleinschreibung? Dein Aufnahme in Aufnahme not found ist groß, der alias klein. Ansonsten feststellen ob die kshrc geladen wird (zum testen irgend ne Variable setzen/exportieren )
 
Jetzt funktioniert es. Zuerst habe ich überprüft, ob die
Code:
.kshrc
geladen wird. Hab dann
Code:
echo 'echo ".kshrc wird geladen"' >> ~/.kshrc
in die .kshrc geschrieben und eine neue Instanz von ksh gestartet. Nichts passiert. Jetzt habe in die .Profile geschrieben
Code:
export ENV=$HOME/.kshrc
und ksh erneut geladen. Jetzt funktioniert der alias. Deine Unterstützung war hilfreich und ich habe was neues gelernt.
 
Einfach export ENV=$HOME/.kshrc in die $HOME/.profile oder $HOME/.xinitrc eintragen sollte reichen, damit die .kshrc verwendet wird.

EDIT: Da haben wir zeitgleich geposted. :-)
 
Einfach export ENV=$HOME/.kshrc in die $HOME/.profile oder $HOME/.xinitrc eintragen sollte reichen, damit die .kshrc verwendet wird.

EDIT: Da haben wir zeitgleich geposted. :-)
Mit Eurer Hilfe und ein wenig eigenen Gehirnschmalz habe ich es dann doch geschafft. Bin ja noch in der Lernphase und entdecke noch viel Neues.
 
Jetzt habe ich noch
Code:
export ENV AUDIORECDEVICE=snd/1
in die
Code:
.profile
gesetzt und das funktioniert auch. Audacity kann nun normal gestartet werden und Aufnahme und Wiedergabe funktionieren nun einwandfrei.
 
Lass mich kurz raten: Du nutzt xenodm um X zu starten, richtig? Das würde erklären, warum es über die .xinitrc nicht funktioniert. Vielleicht willst du es dann mal aus der .profile rausnehmen und in die .xsession packen, was mE der richtige Platz wäre.

Wenn das geht: Sorry, hab ich vergessen abzufragen.. :)
 
Lass mich kurz raten: Du nutzt xenodm um X zu starten, richtig? Das würde erklären, warum es über die .xinitrc nicht funktioniert. Vielleicht willst du es dann mal aus der .profile rausnehmen und in die .xsession packen, was mE der richtige Platz wäre.

Wenn das geht: Sorry, hab ich vergessen abzufragen.. :)
Nein, ich benutze nicht xenodm, sondern starte über eine .xinirc. Bei der Installation habe ich noch folgenden Befehl ausgeführt:
Code:
sed -i 's/xconsole/#xconsole/' /etc/X11/xenodm/Xsetup_0

Bereits bei der Installation habe die Benutzung von xenodm verneint. Aber das dürfte ja nicht ausschlaggebend sein. Soll ich trotzdem mal die .xsession benutzen, um zu sehen, was passiert?

PS: Ich sehe gerade, das ich im Homeverzeichnis überhaupt keine .xsession habe, sondern nur eine .Xdefault.
 
Ich hab das Shell-Gedöns noch nie ganz verstanden. Aber aktuell habe ich den Eindruck, dass dir das "export" fehlt, wenn du es in die .xinitrc einträgst...
 
Hab gerade ein .xsession angelegt und befüllt und entsprechende Einträge in der .profile auskommentiert. Das funktioniert leider nicht.
 
So Vollzugsmeldung. Habe die Einträge:
Code:
export ENV=$HOME/.kshrc

export ENV AUDIORECDEVICE=snd/1

aus der .profile genommen und in die .xinitrc gesetzt. Das funktioniert jetzt einwandfrei. Ich meine mich allerdings schwach zu erinnern, das diese Einträge allerdings dann in die .profile gehören, wenn xenodm benutzt wird. Xenodm wertet nämlich die .profile aus und nicht die .xinitrc. Da bin ich mir ganz sicher.
 
Hmm, ich rudere zurück, bei xenodm sollte es die .xsession sein. Vielleicht klären uns die OpenBSD Experten mal auf? Was ist richtig?
 
Zurück
Oben