Kurzanleitung zu den Utilities "Sound Input" und "Sound Output" ========================================================================== Datei: soundutl\SoundUtilityInfo_01.txt Autor: Wolfgang Buescher (DL4YHF) Stand: 2022-10-17 (ISO-8601-Format: YYYY-MM-DD) Hier zunächst nur die Beschreibung von "SndInput" zum Einlesen von Audiodaten von der Soundkarte (A/D-Wandler). Das Programm soll einen kontinuierlichen Datenstrom von der Soundkarte einlesen, und in möglichst kleinen "Happen" als Datei an ein beliebiges Programm weitergeben, welches die Daten weiterverarbeitet. Das "Sound Input Utility" (SndInput.exe) wird im Folgenden "Produzent" genannt, das weiterverarbeitende Programm "Konsument". Das "Sound Output Utility" (SndOutpt.exe) funktioniert umgekehrt, es frisst Audiodateien und gibt die Abtastwerte mit dem D/A-Wandler der Soundkarte aus. Statt Dezimation erfolgt dann eine Interpolation. Ähnliche tools wie z.B. "SerInput" funktionieren genauso, sie lesen die Audiodaten nur von anderen Quellen ein (z.B. einem externen A/D-Wandler auf PIC-Basis, der an der seriellen Schnitt- stelle angeschlossen wird). Die Firmware für einen derartigen Wandler (zum Anschluss an die serielle Schnittstelle) auf Basis eines PIC-Mikrocontrollers ist auf der Homepage des Autors erhältlich. Die Audio-Utilities wurden ursprünglich in Borland C++Builder V4 geschrieben, sie können allerdings auch mit Dev-C++ übersetzt werden. Die Quelltexte sind für nicht kommerzielle Zwecke vom Autor erhältlich. Prinzip (SndInput) -------------------------------------------------------------------------- 1.) Produzent sammelt Audiodaten in einem RAM-Puffer [ in einem hochpriorisierten Thread, damit nichts verlorengeht ]. 2.) Wann immer möglich, schreibt der Produzent möglichst viele Daten aus dem RAM-Puffer in eine temporäre Datei. 3.) Sobald der Produzent bemerkt, dass die "Audiodaten-Übergabedatei" nicht existiert (weil der Konsument sie aufgefressen hat), benennt er die temporäre Datei um, z.B. von "audio.tmp" nach "audio.dat". [ dies passiert mit einem einzigen Win32-API-Aufruf, um Inkonsistenz zu vermeiden. In dem Moment, wo die Datei umbenannt wird, ist sie bereits GESCHLOSSEN ! ] 4.) Sobald der Konsument bemerkt, dass ihm neues Futter vorgeworfen wurde, öffnet er die Übergabedatei, liest den Inhalt, schließt die Datei. (währenddessen arbeitet der Produzent wieder bei Punkt 1 und 2) Nachgetaner Arbeit (Mahlzeit!) löscht der Konsument die Übergabedatei (z.B. "audio.dat"), wodurch der Produzent früher oder später zu Punkt 3 übergeht. Details: -------------------------------------------------------------------------- Der Produzent pollt im Idealfall alle 100 Millisekunden, ob er eine neue Datei produzieren kann. Wie groß die übergebene Datei werden kann, hängt im Prinzip von der Geschwindigkeit des Konsumenten ab. Um Plattenzugriffe zu minimieren, kann für die Übergabedatei eine RAM-Disk verwendet werden. Dies ist aber oft unnötig, weil das Betriebssystem wohl einen Cache ohne "write-through" verwendet - tnx DF6NM . Kommandozeilenparameter: -------------------------------------------------------------------------- (N = einziffrige ganze Zahl, NNN=mehrziffrige ganze Zahl, das Gleichheitszeichen kann [noch?] weggelassen werden) /dev=N Name des zu verwendenden Audio-Gerätes (nur bei 'SndInput.exe') Fehlt dieser Parameter, verwendet SndInput.exe das Default- Audio-Gerät, entsprechend den Einstellungen in der Systemsteuerung. Diese Namen können unter Windows recht merkwürdig bzw. mehrdeutig sein. Z.B. wurde ein Icom IC-7300 (SDR-Transceiver mit der Emulation einer USB-Soundkarte) in der Windows-System- Steuerung (in der klassischen Ansicht) als "2- USB Audio CODEC" angezeigt (vermutlich, weil ein bereits früher angeschlossener IC-7300 ebenfalls als "USB Audio CODEC" erschien). Um dieses Gerät als Quelle für das Sound-Input-Utility zu verwenden, würde man den Kommandozeilenparameter /dev="2- USB Audio CODEC" verwenden. Wesentlich anwenderfreundlich wäre aber das Umbenennen des Audiogerätes mit der oben gezeigten, nichtssagenden Namen nach z.B. "IC-9700" (bzw. einem eindeutigen 'sprechenden' Namen Ihrer Wahl). Um zu den "klassische" Audio-Einstellungen unter Windows zu gelangen, drücken Sie die Windows-Taste zusammen mit 'R' um den 'Run'-Dialog zu öffnen, geben dort mmsys.cpl ein, und drücken die ENTER-Taste (bzw. "Ok"). Es sollte der klassische Dialog mit dem Titel 'Sound' erscheinen. Wechseln Sie dort auf die Registerkarte 'Aufnahme'. Jedes dort aufgezählte Gerät hat zwei Zeilen mit Namen: Der erste oft mit dem nichtssagenden Bezeichnung 'Mikrofon', der zweite mit einem ebenfalls nicht eindeutigen Namen wie z.B. "Realtek High Definition Audio" oder "USB Audio Codec". Nur der erste Name kann unter 'Eigenschaften' geändert werden. Nach dem Umbenennen kann das Utility dann z.B. per SndInput.exe /dev="IC-9700" /sr=4800 /ch=1 statt per SndInput.exe /dev="2- USB Audio CODEC" /sr=4800 /ch=1 gestartet werden. Das Utility findet das entsprechende Gerät auch dann, wenn der komplette von waveInGetDevCaps() gelieferte Name nicht "IC-9700" sondern z.B. "IC-9700 (2- USB Audio CODEC)" wäre, aber nur /dev="IC-9700" in der Kommandozeile angegeben wird. /sr=NNN sample rate Abtastrate für den ADC (d.h. vor der Dezimation). Übliche Werte sind 5512(5513?), 11025, 22050 oder 44100; bei manchen Karten auch 48000 oder gar 96000 samples/Sekunde. Defaulteinstellung: /sr=11025 /dec=NNN Dezimation der Abtastrate (und Bandbreite) Optionale Verringerung der Abtastrate in den exportierten Daten. Wird im Audio-Bereich auch "Downsampling" genannt, beim Tool zur Ansteuerung des DAC's entsprechend "Upsamling". Defaulteinstellung: /dec=1 (d.h. keine Dezimation). Programmintern wird dazu eine Kaskaden-Anordnung verwendet, bei der jede Stufe aus einem Halbbandfilter oder "Drittel- bandfilter" besteht, mit der halben oder drittel Abtast- frequenz der vorhergehenden Stufe. Maximal 12 Stufen sind möglich, damit kann die Abtastrate des Ausgangs auf 1/(2^12) bzw 1/(3^12) der ADC-Abtastrate verringert werden (natürlich unter entsprechendem Verlust an Bandbreite). Die Flankensteilheit der Halbbandfilter ist etwas besser als die der "Drittelbandfilter", darum -wenns geht- nur Zweierpotenzen verwenden: NNN=2,4,8,..4096. Die theoretische Bandbreite ist sr / (2*dec), praktisch ist wegen der begrenzten Flankensteilheit der Anti-Alias-Filter aber schon vorher Schluß, darum die Einschränkung: Genaue Amplitudenmessung nur bis f = 0.75 * sr/(2*dec) möglich, z.B. /sr=11025 /dec=256 -> Bandbreite ~ 16 Hz . Hinweis: Bei schmalbandigen Signalen bietet sich der Export im Fliesskommaformat an, bei Integerzahlen muß -je nach Eingangsspektrum- mit dem Verstärkungs- faktor experimentiert werden um keine Auflösung zu verschenken ! Defaulteinstellung: /dec=1 (no decimation, input rate = output rate) /fc=NN.NNN center frequency for frequency conversion with COMPLEX output /fr=NN.NNN center frequency for frequency conversion with REAL output Optionale Multiplikation des Eingangssignals mit einem komplexen Oszillatorsignal ("NCO" mit zwei um 90° phasenver- schobenen Ausgängen). Defaulteinstellung: /fc=0 (d.h. keine Frequenzverschiebung, reell-wertiger Output). Nur nutzbar bzw. sinnvoll im Zusammenhang mit der Sampleraten-Dezimation ("/dec=NN", NN >= 4 ) . Das Ergebnis ist ein komplexes Ausgangssignal (analytisches Signal, "I/Q"-Signal). Einsatz wenn im EINGANGSSIGNAL nur die Frequenzen in der "Nähe" von fc von interessant sind (fc +- bw/2, entsprechend der Bandbreite des AUSGANGSSIGNALS). Mit der Option "/fc" (komplex), wird ein Mono-Signal am Eingang in ein komplexes Signal mit zwei Komponenten umgewandelt, ein "Stereo-Signal" besteht nach der komplexen Multiplikation sogar aus vier Komponenten pro Abtastpunkt: I "links", Q "links", I "rechts", Q "rechts". (I=in-phase channel, Q=quadrature channel) Beispiel für Frequenzumsetzung mit KOMPLEXEM Ausgangssignal: SndInput.exe /sr=11025 /fc=2000 /dec=4 Audio input = 11025 samples/second, Mittenfrequenz (fc) = 2000 Hz Dezimationsverhältnis (dec) = 4 -> maximale Bandbreite bw = 11025 / 4 = 2756 Hz (COMPLEX!) -> Durchlassbereich (Band)= fc +/- bw/2 = 622 Hz .. 3378 Hz Die Option "/fr" erzeugt stattdessem REELLE Ausgangswerte, bei der gleichen Dezimation entsteht im Vergleich mit der KOMPLEXEN Variante nur die halbe Ausgangsbandbreite (aber auch nur das halbe Datenvolumen). Beispiel für Frequenzumsetzung mit REELLEM Ausgangssignal: SndInput.exe /sr=11025 /fr=2000 /dec=4 Audio input = 11025 samples/second, Mittenfrequenz (fr) = 2000 Hz Dezimationsverhältnis (dec) = 4 -> maximale Bandbreite bw = 11025 / (4*2) = 1378 Hz -> Durchlassbereich (Band)= fr +/- bw/2 = 1310 Hz .. 2689 Hz Diese Parameter zeigt auch das Utility an, wenn der "Info"-Button angeklickt wird. Hinweise: - Die Mittenfrequenz kann während der Laufzeit geändert werden, durch Eingabe in das Edit-Feld "fc" bzw "fr". Die "Betriebsart" kann so allerdings nicht geändert werden ! - Die Option "/fr" gibt's z.Z. nur für SoundInput, aber (noch) nicht für SoundOutput ! /ch=N channels /ch1 = Ein Kanal, "mono" /ch2 = Zwei Kanäle, "stereo". Defaulteinstellung: /dt=1 (d.h. einkanalige Aufnahme) /dt=N data type definiert den Grunddatentyp der exportierten Audio-Samples 1= 8 bit integer (0..255, like in 8-bit-WAV-files ) 2= 16 bit integer (+-32767, like in 16-bit-WAV-files ) 3= 32 bit integer (only rarely supported...) 4= 64 bit integer (possibly never supported / "reserved for the future") 5= 32 bit float ("single precision") 6= 64 bit float ("double precision") Die 'floating point'-Typen sind erforderlich bei Dezimation, denn andernfalls (bei Integer-Typen) würde der 'decimation gain' durch den fehlenden Nachkomma-Anteil z.g.T. verloren gehen. Defaulteinstellung: /dt=2 (d.h. 16-Bit-Integerwerte) /gain=NN.NNN gain (factor!!) Alle Samples werden vor dem Abspeichern in einer Datei mit diesem optionalen Faktor multipliziert. Nur sinnvoll, wenn z.B. dezimierte Samples als Integerwerte abgespeichert werden sollen ohne dass zuviel "Auflösung" verloren geht. Defaulteinstellung: /gain=1 (d.h. keine Verstaerkung) Achtung: Wenn die exportierten Daten als Integerwerte gespeichert werden, kann es bei Faktoren >1 zu einem "Clip-Effekt" kommen, d.h. bei 8-Bit-Integer werden Werte <0 und >255 begrenzt. /dc_reject=N Definiert ob DC-Anteile durch die Software unterdrueckt werden sollen (manche Soundkarten liefern einen starken DC-Anteil, z.B. Ausgangswert -700 obwohl der Line-In-Eingang nur AC-gekoppelt ist). Defaulteinstellung: /dc_reject=1 (d.h. DC-Unterdrueckung AKTIV) /of="" output filename (fuer das Audio-INPUT-Utility) /fn="" in- or output filename (fuer ALLE Audio-Utilities) z.B. /of="MyAudioStream.dat" Der Default-Name für das Ausgabefile ist "audio.dat" . ( Der Name des temporären Files ergibt sich aus dem Ausgabefile, mit der Erweiterung ".tmp" ). Wenn der Dateiname nicht -wie leider unter Windoze üblich- durch Leerzeichen zerstückelt ist, können die Anführungszeichen weggelassen werden, z.B. /ofMyAudioStream.dat . Position (directory) des Ausgabefiles: Wenn ein kompletter Pfad für das Ausgabefile spezifiziert wird, ist eigentlich alles klar, wie in diesem Beispiel: C:\CBproj\SoundUtl\SndInput.exe /of=C:\Spectrum\audio.dat /ch=1 Wird kein Pfad angegeben, wird die Ausgabedatei in das "AKTUELLE" Directory geschrieben. Dies ist NICHT NOTWENDIGERWEISE das Ver- zeichnis in dem das SoundInput-Tool lokalisiert ist ! Wenn Sie das Tool wie im folgenden Beispiel aus einem anderen "aktuellen" Verzeichnis heraus starten (mit komplettem Pfad zur ausführbaren Datei)... C:\CBproj\SoundUtl\SndInput.exe /ch=1 wobei das "aktuelle Verzeichnis" moglicherweise C:\Spectrum\ ist, dann wird das von SndInput produzierte File nach C:\Spectrum\audio.dat geschrieben, denn dies bleibt weiterhin das "aktuelle" Verzeichnis. Die Ausgabedatei wird NICHT automatisch in das Verzeichnis von SndInput.exe geschrieben ! /chunk=NNNN audio processing chunk size Definiert die "Portionsgröße" mit der die Audiodaten vom A/D-Wandler abgeholt werden bzw. zum D/A-Wandler gesendet werden. Je kleiner dieser Wert, desto geringer ist die Verzögerungszeit zwischen Einlesen der Werte und der Ausgabe; damit steigt aller- dings auch das Risiko daß durch Taskwechsel und andere Unter- brechungen mal etwas verloren geht. Defaulteinstellung: /chunk=2048 Bei schnellen Rechnern funktioniert sogar /chunk=256 bei 11025 samples/sec, dies macht allerdings wenig Sinn weil die Applikation nur alle 100 Millisekunden testet ob ein neuer Block aus dem Puffer in eine Datei übertragen werden kann (bzw. umgekehrt beim DAC) ! /minsize=NNNNN min size of output file Definiert die Mindestgröße der Ausgabedatei. Default: /minsize=1K NNNN ohne Zusatz ist eine Angabe in BYTE, mit angehängten "k" oder "K" in KByte (1K = 1024 byte). Siehe auch: Hinweise zu "/chunk" ! /maxsize=NNNNN max size of output file Stellt die maximal zulaessige Groesse der Ausgabedatei in BYTE oder KBYTE ein (1 KBYTE = 1024 Byte). Default: /maxsize=64K Achtung: Dieser Defaultwert kann bei 48000 samples/sec * 2 Kanäle * 64-Bit-Floats ETWAS zu niedrig sein, denn dann werden etwa 768 KByte/sec produziert ! /signed=N Definiert ob der externe A/D-Wandler an eine vorzeichen- behaftete Quelle angeschlossen ist (mit negativen und positiven Spannungen). /signed=0 bedeutet "ohne Vorzeichen", Wertebereich 0...32767. /signed=1 bedeutet "mit Vorzeichen", Bereich -32768...+32767. (Hinweis: Der A/D-Wandler im PIC12F675 kann nur Spannungen im Bereich 0...+5V verarbeiten, "von Natur aus" also nur vorzeichenlose Signale. Es könnte allerdings ein OPAMP zur Nullpunktverschiebung vorgeschaltet sein. In diesem Fall die Option /signed=1 verwenden). Defaults: /signed=0 bei SerInput.exe (ADC an COM1, COM2) /signed=1 bei SndInput.exe (Soundcard) /show=N initial window 'show' state Definiert wie das Fenster des Utilities beim Programmstart dargestellt wird und wer zum "aktuellen" Fenster wird. /show=0 : Minimiertes Fenster, wird nicht aktiviert, d.h. der Aufrufer bleibt aktiv und behaelt den Eingabefokus. Win-API-Funktion ShowWindow(SW_SHOWMINNOACTIVE). /show=1 : Normales Fenster, wird aktiviert. Win-API-Funktion ShowWindow(SW_SHOWNORMAL). /show=2 : Normales Fenster, wird aber nicht aktiviert . Win-API-Funktion ShowWindow(SW_SHOWNA). Default: /show=0 (d.h. Fenster wird beim Start minimiert und *NICHT* aktiviert !) /display=N Definition der im Anzeigefenster des Tools gezeigten Werte /display=0 Anzeige der Zeit und Anzahl eingelesener Abtastwerte /display=1 Numerische Anzeige der momentanen Abtastwerte Default: /display=0 /testsig=N.NNN produce test signal Erzeugt ein Testsignal (Sinus) mit der angegebenen Frequenz in Hertz. Dient zum Testen der ununterbrochenen Wiedergabe und zur Fehlersuche bei Übertragungsproblemen zwischen Einlesen und Weiterverarbeitung. Beim "Sound Input Tool" wird die Sinusschwingung in die produzierte Datei geschrieben, beim "Sound Output Tool" direkt in Echtzeit per D/A-Wandler ausgegeben. Die Amplitude des Testsignals liegt 6 dB unter der maximalen Aussteuerung (+-16384). Das Testsignal wird zu den Audiosamples vom A/D-Wandler addiert, darum Vorsicht mit Übersteuerung ! Hinweis: Die Frequenz des Testsignals kann während der Laufzeit durch Eingabe in ein Editierfeld geändert werden. /port=XXXX define interface port name Definiert, über welchen Port die Daten von einem externen A/D- Wandler eingelesen werden sollen. Funktioniert nur bei SerInput.exe und ähnlichen Tools. Beim Einlese-Tool für die Soundkarte bedeutungslos. Default: /port=COM1 /fs fool shell Sonderoption zum Aufruf des Utilities aus QuickBasic (etc) mit dem SHELL-Befehl, der unter Windows XP (etc?) wartet, bis das aufgerufene Programm beendet wurde. Mit dieser Option kann der SHELL-Befehl ausgetrickst werden. Genaue Funktion und Verwendung: Siehe unten, "Programmstart". /quit Dient zum Beenden des Utilities nach Start durch ein anderes Programm. Intern sendet die zweite gestartete Instanz eine Windows-Message an die erste gestartete Instanz, in der die Kommandozeile "durchgereicht" wird. Letztendlich beenden sich BEIDE Instanzen dann selbst. Weitere Kommandozeilenparameter sind noch in Vorbereitung, z.B. : - Einsatz des Programms als "normaler Audiorecorder" ohne Zeitlimit Anzeigefenster --------------------------------------------------- Dient mehr oder weniger nur zu Testzwecken, denn "eigentlich" soll das Programm nur still und unauffällig im Hintergrund laufen. Die im Folgenden aufgeführten Werte werden daher möglicherweise in der aktuellen Version nicht mehr angezeigt (sie dienten dann nur zu Testzwecken für die Programm-Entwicklung): "TimerTicks" sollte im 100ms-Takt inkrementiert werden, wenn unkooperative Programme dem Utility nicht zuviel Rechenzeit entziehen. "Samples" gibt an, wie viele Abtastwerte seit Programmstart vom ADC erzeugt wurden, und wie viele davon weiterverarbeitet wurden. "TempFile" zeigt, wie groß das temporäre File (welches irgendwann zum Futter für den Konsumenten wird) schon ist. Um einige Parameter zu ändern ohne die Echtzeit-Verarbeitung zu stoppen, dienen die folgenden Editierfelder im Fenster des Utilities: "fr/Hz" oder "fc/Hz": Editierfeld für die Mittenfrequenz, falls die Frequenzumsetzung aktiv ist. Siehe Beschreibung der Kommandos "/fc" bzw "/fr" . "ft/Hz" Ändert die Frequenz des "Testsignals". Siehe Beschreibung des Kommandos "/testsig". Am rechten Fensterrand werden mehrere Balkendiagramme angezeigt, darunter ein Puffer-Füllstands-Anzeiger und eine einfache Aussteuerungsanzeige. Der angzeigte Pegel (in PROZENT vom Punkt der Übersteuerung) sollte unter 70 % liegen. Andernfalls kann per "Gain"-Button das Programm "sndvol32" zum Einstellen der Aufnahmepegel gestartet werden. Info-Fenster --------------------------------------------------- Zeigt Programmversion, Inhalt der Kommandozeile und ein paar weitere Parameter an. Installation --------------------------------------------------- Sollte nicht nötig sein. Das Programm verwendet nur direkte WIN-API-Calls und benötigt keine "speziellen" DLLs. Quelltexte --------------------------------------------------- Die Quelltexte wurden ursprünglich mit Borland C++Builder V4 compiliert, sie können allerdings -zum größten Teil- auch mit DevCpp V4.9.9.2 compiliert und gelinkt werden (V 4.9.9.2 scheint leider die letzte Version dieses sehr gut gemachten freien C++-Entwicklungssystems zu sein). Die Quelltexte der Sound-Utilities sind auf Wunsch beim Autor erhältlich. Zum Betrieb der Utilities werden sie natürlich nicht benötigt. Programmstart und Beenden --------------------------------------------------- Zum Starten entweder aus einem eigenen Programm aufrufen (mit Parametern), oder eine Verknüpfung erstellen in der die Kommandozeile mit enthalten ist. Es ist auch möglich, das Utility durch einen erneuten Aufruf mit der Option "/quit" wieder zu beenden. Für eine sehr kurze Zeit läuft das Programm dann zwar in zwei Instanzen, die zweite Instanz wird aber sehr schnell die "Anwesenheit" der ersten Instanz erkennen und reicht dann seine Kommandozeile (mit dem "/quit"- Befehl) an die erste Instanz weiter, und zwar mit Hilfe einer WM_COPYDATA- Message. Letztendlich beenden sich dann beide Instanzen selbsttaetig. Die "Fool Shell"-Option (/fs) - - - - - - - - - - - - - - - - - - - - - - - - - - Beim Aufruf des Programmes aus QuickBasic unter Windoze XP zeigte sich das Problem, dass das Programm im SHELL-Kommando "hing", bis das SoundInput-Utility beendet war. Um dieses Problem zu umgehen, kann ALS ERSTER PARAMETER IN DER KOMMANDOZEILE der Schalter "/fs" stehen (fs wie "fool [the] shell"). Dieser bewirkt, dass das Utility sich selbst nochmal startet, wobei der Rest der Kommandozeile hinter dem "/fs" an die zweite Instanz weitergegeben wird. Unmittelbar danach beendet sich die erste Instanz selbst. Der SHELL-Befehl kriegt von diesem Betrug nichts mit, und arbeitet wie gewünscht weiter. Beispiel (Aufruf aus QuickBasic-Programm) : SHELL "sndinput.exe /fs /dt=1 /sr=5512 /ch=2 /maxsize=32k" Das Utility analysiert die Kommandozeile von links nach rechts. Die "/fs"-Option wird erkannt, und automatisch eine neue Kommandozeile zusammengesetzt (mit dem kompletten Pfad zum EXE-File und dem Rest der Kommandozeile): c:\QuickBasic\SndInput.exe /dt=1 /sr=5512 /ch=2 /maxsize=32k Dieses Kommando wird mit Hilfe einer Win32-API-Funktion gestartet, die -im Gegensatz zum SHELL-Befehl- sofort zurückkehrt. Die zuerst gestartete Instanz terminiert sich danach sofort selbst, damit das aufrufende BASIC-Programm (o.ae.) weiterlaeuft. Mit einer leichten Modifikation konnte die "fool shell"-Option auch unter Windows 8.1 in der Windows-eigenen Shell ("Konsolenfenster") wieder 'zum Laufen' gebracht werden, so dass auch der Aufruf aus 'Batch-Dateien' nicht mehr dazu führt, dass Windows (8.1 & Co?) nicht mehr wartet, bis sich das aus dem Batch gestartete Programm (in diesem Fall SndInout.exe oder SndOutpt.exe) selbst beendet hat. 73 und viel Erfolg bei eigenen Experimenten mit 'DSP per Soundkarte', Wolfgang Buescher (DL4YHF@qsl.net) .