Echo Problematik

  • Hallo!


    Das sind gute Neuigkeiten. Auch ich compiliere gerade an PJSUA herum, auch ich habe gesehen, dass die ein AEC anbieten und war daher schon recht angetan.


    Aber noch bevor ich das mit dem AEC angehe möchte ich versuchen einen h264 Video Stream zu bekommen, am liebsten über den auf dem Raspi vorhandenen HW encoder (bis ffmpeg geht es schon mal, darüber habe ich noch Probleme) . Das war bei mir der initiale Grund, warum ich mir dieses PJSUA angesehen habe. Allerdings habe ich es bis dato aber noch nicht hin bekommen. Das sit aber ein anderes Thema...


    Hat denn jemand von euch schon mal versucht das linphone-raspberry mit Echo cancellation zu komplieren? Ich hatte nämlich bisher noch kein Glück damit... linphone an sich habe ich hin bkommen, aber dieses ppython wrapper gedöns noch nicht.


    Michael

  • Hallo,


    ich hab auch mal versucht das Echo-Problem mit der Anleitung von phx zu beseitigen.


    Hab alles so gemacht wie beschrieben. Aber bekomme die gleiche Fehlermeldung, wie emilio.


    Habe dann alle /etc/pulse/"Datei-Einträge" wieder in den Orginal zustand gebracht und die user aus den Gruppen entfernt.


    Und das Ende vom Lied ist, die Doorpi Sprachausgabe geht nicht mehr.


    Hat jemand eine Idee, was ich falsch gemacht habe?

  • Hallo en123,


    ich würde gern helfen ... evtl. habe ich auch etwas in meiner Anleitung vergessen ... aber ein paar mehr Informationen braucht es schon zur Fehlersuche (s. post 124).


    Vielleicht spuckt "sudo journalctl -eu pulseaudio" einen Hinweis aus.
    Alternativ kannst du folgendes versuchen: pulseaudio beenden mit "sudo systemctl stop pulseaudio" oder pulseaudio -k (je nach startart) und danach pulseaudio manuell mit mehr log-output starten "sudo pulseaudio -vvv --system"



    Ergänzung:
    In /etc/pulse/client.conf ist bei mir alles auskommentiert und ich habe bei mir auch kein X-server/GUI laufen.

  • Hallo phx,




    Ich habe den Raspberry Pi Model B und das aktuelle Betriebssystem Raspbian Stretch
    Kernel 4.14.79-v7+



    lsb_release -a
    No LSB modules are available.
    Distributor ID: Raspbian
    Description: Raspbian GNU/Linux 9.6 (stretch)
    Release: 9.6
    Codename: stretch


    uname -a
    Linux raspberrypi 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l GNU/Linux


    dpkg -l | grep pulseaudio
    ii pulseaudio 10.0-1+deb9u1 armhf PulseAudio sound server
    ii pulseaudio-utils 10.0-1+deb9u1 armhf Command line tools for the PulseAudio sound server


    doorpi_cli --version
    VoIP Door-Intercomstation with Raspberry Pi 2.5.1



    Code: system.pa
    /etc/pulse/system.pa
    ### echo cancellation
    load-module module-echo-cancel aec_method=webrtc sink_name="doorpisink" source_name="doorpisource" sink_master="alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-stereo" source_master="alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-mono"
    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




    sudo journalctl -eu pulseaudio




    Habe ich das so richtig gemacht?
    /etc/pulse/system.pa

    Code
    ### echo cancellation
    load-module module-echo-cancel aec_method=webrtc sink_name="doorpisink" source_name="doorpisource" sink_master="alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-stereo" source_master="alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-mono"
    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
  • Dein raspbian ist fast identisch zu meinem. Ich sehe hier keinen Fehler. Dass in system.pa ausschließlich aec_args bei mir Anführungszeichen hat ... sollte nun wirklich keinen Unterschied machen.


    Ich habe mal alle meine Konfigurationsdateien angehängt. Insb. die vollständige pulseaudio Konfiguration (/etc/pulse/*)
    In /systemstate.txt ist die Ausgabe von allen Befehlen die mir gerade eingefallen sind. Insb. am Dateiende die Reche auf die von pulseaudio genutzten Verzeichnisse. Pulseaudio läuft bei mir nicht als root, sondern unter dem Nutzer pulse.


    Weitere Hinweise (evtl. liegt es an der autospawn option?)
    https://www.linuxquestions.org…r-pavucontrol-4175610042/
    -> ... evtl. pulseaudio mit -vvvv starten und dann schauen, was passiert, wenn du pactl aufrufst.
    https://askubuntu.com/question…o-pulseaudio-failed-error

  • Danke phx,


    du hast mich auf den richtigen Gedanken gebracht.
    Ich habe die Zeile
    "use_master_format=true aec_args="analog_gain_control=0......"
    ohne Umbruch gemacht.
    Jetzt kommt auf pulseaudio -vvv --system



    Ich habe drei Stockwerke mit Telefonen über die Fritzbox 7390 angeschlossen. Zwei davon über die externen Fon-Anschlüsse der Fritzbox. Eines über Dect mit einem Fritzfon C5
    Mit meinem alten Siemens Gigaset 3015 hör ich zumindest meine Stimme am Lautsprecher der Anläuteplatte. Das Micro schein nicht zu gehen. Bei den beiden anderen ist nichts zu hören.
    Als ich nur Alsa benutzte gingen alle drei Telefone. Was könnte da sein?
    Hat jemand eine Idee?

  • Evtl. ist es einfach zu leise oder auf mute?


    Du kannst mit "alsamixer" auf der Konsole alles durchgehen. Mit F6 die Karte auswählen, F4 für Aufnahme (geht bei mir seltsamerweise nicht) oder F5 für Alle und den Pfeiltasten durchblättern ... alles was nach Micro, gain, In/Input riecht mal überprüfen.

  • Hallo phx,
    bin schon am verzweifeln.
    Bei den drei Telefonen die ich über Fritzbox angeschlossen habe, funktioniert nur eins
    seitdem ich pulseaudio echo cancellation aktiviert habe.
    Also hier kann ich am Doorpi_Lautsprecher meine Stimme hören und das Mikro geht auch.
    Wenn ich zum Fritzfon ein Call starte, läutet das Telefon aber ich kann am Lautsprecher
    der Anläutplatte meine Stimme nicht hören und das Mikro geht auch nicht.
    Ich hab mal meine doorpi.ini und eine log Ausgabe als zip mit angehängt.
    Vielleicht hab ich da was falsch gemacht.


    Gruß en123

  • Puh. Sah auf den ersten Blick alles korrekt aus im log von doorpi. Mit gefährlichem Halbwissen stelle ich aber mal folgende Vermutung auf:
    1) aplay -L zeigt an, dass "default" auf auf pulseaudio geht
    2) In der doorpi.ini hast du jedoch nicht "ALSA: default device" als capture_device und playback_device ausgewählt
    3) Die in der doorpi.ini explizit gewählte Soundkarte "ALSA: USB PnP Sound Device" ist zwar die richtige Karte, wird aber nicht über Pulseaudio geroutet.


    Vielleicht reicht es schon, in der doorpi.ini wieder "ALSA: default device" für beide devices zu nehmen. Default in alsa ist pulseaudio, sobald es korrekt geladen ist, wie aplay -L ja bei dir anzeigt, und in Pulseaudio selbst sind die sinks/sources dann auf die richtige USB-Karte eingestellt.
    Ich habe bei mir von Anfang an die interne Karte deaktiviert (in /boot/config.txt dtparam=audio=on auskommentiert -> #dtparam=audio=on), um ein Problem weniger zu haben ;)


    Weitere Anmerkungen zur doorpi.ini:
    - "mic_gain_db = 0" habe ich bei mir nicht gesetzt. Ist Mikrofonverstärkung von 0 gewollt?
    - "call = ..." bei [AdminNumbers] sieht deplaziert aus, aber vielleicht kenn ich nur die Option nicht. Und "* = active" macht in Kombination mit den nachfolgend explizit aufgeführten Nummern keinen Sinn.

  • Hi all,


    I'm also building my DoorPi and it has been 1 step forward, three steps back. I even considered an old Android Phone as Doorbell with a custom application but in the end that did not work out as I cannot understand the people at the door.


    Has anybody already looked into UV4L. I have great results with that... no echo whatsoever. This is because the webrtc protocol has a lot of echo-cancellation software built-in. The problem with that is that I do not know how to link it to Asterisk, which I would like to keep since it would allow me to call me on my Android Phone when I'm not home.


    I'm now first going to try @Wal's solution with compiling pjsip.


    Best regards,
    Ronald

  • Ich habe jetzt nochmal mit 0815 Hardware getestet, AEC mit pjsua geht definitiv. Es wäre aber schön, wen das jemand bestätigen könnte.

    Wal: I installed pjsip and I'm trying to understand how the echo cancellations should work. In the doorpi/sipphone/pjsualib/Config.py from your doorpi.tar.gz archive, I find the following:

    Code
    MediaConfig.ec_options = conf.get_int(SIPPHONE_SECTION, 'media.ec_options', 0)
    MediaConfig.ec_tail_len = conf.get_int(SIPPHONE_SECTION, 'media.ec_tail_len', 1024)

    If I understand the pjsip documentation well, the 0 means no echo cancellation will be done. Did you add something media.ec_options in the doorpi.ini with a value of 1? If not, I can't understand how the echo cancellation would work.

  • Hello rdehuyss,
    yes you are right, the parameter "MediaConfig.ec_options" must be set in the doorpi.ini.
    I did not pursue the topic any further because I no longer use doorpi.
    Since I use ioBroker as SmartHome software, I have programmed an adapter for it. As Sip software I use Baresip and as AEC the module of Pulseaudio. My hardware is now an Odroid XU4 that has more power for AEC.
    Baresip is currently being developed, so I changed.

  • Hi Wal,


    Pjsua funktioniert bei mir auch. Echo ist weg.... Danke!

    Hab es mit verschiedenen USB Soundkarten getestet, teils ist noch ganz, ganz leise was zu erkennen.

    Für mich ist es so aktuell ok, falls jemand aber noch weiter es verbessern möchte würde ich den Ansatz verfolgen.


    fyi

    https://wiki.archlinux.org/ind…e_Echo/Noise-Cancellation

    • Static noise in microphone recording
    • Setting the sound card's sampling rate into PulseAudio configuration (3/5)


    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    Auszug aus:

    https://www.loxforum.com/forum/faqs-tutorials-howto-s/39551-sip-türsprechanlage-mit-video-im-eigenbau-auf-basis-des-doorpi-projektes?p=225343#post225343


    Hallo all,

    hi Wal,

    ich konnte alles mit dem "sipphonetyp = linphone" (Doorpi.ini) erfolgreich nachvollziehen,

    um mit meinen Fritz Box Telefon und der Loxone App Gespräche anzunehmen bzw. aufzubauen.


    Wegen des besseren Echo cancellation #140 bin ich dieser Anleitung gefolgt.
    "sipphonetyp = pjsua" und damit kann ich kein Gespräch mehr von der Loxone App (Türsprechbaustein) mit dem Doorpi aufbauen.


    Vll. sowas wie im Beitrag #107 : "allow_guest = yes" in der sip.conf?

    pjsua sip.conf gibt es das?

    Wenn ja wo finde ich das?


    Kann mir wer sagen oder erläutern, ob ich da noch was zu konfigurieren habe?


    Vielen Dank im Voraus

  • Kurze Frage. Ich habe auch ein Echo, an das ich mich aber eigentlich ganz gut gewöhnt habe. Primär habe ich das Echo aber immer auf das Delay der WLAN-Verbindung geschoben. Hat jemand Erfahrungen, ob es sich auch bei einer solchen Verbindung durch Pjsua unterdrücken lässt?

  • Hallo,

    seit Tagen versuche ich mit pulseaudio das Echo-Problem in den Griff zu bekommen - jedoch ohne Erfolg. Trotzdem ich sehr viele Seiten im Internet gelesen habe, habe ich nach wie vor ein Echo.

    Hardware:

    Raspberry Pi 4, IQaudIO Codec Zero mit externem Mic und Visaton Lautsprecher (Mono)

    WLAN-Anbindung, Fritzbox und FritzFon C5

    Software:

    pi@DoorPiSv:~ $ lsb_release -a

    No LSB modules are available.

    Distributor ID: Raspbian

    Description: Raspbian GNU/Linux 11 (bullseye)

    Release: 11

    Hostname DoorPiSv

    Codename: bullseye

    pi@DoorPiSv:~ $ uname -a

    Linux DoorPiSv 5.15.32-v7+ #1538 SMP Thu Mar 31 19:38:48 BST 2022 armv7l GNU/Linux

    pi@DoorPiSv:~ $ dpkg -l | grep pulseaudio

    ii pulseaudio 14.2-2+rpi1 armhf PulseAudio sound server

    ii pulseaudio-utils 14.2-2+rpi1 armhf Command line tools for the PulseAudio sound server

    pi@DoorPiSv:~ $ doorpi_cli --version

    VoIP Door-Intercomstation with Raspberry Pi 2.5.1


    Die echo canellation habe ich nach der Anleitung von phx vom 02. September 2018 vorgenommen.


    Die Bezeichnungen für sink und source habe ich wie folgt erhalten:

    pi@DoorPiSv:~ $ sudo pactl list short sinks

    0 alsa_output.platform-soc_sound.stereo-fallback module-alsa-card.c s16le 2ch 16000Hz SUSPENDED

    1 doorpisink module-echo-cancel.c float32le 2ch 16000Hz SUSPENDED


    pi@DoorPiSv:~ $ sudo pactl list short sources

    0 alsa_output.platform-soc_sound.stereo-fallback.monitor module-alsa-card.c s16le 2ch 16000Hz SUSPENDED

    1 alsa_input.platform-soc_sound.stereo-fallback module-alsa-card.c s16le 2ch 16000Hz SUSPENDED

    2 doorpisource module-echo-cancel.c float32le 2ch 16000Hz SUSPENDED

    3 doorpisink.monitor module-echo-cancel.c float32le 2ch 16000Hz SUSPENDED


    pi@DoorPiSv:~ $ sudo pactl list short modules

    0 module-device-restore

    1 module-stream-restore

    2 module-card-restore

    3 module-udev-detect

    4 module-alsa-card device_id="0" name="platform-soc_sound" card_name="alsa_card.platform-soc_sound" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"

    5 module-native-protocol-unix

    6 module-default-device-restore

    7 module-always-sink

    8 module-suspend-on-idle

    9 module-position-event-sounds

    10 module-echo-cancel sink_master=alsa_output.platform-soc_sound.stereo-fallback source_master=alsa_input.platform-soc_sound.stereo-fallback aec_method=webrtc sink_name=doorpisink source_name=doorpisource use_master_format=true aec_args="analog_gain_control=false digital_gain_control=false noise_suppression=false high_pass_filter=false mobile=true routing_mode=loud-speaker comfort_noise=false"


    Einzig die Befehle

    set-default-sink doorpisink

    set-default-source doorpisource

    habe ich in der Datei /etc/pulse/default.pa eingetragen. Hatte diese Befehle aber auch zwischenzeitlich in der Datei /etc/pulse/system.pa.

    Ansonsten habe ich alles wie in der vorgenannten Anleitung erstellt.


    In der Anleitung steht, dass

    "aplay -l sollte mit aktivem Pulseaudio per default auf das pulse device zeigen:

    default

    Playback/recording through the PulseAudio sound server"


    Bei mir gibt der Befehl folgendes aus:

    pi@DoorPiSv:~ $ aplay -l

    **** Liste der Hardware-Geräte (PLAYBACK) ****

    Karte 0: IQaudIOCODEC [IQaudIOCODEC], Gerät 0: IQaudIO CODEC HiFi v1.2 da7213-hifi-0 [IQaudIO CODEC HiFi v1.2 da7213-hifi-0]

    Sub-Geräte: 1/1

    Sub-Gerät #0: subdevice #0


    jedoch bei dem folgenden Befehl wird pulseaudio als default dargestellt

    pi@DoorPiSv:~ $ sudo amixer info

    Card default 'pulse'/'PulseAudio'

    Mixer name : 'PulseAudio'

    Components : ''

    Controls : 4

    Simple ctrls : 2


    Ebenso bei

    pi@DoorPiSv:~ $ aplay -L

    null

    Discard all samples (playback) or generate zero samples (capture)

    default

    Playback/recording through the PulseAudio sound server

    lavrate

    Rate Converter Plugin Using Libav/FFmpeg Library

    samplerate

    Rate Converter Plugin Using Samplerate Library

    speexrate

    Rate Converter Plugin Using Speex Resampler

    jack

    JACK Audio Connection Kit

    oss

    Open Sound System

    pulse

    PulseAudio Sound Server

    upmix

    Plugin for channel upmix (4,6,8)

    vdownmix

    Plugin for channel downmix (stereo) with a simple spacialization

    hw:CARD=IQaudIOCODEC,DEV=0

    IQaudIOCODEC, IQaudIO CODEC HiFi v1.2 da7213-hifi-0

    Direct hardware device without any conversions

    plughw:CARD=IQaudIOCODEC,DEV=0

    IQaudIOCODEC, IQaudIO CODEC HiFi v1.2 da7213-hifi-0

    Hardware device with all software conversions

    sysdefault:CARD=IQaudIOCODEC

    IQaudIOCODEC, IQaudIO CODEC HiFi v1.2 da7213-hifi-0

    Default Audio Device

    dmix:CARD=IQaudIOCODEC,DEV=0

    IQaudIOCODEC, IQaudIO CODEC HiFi v1.2 da7213-hifi-0

    Direct sample mixing device

    usbstream:CARD=IQaudIOCODEC

    IQaudIOCODEC

    USB Stream Output


    Alles erfolglos. Ich bekomme das Echo nicht weg. Ich bemerke eigentlich keinen Unterschied zum Betrieb ohne oder mit dem module-echo-cancel.


    Kann mir jemand behilflich sein?

    Vielen Dank im Voraus

    Schorsch

  • Hi,

    ich habe mein Problem selber lösen können. Hier mein Lösungsweg mit ein paar Erläuterungen:

    • Ich habe mich an die Anleitung von phx vom 02. September 2018 gehalten (hier in diesem Beitrag).
    • Die Datei /etc/asound.conf enthält systemweite Angaben für ALSA, also unabhängig vom User. Oftmals wird im Internet auch auf Einstellungen in der Datei ~/.asoundrc verwiesen. Die dort getätigten Einstellungen sind nur für den jeweiligen Benutzer. Für meine Installation muss die Datei ~/.asoundrc gelöscht werden (war auch nicht vorhanden). Die Datei asound.conf war ebenfals nicht vorhanden, diese muss jedoch angelegt werden.
    • pulseaudio wird in der Regel auf User-Ebene genutzt. Jeder User kann dann seine eigenen Einstellungen abspeichern. Dies erfolgt in der Datei /etc/pulse/default.pa . In diesem Fall wird pulseaudio als systemweite Installation genutzt. Die Einstellungen müssen daher in der Datei /etc/pulse/system.pa vorgenommen werden.
    • Als sink wird bei den folgenden Befehlen auch eine Ausgabe "..... .monitor" ausgegeben. Dabei handelt es sich um einen Kanal zur Aufnahme des gerade ausgegeben Musikstücks. Dies ist für die weitere Betrachtung nicht relevant und habe ich daher nicht weiter berücksichtigt.
    • Soundcard IQaudIO Codec gemäß Anleitung installiert.

    Für ALSA habe ich Pulseaudio als default eingetragen, in dem ich die Datei asound.conf mit folgendem Inhalt erstellt habe.

    In vielen Beiträgen wird die Schreibweise pcm.!default verwendet. Auf den Seiten von freedesktop.org wird für das perfekte Setup von pulseaudio jedoch die vorgenannte Schreibweise empfohlen [1].


    Mit dem Befehl aplay -l (kleines L) erhält man die Liste der eingesetzten Hardware.

    Bei mir ist es Karte 0 und Gerät 0. Diese Angaben sind auch in der folgenden Datei bereits gesetzt. Ansonsten müst ihr diese anpassen:

    Code: /usr/share/alsa/alsa.conf
    ...
    defaults.ctl.card 0
    defaults.pcm.card 0
    defaults.pcm.device 0
    ....


    Abweichend von phx sieht meine Datei system.pa wie folgt aus:

    • Mit den Modulen module-alsa-sink bzw. module-alsa-source habe ich die Karte mit den beiden Zahlen für Karte und Gerät fest vorgegeben.
    • mit sudo pactl list erhält man eine Liste der geladenen Module, Quellen und Ziele. Mit sudo pactl list wird die Ausgabe gekürzt dargestellt.
    • Das Modul zur Echo-Cancellation:
      • sink_master bzw. der source_master ist jeweils die unbearbeitete Version.
      • source_name bzw. sink_name sind die bearbeitete Version
      • für die feste Vorgabe von Karte und Gerät verwendet das Modul leider eine andere Syntax, daher die Unterstriche.
      • Die Zeile muss ohne Umbrüche, Zeilenvorschub oder dergleichen geschrieben werden!
      • Ich habe die Werte "true" und "false" verwendet. Es müsste auch mit "0" bzw. "1" gehen.
    • die automatische Erkennung der Hardware durch pulseaudio habe ich abgeschaltet.

    Mein Aufruf von sudo pactl info sieht dann wie folgt aus:


    Das Echo ist damit bei mir eleminiert. Die Lautstärke kann ich über sudo alsamixer einstellen.


    Wie bereits in meinem vorhergehenden Beitrag beschrieben, habe ich lange gesucht. Ob alles so wirklich richtig ist - mir egal, es läuft. Wenn mir jemand noch etwas erklärt oder eine Korrektur hat - gerne, man wird nicht dümmer.


    Gruß