Echo Problematik

  • Hallo Leute,


    ich kann das Ganze im Moment nicht testen, da meine DoorPI-Hardware derzeit nicht komplett aufgebaut ist, aber hier mal eine Idee, wie man PulseAudio mit Echo Cancellation evtl. zum laufen bekommen koennte.


    Ist alles noch recht quick-and-dirty, aber zum Testen reicht's. Wie gesagt: ohne Garantie, dass es klappt...


    Alle Befehle fuehre ich als root aus, also entweder direkt als root einloggen oder vorher ein "sudo su -" machen.


    # 1. Disable DoorPI at startup (we'll start it via /etc/rc.local)
    update-rc.d doorpi disable


    # 2. Install PulseAudio
    apt-get install pulseaudio


    # 3. Add root to pulse-access group (DoorPI runs as root)
    usermod -a -G pulse-access root


    # 4. Add to /etc/rc.local
    nano /etc/rc.local


    Add commands to file (before "exit 0":(

    Code
    ...
    # PA discourages running it with --system, but what the hell...
    /usr/bin/pulseaudio --system -D
    # Wait for PulseAudio to settle
    sleep 5
    # Start DoorPI here
    /etc/init.d/doorpi start
    exit 0


    # 5. Reboot
    shutdown -r now


    # 6. Check PulseAudio
    pactl list short sinks


    0 alsa_output.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED


    pactl list short sources


    0 alsa_input.usb-046d_0825_3D01EA40-02-U0x46d0x825.analog-mono module-alsa-card.c s16le 1ch 48000Hz SUSPENDED
    1 alsa_output.0.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED


    # 7. Add to /etc/pulse/system.pa (adjust sink_master and source_master if necessary!)
    nano /etc/pulse/system.pa


    Append to file:


    Code
    load-module module-echo-cancel aec_method=webrtc source_name="noecho.mic_in" sink_name="noecho.sound_out" sink_master="alsa_output.0.analog-stereo" source_master="alsa_input.usb-046d_0825_3D01EA40-02-U0x46d0x825.analog-mono"
    set-default-sink noecho.sound_out
    set-default-source noecho.mic_in


    # 8. Reboot
    shutdown -r now


    # 9. Check PulseAudio (look for the new noecho.* sinks/sources)
    pactl list short sinks


    0 alsa_output.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
    1 noecho.sound_out module-echo-cancel.c s16le 1ch 32000Hz SUSPENDED


    pactl list short sources


    0 alsa_input.usb-046d_0825_3D01EA40-02-U0x46d0x825.analog-mono module-alsa-card.c s16le 1ch 48000Hz SUSPENDED
    1 alsa_output.0.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
    2 noecho.mic_in module-echo-cancel.c s16le 1ch 32000Hz SUSPENDED
    3 noecho.sound_out.monitor module-echo-cancel.c s16le 1ch 32000Hz SUSPENDED



    Sagt Bescheid, ob es was bringt. Es wuerde mich naemlich auch sehr interessieren, da ich auch enorme Probleme mit dem Echo habe... :)


    LG Christian

  • Hallo Christian,


    habe mich mal an deiner Beschreibung versucht!


    Punkt 1 und zwei kein Problem.
    Bei Punkt 3 kommt folgende Meldung: "usermod: Gruppe »pulseaudio-access« existiert nicht."
    Denn Punkt 4 habe ich nur so übernommen, dass Pulseaudio gestartet wird aber DoorPi noch nicht
    Punkt 5 ok,
    Punkt 6 und 7 bekomme ich folgende Meldung:
    "
    MobaXterm X11 proxy: Unsupported authorisation protocol
    xcb_connection_has_error() returned true
    Verbindungsfehler: Zugriff verweigert
    "
    das ganze mit Putty:
    "Verbindungsfehler: Zugriff verweigert"


    weiter bin ich nicht gekommen. Trotz Dr. Google und Co. komme ich nicht weiter.


    Hatt vielleicht wer eine Idee dazu?


    Mein Aufbau ein Pi 3 mit Piface und Jessy Lite, läuft alles eigentlich super bis auf das Echo Problem.


    Gruß


    Johann

  • Hallo Johann,


    ups, sorry, der Befehl von 3. war nicht ganz korrekt. Danke für den Hinweis, ich habe es oben geändert!


    Die Gruppe heißt nämlich pulse-access und nicht pulseaudio-access.
    Außerdem hatte ich den Benutzer am Ende vergessen (root).


    Probiere bitte mal
    usermod -a -G pulse-access root

    /Christian

  • Hört sich ja vielversprechend an.
    Ich habe im Moment leider ziemlichen Streß und nächste Woche bin ich im Urlaub.
    Also komme ich frühestens in 2 Wochen zum Testen!


    Freue mich auf Fortschritte.... Dann wäre das System perfekt!!


    Lg
    Daniel

  • Hallo Christian,


    weiter gehts!
    Durch die Änderung im Punkt 3 hat der Rest auch fuinktioniert, Punkt 7 dementsprechend angepasst und
    DoorPi in /etc/rc.local wieder aktiviert.


    Echo ist weg aber wie ändere ich jetzt die Lautstärke mit dem alsamixer geht es nicht mehr, kann ich
    das bei Pulsaudio wo einstellen?


    Gibt es auch so was wie Rauschunterdrückung?


    Lg


    Johann

  • Hm, so kann das noch nicht funktionieren.


    Erst einmal gibt es Fehlermeldungen, weil pulseaudio als root verwendet wird. In /var/log/messages:


    Code
    OK, nun wird PA im System Mode betrieben. Vorsicht, dies sollte man nicht tun.
    Oct 22 14:22:08 DoorPi pulseaudio[607]: Bei Nichtbeachtung, selber Schuld wenn Dinge nicht funktionieren.
    Oct 22 14:22:08 DoorPi pulseaudio[607]: Für eine Erklärung warum System Mode eine schlechte Idee ist, bitte http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode lesen
    Oct 22 14:22:08 DoorPi pulseaudio[607]: Failed to open cookie file '/var/run/pulse/.config/pulse/cookie': Datei oder Verzeichnis nicht gefunden
    Oct 22 14:22:09 DoorPi pulseaudio[607]: Failed to load authorization key '/var/run/pulse/.config/pulse/cookie': Datei oder Verzeichnis nicht gefunden
    Oct 22 14:22:09 DoorPi pulseaudio[607]: Failed to open cookie file '/var/run/pulse/.pulse-cookie': Datei oder Verzeichnis nicht gefunden
    Oct 22 14:22:09 DoorPi pulseaudio[607]: Failed to load authorization key '/var/run/pulse/.pulse-cookie': Datei oder Verzeichnis nicht gefunden




    Zweitens gibt es, wenn eine USB-Soundkarte vorhanden ist, auch mehr als eine Senke (Sink), beispielsweise:


    Code
    0       alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00-Device.analog-stereo   module-alsa-card.c      s16le 2ch 44100Hz       SUSPENDED
    1       alsa_output.0.analog-stereo     module-alsa-card.c      s16le 2ch 44100Hz       SUSPENDED

    Setzt man jetzt


    Code
    load-module module-echo-cancel aec_method=webrtc source_name="noecho.mic_in" sink_name="noecho.sound_out" sink_master="alsa_output.0.analog-stereo" source_master="alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00-Device.analog-mono"

    wird die echo cancellation (EC) natürlich auf alsa_output.0.analog-stereo durchgeführt - in der USB-Soundkarte ist sie also nicht zu hören.



    Setzt man stattdessen



    Code
    load-module module-echo-cancel aec_method=webrtc source_name="noecho.mic_in" sink_name="noecho.sound_out" sink_master="alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00-Device.analog-stereo" source_master="alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00-Device.analog-mono"

    erfolgt di eEC auf dem richtigen Ausgabedevice.


    Allerdings ist der Output total verzerrt, statt des korrigierten Signals hört man ein wildes Knarzen. Irgendetwas passt also noch nicht. Es würde mich mal interessieren, von wo die oben von flat gepostete Anleitung stammt.



    LG


    pah

  • Servus,
    ich bin DoorPI Neuling und möchte eine Anlage bauen.
    Nachdem was ich hier gelesen habe, gibt es für das Echo Problem noch keine Lösung (und dies hält mich davon ab ein Projekt zu starten).
    Daher die Frage: Warum ist dieses Thema als erledigt markiert worden? Gibt es inzwischen doch eine Lösung?
    VG
    SirIcy

  • Hallo Zusammen,


    ich hatte ähnliche Probleme am Anfang mit Hall und Echos.


    Ich habe die Probleme durch


    1. Optimierung des Sip Servers
    2. Optimierung der Netzwerk Infrastruktur (Priorisierung)
    2. Traffic Shaping mittels Wondershaper auf dem Doopi


    wesentlich reduzieren können.


    Hab meinen Aufbau und Optimierungspfad bei Hilfe und Ratschläge mal eingestellt.


    Leichte Echos habe ich jetzt nur noch an den Sprechstellen welche über WLAN angeschlossen sind.


    Im Bereich der Linphone Konfiguration gibt es noch ein paar Stellschrauben hierzu, Doorpi übergibt ja beispielsweise "firewallpolicy oder echo_canellation" usw. an die
    Linphone Schnittstelle aber das wird ja bereits getestet.


    Viel Erfolg bei der Optimierung und Problembehebung


    Aldafera aka Harald

    SIP: Asterisk 14
    Dect: FrützBüx 7490
    O/S: Debain Jessie
    Automatisierung: CCU2 + CUXD + Pushover + Mail (YAHM)
    Aktoren: (bitte einfach fragen hab 250 Geräte im Einsatz)
    Anbindung Inet DynDns + VPN
    Sicherheit: Palo Alto, Fortigate, LSC ERPM
    Surveillance: Edimax, Digitus, Raspi
    Tracking: Cisco und LoraWan
    Netzwerke: CAT7 - 1Gb Uplink, FO (Multi-, Mono, POF), WLAN. Dect, BidCos, LoRa
    90% Hab ich sicher wieder vergessen - :D

    3 Mal editiert, zuletzt von Aldafera ()

  • Hat jemand eine Creative Sound Blaster X-Fi Go! Pro USB am laufen? Der verwendete Conexant CX20562 soll ja AEC hardwareseitig beherschen.
    Werde das evtl. mal testen.
    Gibt es was neues zur Echo Cancelation von Pulse Audio? Funktioniert es oder nicht?


    Viele Grüße


    Armin

  • Hallo,


    nachdem ich mein doorpi Projekt fertig gebaut habe und natürlich auch echo Probleme habe würde mich ein "Problem gelöst" sehr interessieren.
    Ich muss gestehe, ich bin kein Entwickler und es ist sehr schwierig diesem Thema zu folgenden.
    Schade ist das so viele sich dieses Problem angenommen und auch getestet haben, aber leider keiner positive Rückmeldung mit entsprechender config bereitgestellt hat.


    könnte man jetzt in der doorpi.ini


    [linphone]
    sound_noisegate=1
    sound_echolimiter=1
    sound_echocancellation=0
    sound_ng_thres=0.05
    sound_ng_floorgain=0.0005
    sound_el_speed=0.03
    sound_el_thres=0.1
    sound_el_force=10
    sound_el_sustain=100


    Verbesserungen erziehlen,
    sind hierfür jetzt noch mehr Einstellungen nötig?


    Besten Dank und Gruß
    Dennis

  • Hallo zusammen,


    ich bin neu hier im Forum und baue gerade meinen DoorPi auf. Ich werde versuche die Echoproblematik mit einer Jabra Drive Bluetooth Freisprecheinrichtung zu lösen (habe gute Erfahrungen mit Jabra gemacht und das Teil ist recht kompakt und bezahlbar (neu ab 30 €)). Ist natürlich nicht so elegant wie direkt in der Software des DoorPi, hoffe jedoch dass es funktioniert, da das Teil einen eigenen DSP hat.
    Scheinbar ist es nicht möglich Geräte per HSP (Bluetooth "Sprechen + Hören") direkt mit dem RPi zu kopplen (http://youness.net/raspberry-p…t-raspberry-pi-3-ad2p-hsp). Deshalb werde ich den "Umweg" über einen Bluetooth Dongle gehen. Ich werden Berichten ob das Ganze grundsätzlich so funktioniert und auch ob die Bluetooth Verbindung für den Dauerbetrieb geeignet ist.

  • Hallo zusammen,


    hier ein Anleitung, wie DoorPi bei mir mit pulseaudio echo cancellation funktioniert.


    Nach Fertigstellung der DoorPi-Hardware hat mich das Echo doch so genervt, dass ich etwas Zeit investiert habe, eine Lösung zu finden.
    Ich konnte die Außenseite gut verstehen, die Person vor der Tür hat mich einwandfrei verstanden, aber das Echo am Hörer war dabei zum Teil so heftig und laut, dass ein Gespräch unmöglich war.
    Da die linphone echo cancellation nichts gebracht hat und auch eine Trennwand zwischen Mikrofon und Lautsprecher überhaupt keine Wirkung zeigte, und auch für meine Cirrus Audio Card kein AEC-DSP-Code zu finden war, blieb noch Pulseaudio. Mit einem für DoorPi eigentlich überdimensionierten Raspberry Pi 3B und seinen 4 Kernen sollte doch was machbar sein!


    Hardware:
    Raspberry Pi 3B, Cirrus Audio Card, onboard Mic (DMIC) und Visaton Lautsprecher (Mono).
    Angebunden per ethernet (LAN) an Fritzbox 6360 Cable.
    Clients: FritzFon C5 (Dect) und Tablet mit DoorPi App (WLAN)
    Software:
    pi@rpi3:~$lsb_release -a
    No LSB modules are available.
    DistributorID: Raspbian
    Description:Raspbian GNU/Linux 9.4 (stretch)
    Release: 9.4
    Codename:stretch
    pi@rpi3:~$uname -a
    Linux rpi3 4.14.62-v7+ #1134 SMP Tue Aug 14 17:10:10BST 2018 armv7l GNU/Linux
    pi@rpi3:~$dpkg -l | grep pulseaudio
    ii pulseaudio 10.0-1+deb9u1armhf PulseAudio sound server
    pi@rpi3:~$ doorpi_cli --version
    VoIP Door-Intercomstation withRaspberry Pi 2.5.1


    Installation Pulseaudio:
    sudo apt install pulseaudio pulseaudio-utils
    sudo adduser pulse audio
    sudo adduser pulse pulse-access
    sudo adduser pi pulse-access
    <- hier euren Benutzer hinzufügen, um mit pactl auf pulseaudio zugreifen zu können
    sudo adduser root pulse-access <- wichtig wenn pulseaudio als system daemon läuft. Ohne wird kein device "pulse" zu alsa hinzugefügt!


    Konfiguration Pulseaudio daemon:


    Code: /etc/pulse/daemon.conf
    allow-exit = no
    system-instance = yes
    enable-shm = no
    cpu-limit = no
    high-priority = yes
    nice-level = -15
    realtime-scheduling = no
    default-sample-rate = 16000
    default-sample-channels = 1
    default-fragment-size-msec = 50
    • realtime-scheduling musste ich deaktivieren, da ansonsten pulseaudio kurz nach dem laden des moduls-echo-cancel mit aec_method=webrtc einfach abgeschmiert ist (aec_method=adrian hat mit realtime-scheduling geladen, aber lieferte keine gute Echounterdrückung)
    • default-sample-rate und channels reduziert, um die CPU-Last zu senken.
    • Die restlichen Optionen sind nach wildem testen übrig geblieben. Hier gibt es evtl. noch weiteres Potential z.B. bei default-fragment und default-fragment-size-msec


    Konfiguration Pulseaudio Startup Skript:

    Code: /etc/pulse/system.pa
    ...
    
    
    ### echo cancellation
    load-module module-echo-cancel aec_method=webrtc sink_name=doorpisink source_name=doorpisource sink_master=alsa_output.platform-soc_sound.analog-stereo source_master=alsa_input.platform-soc_sound.analog-stereo use_master_format=true aec_args="analog_gain_control=0 digital_gain_control=0 noise_suppression=0 high_pass_filter=0 mobile=1 routing_mode=loud-speakerphone comfort_noise=0"
    
    
    set-default-sink doorpisink
    set-default-source doorpisource

    einfach am Ende hinzugefügt.


    Achtung: sink_master und source_master auf eure Soundkarte anpassen. "pactl list short sinks" und "pactl list short sources" zum anzeigen was Pulseaudio anbietet.


    Die Optionen für das module echo cancel (aec_args) zielen darauf ab, die CPU-Last zu minimieren und haben so bei mir am besten funktioniert. Vielleicht gibt es hier auch noch Potential.



    Systemd service für Pulseaudio (autostart):

    sudo systemctl daemon-reload


    sudo systemctl enable pulseaudio.service
    manuell starten (oder reboot):
    sudo systemctl start pulseaudio



    Hinweise:

    • Im log (journalctl -e) sind trotzdem noch ein paar Einträge "Playback after capture", "Doing resync", "Playback too far ahead" vor allem zu beginn eines Gesprächs vorhanden. Dort ist auch noch etwas Echo vorhanden.
      Das gibt sich aber nach kurzer Zeit und es ist während eines Gesprächs in Ordnung.
    • Mit anderen Einstellung hatte ich entweder ein Knacksen im Lautsprecher oder abgehackte Gespräche. Viel Spass beim ausprobieren aller Optionen ;)
    • In der doorpi.ini echo cancellation mit "echo_cancellation_enabled = False" deaktiviert. Hat aber ehrlich gesagt keinen Unterschied gemacht.
    • Lautstärke in Pulseaudio überall auf 100% (default) bei mir. Einstellung weiterhin über alsamixer (Soundkarte mit F6 auswählen).
    • Bei anderer Netzwerkkonfiguration kann evtl. auch Paket-Priorisierung / QoS / wondershaper oder ähnliches helfen.
      Insb. wenn DoorPi per Wlan am Netz hängt.
    • Doorpi bleibt weiterhin auf ALSA: default device.
      aplay -l sollte mit aktivem Pulseaudio per default auf das pulse device zeigen:
      default
      Playback/recording through the PulseAudio sound serve
      r
    • Kontrolle ob das module-echo-cancel richtig geladen wurde mit pactl list modules und Anzeige Standardgeräte mit pactl info

    Mein Testskript, da ich nicht immer neu starten wollte zum testen anderer Optionen:

  • Danke, gerne.
    Falls jemand Probleme hat und ich etwas in der Beschreibung vergessen habe, einfach melden.


    Wäre schön zu wissen, ob es bei jemand mit einer anderen Soundkarten ebenfalls geholfen hat.


    Mit htop oder top sieht man gut, dass bei aktivem echo-cancel-Modul die Auslastung deutlich steigt. Es sind 3 pulseaudio-Threads mit ca. 20-50% pro Thread aktiv, je nach Audioaufkommen.
    Eigentlich ist bei der CPU noch Luft nach oben da, jedoch wären dann vermutlich größere Audiopuffer notwendig.


    Die /etc/pulse/daemon.conf settings "default-fragments" und "default-fragment-size-msec" könnten noch etwas bewirken (Anleitung zur Bestimmung der Größen: https://forums.linuxmint.com/viewtopic.php?t=44862).
    Da es bei mir funktioniert, lasse ich aber erst mal die Finger davon.

  • Die Karte hat einen 1,4W Verstärker gleich mit drauf. Reicht dicke. Lautstärke < 30%.
    Hat mir gefallen als "all-in-one"-Lösung. Eines der beiden Mikros sitzt auch direkt unter der Sprechöffnung.


    Schade, dass es die Karte nicht mehr gibt, jetzt wo die Treiber im mainline kernel sind und gut funktionieren.
    Die Vorgängerkarte "Wolfson Audio Card" gibt es seltsamerweise noch. Unterscheidet sich von den Features her kaum, ist aber offiziell nur für den Pi 1 A/B. ( Mod für 40pin Header )


    Die pulseaudio-echo-cancellation-Lösung sollte aber mit anderen Karten oder USB-Lösungen ebenfalls funktionieren.