Mal wieder etwas Langeweile, deswegen habe ich mich mal daran gemacht, meine damalige ATtiny85-Lösung Beitrag "Audio Spektrum Analyzer mit ATtiny85" für einen PiPico umzusetzen. Natürlich erheblich aufgebohrt, da der Pico wesentlich mehr Rechenleistung zu bieten hat als der kleine Tiny. Deswegen brauchte ich auch nicht alle Tricks zu verwenden, die ich damals beim Tiny angewandt hatte. Die gesamte Signalverarbeitung läuft jetzt mit 32Bit (in verschiedenen Festkommaformaten, denn eine FPU hat der PiPico nicht). Es gibt jetzt statt 10 (bzw. 11) Bins im Oktavabstand 19 im "Halboktavabstand". Zwischen zwei benachbarten Bins unterscheidet sich also die Mittenfrequenz nicht mehr um den Faktor 2, sondern um den Faktor sqrt(2). Dementsprechend mussten die Halbbandfilter steiler werden und sind jetzt 4.er Ordnung statt 3.er wie beim Original. Außerdem kann das Teil jetzt Stereo, hat also zwei (identische) Kanäle zu bieten. Die Ausgabe erfolgt nicht mehr über ein WS2812-Array, sondern über ein günstiges ILI9341-SPI-Display (in meinem Fall 3,8") und zwar mit 60Hz Refresh (statt 16,7Hz im Original). Gleich geblieben ist die Eigenschaft, dass kein Framebuffer im Controller benötigt wird. Denn damals wie heute hätte der RAM dafür nicht gereicht. Die Signalverarbeitung erfordert gut 80% der Rechenleistung eines PiPico Kerns und läuft deshalb komplett auf Core1. Die Aufbereitung der Daten für das Display läuft auf Core0 und kann bei besonders ungünstigen Audiodaten (Extremfall: alle Bins gleichzeitig von 0 auf Max) gelegentlich mal aus der Echtzeit geraten. Macht keinen Schlimmen, der Code ist darauf vorbereitet. Es wird maximal ein kleiner Ruckler in den Animationen sichtbar. Die Überlastsituation kann man sich auf Wunsch mit der LED des Pico anzeigen lassen. Mit realer Musik angesteuert habe ich sie noch nie aufblitzen sehen. Das Analog-Frontend ist wieder bewusst primitiv gehalten, Anti- Aliasfilter gibt's also auch hier wieder nicht. Es ist dafür ausgelegt, Eingangspegel bis +2dBV brauchbar an die ADC des Pico zu liefern. Ach so: diesmal gibt's auch Quelltexte. Sind für das offizielle PiPico-C/C++-SDK geschrieben. Eine Helper-Anwendung (DotNet4.8.1) zur Herstellung eigener Farbschemata für die Bins habe ich auch gleich beigelegt. Der Screenshot zeigt das tatsächlich im Code verwendete Design (presenter.c->barcolors[]). Der Export-Button legt direkt den C-Quelltext in die Zwischenablage. Sorry übrigens für die Qualität des Videos und des daraus entnommenen Screenshot. Die Kamera hatte zwar Makrofunktion, aber erhebliche Probleme mit der Tiefenschärfe und Farbtreue. Das Displaybild sieht also in der Realität deutlich besser aus als hier gezeigt.
Habe ich das richtig in Erinnerung, dass der Goertzel nur ein Amplitudenspektrum liefert, keine Phasen wie die Fourier-Analyse? https://de.wikipedia.org/wiki/Goertzel-Algorithmus Normalerweise bracht man die ja nicht, ist also kein Problem.
Christoph db1uq K. schrieb: > Habe ich das richtig in Erinnerung, dass der Goertzel nur ein > Amplitudenspektrum liefert, keine Phasen wie die Fourier-Analyse? Nein. Goertzel kann auch Phaseninfos liefern. Wird aber in dieser Anwendung nicht benötigt und deshalb werden etwas vereinfachte Goertzels verwendet, die halt nur die Amplitdude liefern können.
Mir ist gerade aufgefallen, dass ich im Analog-Frontend vergessen habe, die beiden Elkos mit Werten auszustatten. Also: 10µF/6.3V. Dürfen aber auch größer sein, kommt nicht so genau drauf an.
Nettes Projekt. Der PicoAnalyzerDesigner funktioniert unter Win11 noch nicht richtig (keine Farben) 😉.
:
Bearbeitet durch User
Schön wäre es, wenn man kein Windows bräuchte, sondern einfach eine HTML-Seite, die auf jedem Rechner läuft. Was genau muss sie denn produzieren?
Udo K. schrieb: > Nettes Projekt. Der PicoAnalyzerDesigner funktioniert unter Win11 noch > nicht richtig (keine Farben) 😉. Das Programm dient vor allem dazu, dass du die Farben selbst nach deinen Wünschen festlegen kannst. Einfach mal in die Ankerpunkte klicken (kleines Rechteck bzw. kleiner Kreis) rechts in der Vorschau.
Christoph M. schrieb: > Schön wäre es, wenn man kein Windows bräuchte, sondern einfach eine > HTML-Seite, die auf jedem Rechner läuft. > Was genau muss sie denn produzieren? Na sowas, wie du in der Array-Definition presenter.c->barcolors sehen kannst. static const uint16_t barcolors[ITEM_WIDTH * BAR_HEIGHT] { //ITEM_WIDTH * BAR_HEIGHT kommagetrennte Zahlen };
Ob S. schrieb: > Udo K. schrieb: >> Nettes Projekt. Der PicoAnalyzerDesigner funktioniert unter Win11 noch >> nicht richtig (keine Farben) 😉. > > Das Programm dient vor allem dazu, dass du die Farben selbst nach deinen > Wünschen festlegen kannst. Einfach mal in die Ankerpunkte klicken > (kleines Rechteck bzw. kleiner Kreis) rechts in der Vorschau. Tut halt nicht... Ich habe die Werte nach deiner Vorlage ausgefüllt...
Udo K. schrieb: > Ob S. schrieb: >> Udo K. schrieb: >>> Nettes Projekt. Der PicoAnalyzerDesigner funktioniert unter Win11 noch >>> nicht richtig (keine Farben) 😉. >> >> Das Programm dient vor allem dazu, dass du die Farben selbst nach deinen >> Wünschen festlegen kannst. Einfach mal in die Ankerpunkte klicken >> (kleines Rechteck bzw. kleiner Kreis) rechts in der Vorschau. > > Tut halt nicht... Ich habe die Werte nach deiner Vorlage ausgefüllt... Hmmm, seltsam. Die Skalenstriche erscheinen aber. Und die werden mit denselben Methoden gezeichnet wie die eigentliche Bar. Export-Button ist ja aktiv, benutz den mal und schau dir das Ergebnis in einem Editor an. Sind dann wenigstens da die Farben zu sehen? Einfach mal nur die erste Zeile posten, das reicht schon, um zu sehen, ob da auch alles grau ist oder bunt.
Udo K. schrieb: > Ob S. schrieb: >> Udo K. schrieb: >>> Nettes Projekt. Der PicoAnalyzerDesigner funktioniert unter Win11 noch >>> nicht richtig (keine Farben) 😉. Ich hab's gerade unter Win11 ausprobiert und sogar auf Linux(Mono). Geht überall.
Udo K. schrieb: > In der ersten Zeile sind alle Werte 0xFFFF. Hmm, also weiss, sollte aber rot sein. Kann ich nicht erklären. > OS ist ein aktuelles Win11. Ich hab's getestet auf Win11Pro 25H2 Build 26200.8457. Kein Problem, wird hübsch bunt. Mein Entwicklungsrechner ist Win10 Pro 22H2 Build 19045.6466. Auch kein Problem. Und, wie gesagt: funktioniert auch unter Mono. Linux Mint 22 "Wilma" mit Mate-Desktop. Das Mono ist allerdings ein wenig aufgebohrt gegenüber der Distribution. Die haben VB rausgeworfen (warum auch immer), ich hab's manuell wieder reingepflanzt, weil ich halt meistens in VB programmiere.
Woran es liegt weiss ich auch nicht. Ich werde es bei Gelegenheit auf einem anderen Rechner probieren. Ist aber nicht super wichtig. Danke noch mal für das Projekt.
Solche zunächst unerklärlichen Unterschiede liegen manchmal an den Region- oder Spracheinstellungen des Betriebssystems, wegen "." gegenüber "," bei der Konvertierung von Fließkommazahlen. Keine Ahnung, ob das Programm überhaupt solche verwendet.
Udo K. schrieb: > Könnte aber sein, ich habe "." für Fließkommazahlen eingestellt. Könnte tatsächlich was damit zu tun haben. Fließkommazahlen werden nur an einer Stelle verwenden, der Gammawert für die Berechnung der Farbverläufe. Einfach mal "0.5" anstatt "0,5" eingeben und schauen, was dann passiert.
Ob S. schrieb: > Einfach mal "0.5" anstatt "0,5" eingeben und schauen, was dann passiert. Ergänzend noch: Eingaben in die Textfelder müssen mit der Enter/Return-Taste abgeschlossen werden, um übernommen zu werden.
Ob S. schrieb: >> Einfach mal "0.5" anstatt "0,5" eingeben und schauen, was dann passiert. > > Ergänzend noch: Eingaben in die Textfelder müssen mit der > Enter/Return-Taste abgeschlossen werden, um übernommen zu werden. Das wars, mit 0.5 geht es :-). Ich habe mich auch gewundert warum die Werte nicht richtig übernommen werden, es braucht ein Return :-)
Udo K. schrieb: > Das wars, mit 0.5 geht es :-). Tja, Double.Parse hält leider auch dann "0,5" für einen gültigen Wert, wenn "." als Dezimaltrenner konfiguriert ist. Wäre es anders, hätte es wenigstens eine Fehlermeldung gegeben. So aber wird das Komma als Tausender-Trennzeichen interpretiert. Letztlich ergibt sich also ein Gamma-Wert von 500.0. Gültig, aber führt offensichtlich leider irgendwie dazu, dass aus jeder Farbe (evtl. ausser schwarz) bei der Berechnung weiss wird. > es braucht ein Return Ja, an dieser Stelle sollte eigentlich mal eine Plausibilitätsprüfung eingebaut werden. Die hätte z.B. sinnlos niedrige oder höhe Gammawerte bemeckern können. Aber leider war der Programmierer zu faul dazu, diese Parameterprüfungen noch einzubauen...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.


