Hallo Frank
frankl hat geschrieben:
... Ich benutze brutefir jetzt schon ein paar Jahre ohne irgendwelche Probleme. Allerdings benutze ich es immer als Filter (das heißt, lese von Standardeingabe und schreibe auf Standardausgabe) und konnte da nie feststellen, dass es "falsch rechnen könnte". (Hast Du da ein reproduzierbares Beispiel?) Mir scheint zumindest der eigentliche Convolver-Code einfach fertig zu sein und keine Wartung zu brauchen. Wie aus dem Zitat oben klar wird, sind die Ausgabe-Module nach ALSA und JACK kritischer, weil diese Ihre Schnittstelle gelegentlich ändern. Allerdings ist so etwas (oder auch Warnungen neuerer Compiler-Versionen) meist nicht so schwer zu fixen und für mich kein Grund, ein Programm für tot zu erklären. ..."
Brutefir produziert bei mir auf verschiedenen Rechnern reproduzierbar, aber rein zufällig ein eigenartiges Verhalten beim Starten. Brutefir produziert auf allen Kanälen kurz nach dem Starten ein schmerzhaft lautes, furchtbares Kreischen, während die CLI Pegelwerte von bis zu +900dB meldet (!?). Dies, ohne jegliches Signal am Eingang. Zum Glück habe ich keinen Gehörschaden erlitten, aber dafür ist mir einmal ein (nicht ganz billiger) Hochtöner abgeraucht. Deshalb hatte ich so meine Zweifel an der Präzision des Outputs von Brutefir.
Ich habe diese Eigenart Anders Torger gemeldet. Der hatte von diesem Fehler bislang noch nie gehört. Ich habe diese Eigenart aber schon von einem andern Brutefir-Anwender gehört, welcher mit ähnlichen Konfigurationen wie ich arbeitet. Auf Anfrage von Anders Toger hin habe ein bisschen vertiefteres Debugging gemacht und ihm die entsprechenden Resultate gemeldet. Ich möchte Dir meine bisherigen Erkenntnisse nicht vorenthalten:
Meine Konfigurationen sehen z.B. folgendermassen aus:
2 Kanäle in -> 2 Filter -> 10 Filter -> 10 Kanäle out (Stereo-Mehrweglautsprecher mit Über-alles-Korrektur)
oder
2 Kanäle in -> 5 Filter -> Filter-into-2-Kanäle (10 Wege) -> 2 Kanäle out (FLOW-Versuche mittels Brutefir)
In's und Out's gehen über ALSA HW:0, d.h. über die Soundkarte.
Ich habe testweise in einer Schlaufe Brutefir etwas mehr als 1000 Mal gestartet. Falls Brutefir fehlerhaft aufstartete und die CLI einen positiven Wert ausgab, wurde Brutefir sofort gestoppt und neu gestartet (so ist der Schutz nun auch auf meinem Alltags-Heimsystem implementiert). Für den Schleifen-Test wurde Brutefir überdies dann beendet und neu gestartet, nachdem Brutefir 1s lang korrekt gearbeitet hatte.
Bei diesem Test (mit der FLOW-Konfiguration) verhielt sich Brutefir erwartungsgemäss meistens mustergültig, bis auf folgende Ausnahmen (Readout der CLI):
0/2/+967.81 1/0/-128.93 kam einmal vor
0/2/+961.44 1/0/-128.93 kam 8 mal vor
0/751/+48.16 1/0/-128.93 kam 25 mal vor
Eigenartig, dass es bloss drei fehlerhafte Pegel-Varianten gab (+48.16dB, +961.44dB und +967.81dB).
Ein zweiter Test bestand darin, dass Brutefir im Falle eines Fehlers weiter lief, um zu sehen, wie es sich weiter verhielt. Dabei ist z.B. folgendes herausgekommen.
CONSOLE hat geschrieben:
...
...
...
BruteFIR v1.0m (November 2013) (c) Anders Torger
Internal resolution is 64 bit floating point.
SSE2 capability detected -- optimisation enabled.
Creating 4 FFTW plans of size 16384...finished.
Loading 6 coefficient sets...finished.
Dither table size is 882001 bytes.
Generating random numbers...finished.
Realtime priorities are min = 2, usermax = 1, mid = 3 and max = 4.
Estimated CPU clock rate is 1994.985 MHz. CPU count is 2.
Filters in process 0: 0 2 4 6 8
Filters in process 1: 1 3 5 7 9
Warning: not allowed to set realtime priority. Will run with default priority
instead, which is less reliable (underflow may occur).
Fixed I/O-delay is 16384 samples
Audio processing starts now
Welcome to BruteFIR, type "help" for help. > peak: 0/0/-Inf 1/0/-Inf
Welcome to BruteFIR, type "help" for help. > peak: 0/0/-128.93 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/0/-128.93 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/0/-128.93 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/0/-128.93 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/2/+967.77 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/2/+967.77 1/0/-128.93
peak: 0/4/+967.77 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/0/-128.93
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/1/+967.77
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/1/+967.77
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/1/+967.77
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/1/+967.77
peak: 0/4/+967.77 1/1/+967.77
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/1/+967.77
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/1/+967.77
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/1/+967.77
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/1/+967.77
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/1/+967.77
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/1/+967.77
rti: 0.076
Welcome to BruteFIR, type "help" for help. > peak: 0/4/+967.77 1/1/+967.77
...
...
...
// CONSOLE READOUT END //
Dieser Test wurde mit der Mehrwege-Konfiguration gemacht. Eine Schleife dauert ca. 0.1 Sekunde. Wie man sieht, scheint Brutefir offenbar während ca. 0.5s unauffällig zu funktionieren. Danach jedoch kippt zunächst der erste Kanal in besagten Fehler, und nach weiteren ca. 0.5s kippt auch der andere Kanal ins grosse Kreischen.
Ich hoffe sehr, dass Anders Torger den Fehler finden wird.
Simon