USB-Mikrofon einrichten

Ein neuer Artikel wurde veröffentlicht
  • Lauter als 100% stellen kann man mit den typischen Pulseaudiotools, grafisch zum Beispiel mit pavucontrol, auf der Kommandozeile mit pactl.

    In der Ausgabe von $ pactl list short sources solltest du das Mikrofon erkennen können (irgendetwas, was mit alsa_input.usb... oder so ähnlich beginnt) und dann die Lautstärke mit

    Code
    1. $ pactl set-source-volume alsa_input.usb... 125

    auf einen Wert > 100%, hier zum Beispiel 125% setzen können.

    Du musst das allerdings als der Benutzer machen, der auch die Spracherkennungssoftware ausführt (oder man muss pulseaudio als systemweiten Daemon verwenden, dazu sind aber ohnehin noch ein paar weitere Schritte notwendig).


    Die daemon.conf ist übrigens der falsche Ansatzpunkt. Die pactl-Befehle kann man, wenn notwendig (eigentlich speicher Pulseaudio solche Einstellung automatisch), in der default.pa verewigen. Einfach ohne das vorangestellte pactl hinten dranhängen, es stehen dort aber eh schon genug drin, dass man sehen sollte nach welchem Muster das abläuft.

  • Hallo,


    bei der Auflistung wird mir das USB-Mikrofon leider nicht angezeigt:


    0 alsa_output.usb-0d8c_Generic_USB_Audio_Device-00-Device.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED

    1 alsa_input.usb-0d8c_Generic_USB_Audio_Device-00-Device.analog-mono module-alsa-card.c s16le 1ch 44100Hz SUSPENDED

    2 alsa_output.platform-soc_audio.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED


    Muss ich noch etwas an der asound.conf verändern oder kann ich diese so beibehalten, wie du sie angegeben hattest?

  • Vorausgesetzt das stimmt (und alsa_output.usb-0d8c... ist die USB-Soundkarte), dann dürfte das daran liegen, dass die Sprachsoftware nach wie vor über Alsa direkt auf das Mikrofon zugreift und so das Alsagerät blockiert wird. Nachdem Pulseaudio nicht über Plugins wie dmix oder dsnoop, sondern nur direkt auf die Alsasoundkarten zugreifen will, kann es nichts mehr ausrichten (und es kann sich eigentlich weder am Rauschen noch an der Lautstärke etwas geändert haben).

    Theoretisch wäre zwar theoretisch möglich Pulseaudio auf deine selbst in Alsa definierte "Soundkarte" zugreifen zu lassen, aber das würde sehr unübersichtlich werden...


    Vor allem aber würde es nichts bringen, weil du sowieso dafür sorgen musst, dass die Sprachsoftware auch Pulseaudio verwendet. Dazu löscht du entweder die komplette .asoundrc oder asound.conf zumindest aber alle Definitionen mit default und !default, dann sollte pulseaudio auch über Alsa automatisch der default werden oder du konfigurierst die Sprachsoftware so dass sie direkt Pulseaudio verwendet.



    Wie startest du diese Anwendung denn?

    (Wenn sie von einer systemd-unit oder einem Startskript unter einem eigenen Benutzeraccount gestartet wird, dann ist musst du Pulseaudio auch für diesen Benutzeraccount konfigurieren oder Pulseaudio als systemweiten Daemon konfigurieren.)

  • Hallo,


    in der Java sound.properties ist eingestellt, dass Java auf ALSA zugreifen soll. Hier könnte man jedoch auch Pulseaudio einstellen. Welche Einstellung wäre nützlicher? Zudem habe ich nun den Inhalt der asound.conf auskommentiert. Zudem startet Pulseaudio nicht beim Systemstart. Welche Einstellung muss dafür getroffen werden?

  • dieses Problem ist bereits gelöst.

    Das glaube ich nicht, Du hast nur ein Symptom beseitigt, das "Problem" kann genauso bei einem anderen Soundserver gleichermassen auftreten.


    Wenn sich die Mikrofonempfindlichkeit auch mit dem Pulsaufio Server nicht in den Systemeinstellungen - Geräte - Sound/Klang, oder im (ncurses) Alsamixer vergrössern lässt, dann kannst Du noch immer im (richtigen) Config File die Eingangsempfindlichkeit mit einer Ganzzahl von 0 - 65536 für 0 - 100 % und darüber (Verstärkung) 65537 - 131072, 100 - 200 %, anpassen.

    < apropos pulseaudio > bzw. default.pa, pacmd, pulseaudio, pulse-client.conf, und deren man-pages zeigen Dir, wo es langgeht.



    Servus !

  • Hallo,


    was soll ich nun konkret machen?


    Ich möchte mit meinem Mikrofon auch aus einer Entfernung von 2 - 3 Metern noch Stimme so gut aufnehmen können, dass die Google API keine Probleme mit der Erkennung hat. Deshalb habe ich mir gedacht, dass das Mikrofon genauso wie unter Windows verstärkt werden kann. Nun habe ich Pulseaudio installiert und weiß nicht wirklich, was ich machen soll.


    Nachdem ich Pulseaudio manuell gestartet habe, kann die Java-Anwendung nicht mehr auf das Mikrofon zugreifen.

  • Wenn du Pulseaudio nutzen willst, wäre Pulseaudio natürlich die naheliegendere Einstellung. Mit der auskommentierten Alsakonfiguration sollte es aber auch mit dem Umweg über Alsa klappen (wenn du in der Anwendung default als Alsagerät auswählst).


    Normalerweise (bei normalem Desktopbetrieb) startet Pulseaudio bei der (grafischen) Anmeldung des Benutzers. Auf der Konsole oder von Diensten wird Pulseaudio entweder bei Bedarf automatisch (ich weiß aber nicht unter welchen Voraussetzungen das zuverlässig funktioniert) oder gar nicht gestartet.

    Hinderlich ist in manchen Situationen, dass Pulseaudio unter demselben Benutzeraccount laufen muss wie die Anwendung.


    In gewisser Weise übersichtlicher wird es mit nur einer systemweiten Pulseaudio-Instanz, wie ich sie im Wikiartikel, den ich zu Beginn des Threads erwähnt habe, beschrieben habe, ich bin mir aber nicht 100%ig sicher, dass ich im Wikiartikel an alle Details gedacht habe.

    Zu erwähnen wäre vielleicht außerdem noch, dass die Pulseaudioentwickler gleich aus mehreren Gründen, vor allem aber wegen der Sicherheit, von Pulseaudio als systemweiten Daemon abraten.

  • Pulseaudio startet nun als systemweiter Dienst. Außerdem kann die Java-Anwendung darauf zugreifen. Dabei besteht jedoch eine starke Verzögerung. Wie kann ich diese beseitigen?


    Merkwürdig ist auch, dass ich die Lautstärke der Lautsprecher bei der Soundkarte PulseAudio auf 75 setze und bei der USB-Soundkarte, über die die Lautsprecher angeschlossen sind, die Lautstärke 61 angezeigt wird. Wieso zeigt Pulseaudio eine andere Lautstärke an als die USB-Soundkarte? Vor allem übersteuern die Lautsprecher teilweise mit einer Lautstärke von 60.


    Außerdem zeigt die USB-Soundkarte zwei Mikrofon-Regler an, obwohl die Soundkarte nur ein Mikrofon-Eingang besitzt, den ich aber sowieso nicht benötige, da ich ja ein USB-Mikrofon besitze.

  • Was für eine Verzögerung meinst du?

    Dauert der Systemstart oder der Start eines Programms lange oder ist die Latenz bei der Audioverarbeitung sehr groß?


    Die Skalen von Alsa und Pulseaudio müssen nicht übereinstimmen. Als Hardwareabstraktionsschicht muss Pulseaudio versuchen die unterschiedlichen Skalen der verschiedenen Soundkarten(treiber) zu vereinheitlichen.

    Was das Übersteuern angeht: Wenn in Pulseaudio irgendein Regler über 100% aufgedreht ist, kann das schon passieren. Als andere mögliche Ursache fällt mir eigentlich nur die Möglichkeit ein, dass die Audiodaten schon von vorher verzerrt oder geclippt waren.


    Bei den beiden Mikrofonreglern komme ich nicht mit:

    Die gewohnten Alsaregler der Soundkarte(n) kannst du einmal grundsätzlich ignorieren, wenn du Pulseaudio verwendest. Wenn du die verstellst, stellt sie entweder Pulseaudio bei der nächsten Gelegenheit zurück oder die zusätzliche Änderung verwirrt dich oder Pulseaudio nur...

    Außerdem läuft es mit Pulseaudio eigentlich so, dass pro Soundkarte sowieso nur ein Aus- und ein Eingang gleichzeitig genutzt werden kann, das heißt es gibt für eine Soundkarte höchstens einen Wiedergabe- und einen Aufnahmeregler und man kann nur zusätzlich in Pulseaudio mit dem aktiven Profil zum Beispiel lediglich einstellen ob die Wiedergabe nun über den analogen oder digitalen Ausgang und ob von Line-In oder vom Mikrofoneingang aufgenommen werden soll.



    In Alsa solltest du mit Pulseaudio jedefnalls genau einen Aufnahme- und einen Wiedergaberegler zu sehen bekommen

    Code
    1. $ alsamixer -D default --view=all


    Alles andere wie Einstellungen über 100% hinaus, Aufnahmequelle, Wiedergabegerät, u. s. w. musst mit den Pulseaudiotools konfigurieren und einstellen (pactl, pavucontrol oder die jeweilige Anwendung bietet alternativ die Möglichkeit das direkt in der Anwendung einzustellen).



    Etwas verwirrendes gibt es aber noch:

    Es gibt sowohl bei der Wiedergabe wie auch bei der Aufnahme für jede Anwendung einen eigenen zusätzlichen Regler, der nur so laut eingestellt werden kann wie die gerade erwähnten Hauptregler stehen (werden sie lauter aufgedreht ziehen sie die Hauptregler zumindest bis 100% sozusagen mit hinauf). Dagegen kannst du in der daemon.conf

    Code
    1. flat-volumes = no

    setzen, erhöhst damit aber vielleicht die Gefahr von unbeabsichtigten Verzerrungen, weil dadurch Anwendungs- und Hauptregler komplett unabhängig voneinander einstellt werden können (soweit ich weiß könntest du dann mit dem ersten Regler, in Wiedergaberichtung wäre das der Anwendungsregler, das Signal mit >100% soweit verstärken, dass es geclippt wird und mit dem Hauptregler dann soweit herunterregeln, dass du wegen niedrigen der Lautstärke gar nicht auf Idee, dass die Verzerrungen an einem zu laut aufgedrehten Regler liegen).

  • Hallo,


    ich habe in meiner selbstentwickelten Java-Anwendung eine Schleife, die in jeder Wiederholung prüft, ob die Lautstärke in dem Moment größer ist, als ein festgelegter Wert. Sollte das so sein, wird ein Request an den Google Server gemacht. Das hat mit ALSA auch sehr gut funktioniert. Nun passiert es jedoch, dass ich spreche und die Benachrichtigung, dass die Lautstärke erreicht wurde, erst Sekunden später auftritt. Damit wird es verzögert, was bei ALSA aber schon funktioniert hatte.


    EDIT: Das Problem ist jetzt anscheinend gelöst, aber das Problem ist, dass ich die folgende Zeile nicht in die system.pa eintragen kann:

    "set-source-volume alsa_input.usb-Samson_Technologies_Samson_UB1-00-UB1.analog-mono 130%"


    Es erscheint die Fehlermeldung: "Failed to parse volume".

  • Da habe ich erst einmal keine richtige Idee außer testweise das %-Zeichen wegzulassen (oder den Aufruf wegzulassen und darauf zu vertrauen, dass sich Pulseaudio die Lauststärkeeinstellung korrekt merkt) und ein solches Konstrukt um die eigenen Aufrufe zu schreiben

    Code
    1. .nofail
    2. <eigene Aufrufe>
    3. .fail

    (wie es sich an einigen Stellen auch in /etc/pulse/default.pa findet) damit man nicht bei jeder Änderung Pulseaudio komplett lahmlegt.



    Kleine Ergänzung:

    Mit pacmd (statt pactl) bin ich auf dasselbe Problem gestossen. Das lässt sich tatsächlich lösen indem man % weglässt.

  • Okay, das Problem ist gelöst.


    Leider kommt es immer noch dazu, dass meine Lautsprecher teilweise nur rauschen, anstatt etwas mit der Google Translator Stimme auszugeben. Wie kann das passieren? Mit ALSA hat es wunderbar funktioniert.


    Außerdem scheint es immer noch ein wenig Verzögerung bei der Aufnahme mit dem Mikrofon zu geben. Das sind etwa 2 - 3 Sekunden.

  • Pulseaudio ist von vornherein nicht auf besonders niedrige Latenzen ausgelegt glaube ich, möglicherweise lässt die sich auf Kosten der Rechenlast trotzdem verringern. Nachdem mich dieser Aspekt bis jetzt noch nie interessiert hat, kann ich da nur auf Google oder die Dokumentation verweisen.


    Tauchen vielleicht irgendwelche Fehlermeldungen von Pulseaudio im Log auf? Wenn du den Dienst nach meiner Anleitung eingerichtet hast, sollte sich die Meldungen so anzeigen lassen:

    Code
    1. # journalctl -p7 -u pulseaudio.service

    oder gibt der Kernel vielleicht irgendwelche verdächtigen Meldungen aus

    Code
    1. # dmesg
    2. oder
    3. # journalctl -k
  • Hallo,


    mir ist gerade die Datei hs_err_pid<Nummer>.log im Verzeichnis /root aufgefallen.


    Diese beinhaltet folgende Fehlermeldung:


    In welchem Zusammenhang steht diese Fehlermeldung mit pulseaudio?

  • Von java weiß ich nur, dass es der Name einer Insel und einer Programmiersprache ist – das ist aber auch schon so gut wie alles.

    Wenn ich trotzdem spekulieren soll: Nachdem der Fehler im Zusammenhang mit libzip, einer Bibliothek zum Umgang mit zip-Archiven, auftritt, würde ich tippen, dass es nichts mit Pulseaudio zu tun hat.

  • Stimmt,


    ich nehme an, dass dieser Fehler dadurch zu Stande gekommen ist, dass die Jar-Datei während der Laufzeit ausgetauscht wurde. Jedoch besteht das Haupt-Problem noch immer. Es kommt mir mit Pulseaudio so vor, als wären die Aufnahmen vom Mikrofon über Java verzögert, sodass nicht in Echtzeit aufgenommen wird, was aber unbedingt erforderlich ist. Ich schließe es aus, dass dieser Fehler mit Java zusammenhängt, da ich mit ALSA keine Probleme hatte, jedoch die Lautstärke nicht immer gereicht hat, was der Grund für den Wechsel auf Pulseaudio war.


    Wie muss ich Pulseaudio konfigurieren, um es mit höchster Leistung benutzen zu können, in der Hoffnung, dass dadurch keine Verzögerung auftritt bzw. diese minimiert wird?


    EDIT: Interessanterweise tritt bei einer Aufnahme über arecord keine Verzögerung auf. Wird hier auch über Pulseaudio aufgenommen? Dann müsste es ja doch im Zusammenhang mit Java stehen. smutbert

  • Entschuldige ich dachte, ich hätte schon geantwortet ☺


    Also wie man die Latenz bei der Aufnahme über Pulseaudio verringern könnte weiß ich nicht - ich habe nur eine vage Ahnung wie man es mit Alsa bei der Wiedergabe machen könnte...


    Wenn du mit arecord ohne Angabe des Aufnahmegeräts oder mit »arecord -D default ...« aufnimmst, dann läuft die Aufnahme über Pulseaudio (die Audiodaten machen nur einen zusätzlichen Umweg über Alsa). Sonst kannst du auch mit parecord testen; das nimmt direkt über Pulseaudio auf.