Tschätschipiti-VBA : Töne mit Excel ausgeben

OP Persönliche Seite #8087894
Lesenswert?

In Anlehnung an den Artikel Beitrag "Tschätschipiti-VHDL" wo ich über die Qualität des VHDLs bei Filtererzeugung schreibe, hier nun ein Projekt zum Thema VBA.

Wie ich dort bereits beschrieb, kriegt die CGPT am Ende eine Lösung hin, die aber nicht optimiert ist, weil sie nicht gut genug ins Detail getrieben wurde und VHDL offenbar noch nicht gut ausgebaut ist. Da SW-Entwicklung aber prinzipiell linearer funktioniert, habe ich das ausprobieren wollen und mir etwas rausgesucht.

Worum geht es:

Ich habe ein Planungs-Excel für Wellenformen und zyklische Granular-loops, das mir PCM-Daten erzeugt, die ich direkt anhören möchte, ohne sie erst in einen Synthie überspielen zu müssen. Nur per Gehör ist die Richtigkeit vorab zu überprüfen, besonders bei den BLIT-Wellen.

Dazu hatte ich mir mal mit VBA ein Macro-Set aufgebaut, mit dem man Töne an die Soundkarte schicken kann. Das funktionierte nach einigen Klimmzügen auch gut. Es lief auf dem damaligen Win XP und ließ sich auch nach einigen Änderungen auf Win 7 betreiben. Ich würde sagen, daß ich damals wenigsten 6h+4h investiert habe, aufbauend auf bereits guten VBA- und Visual Basic Kenntnissen. Aufgrund verschiedener Änderungen in Excel und dem Umstieg auf Win10 lief zum Schluss weder das VBA- noch die dahinter angesprochene Windows-API korrekt. Es herrschte also Totenstille. Versuche, es anzupassen verliefen erfolglos, weil ich zwar weiß, was sich an Win10 geändert hat (ein W10 Visual CPP Programm tönt z.B. bestens!) aber es gibt beim Excel / VBA und der Schnittstelle noch irgendwas, das nicht zu finden war.

Habe es dann gelassen und kopiere seither die Daten manuell in einen Player, der es übersetzt. Das Windowsprogramm holt sich die Daten und spielt sie selber ab. Im Weiteren spiele ich die Daten hochfrequent über die Analog Discovery ab.

Nun kam ein neuer Versuch es mit Excel zu machen!


Spoiler: Es hat gedauert, aber am Ende funktioniert! Und: Beide Seiten haben was gelernt!


OP Persönliche Seite #8087895
Lesenswert?

Hier mein Protokoll und Analyse:

Aufgrund des gestrigen Artikels https://www.mikrocontroller.net/news/claude-code-trifft-avr-assembler-vom-chip-in-den-browser-mit-einem-prompt

hatte ich mich inspirieren lassen, selbst einmal ein altes Projekt aufarbeiten zu lassen, wo ich aus Zeitgründen und mangels Druck nicht weitergearbeitet hatte. Ich habe dabei auch gezielt die kostenlose Version von CGPT befragt, weil Vielen nur die zur Verfügung steht.

Ich habe nun die Anforderung was ich machen will dem Tschätschi übergeben und er/sie/es hat mir sofort vorgeschlagen das mit VBA zu machen und auch erklärt, wie es bei Win7 und Win10 gehen müsste.

Es wurden dann Testprogramme gemacht, die auch immer ein bischen funktionierten, am Ende kam dann ein Knack, ein Ton und schließlich der Sound. Auch die Soundkarten im PC werden richtig erkannt. CGPT bietet auch direkt an zu erklären, wie man das per Knopf aus Excel heraus anklicken kann, falls das einer nicht weiß. Anders als die Windowshilfe selber, weiß CGPT auch, wo und wie man die Entwickler-tools dafür auf den Desktop bekommt :-)

Kurz und knapp, nach etwa 1h und rumprobieren hatte ich ein VBA, das in Win7 lief. Es sieht etwas anders aus, als meines, macht gewissen Dinge abstrakter per Initialisierung und Variablen, das es gut anpassbar ist.

Ich konnte es z.B: selber auf 96kHz bringen, nachdem CGPT es selber nicht geschafft hat. Auch musste ich erklären, wie die Soundkarten anzusprechen sind, weil da nicht alle alle Formate können. CGPT will das durch probieren und stückweises Herantasten ausprobieren. Ich habe das dann für alle vorgegeben und es lief.

Zwischenzeitlich wollte CGPT Testtöne generieren und bat mich die Audiodaten im Excel vorzubreiten. Allerdings implementierte er einen Sinuston über die volle Periode. Was ist dabei der Fehler?

Ich ließ es ihn selber rausfinden indem ich darauf beharrte, das nichts kommt. Erst am Ende des Versuchs kam er drauf, dass die Frequenz zu gering ist und man gar nichts hören kann (und auch nichts sehen !) weil die Audiokarte keine 1Hz überträgt. Das hatte er dann gelernt und baute ab dann nur noch files, die einen hörbaren Testton generieren.

Was nicht ging, war Win10! Da habe ich geholfen und darauf hingewiesen, daß Win10 ein neues Treibersystem und Behandlung mittels WASAPI verwendet und die Win7-Schnittstelle ausläuft. Und blubbs: Sofort hatte er binnen Sekunden das auch kapiert und bestätigte es. Daraufhin kam dann ein neuer Code, der aber erst mal wieder nicht lief, weil er es mit dem Buffer kopieren nicht hinbekam. Dann hat er irgendwas geändert, was ich nicht mehr genau protokolliert habe und danach kam wieder ein Ton.

Machen wir es kurz, nach insgesamt 10 Lern- und Diskussionsschleifen hat er/sie/es dann mit meiner Hilfe hinbekommen, dann in der Tat einen Loop des Samples zu erzeugen und abzuspielen.

Erfolg!

Auffällig ist, dass er zwischen zwei Testsessions gerne auch mal mit "ich möchte auch hier noch etwas ändern" hochkommt und nicht am aktuellen Problem arbeitet, sondern den Code von vorher ohne Not! noch weiter verändert. Es schaut aus, als würde er weiter "nachdenken", während ich teste. Das dauert nämlich, weil ich den Code händisch ins VBA kopieren muss und dann erst das Excel starten kann. Zudem braucht das Übertragen des Buffers Zeit.

Bisweilen macht er durch das intuitive Ändern auch die Funktion wieder kaputt, weil er etwas Falsches ausprobiert, kam aber am Ende mit einer Idee rüber, wie man den Buffer besser kopieren kann. Das führte dann auch dazu, daß die jetzige Funktion die ich durch den CGBT habe, schneller reagiert, als meine. Das muss man zugeben. Allerdings war es vorher kein Problem, weil die Mimik eine andere war und ich kürzere Samples hatte, wo das nicht auffiel.

Wo er wieder Hilfe brauchte, war das Thema statische oder dynamische Samplelänge. Das versteht er funktionell nicht.

Fazit: CGPT durchsucht in Windesweile allemöglichen Quellen und sortiert auch oft was Passendes heraus. Das könnte man mit Google selber nie so schnell! Laut der Einblendungen schaut er oft bei Microsoft vorbei und hat dort offenbar auch das mit der Buffergeschichte gefunden. durch das stückweise Vorkämpfen und Ausprobieren nähert er sich unweigerlich dem Ziel, wenn auch mit einigen Extraschleifen.

Lustig ist, dass er mich immer wieder bestätigt, daß es "eine gute Idee ist", etwas so oder so zumachen, wenn ich ihm sage, was er von den Vorschlägen nehmen soll und was nicht und auch warum nicht. Z.B. musste ich ihm die Sammpleanpassung verbieten, weil sich dann falsche Tonhöhen ergäben. Auch das Resamplen was die Meisten in solchen Fällen tun, wäre nachteilig bis falsch. Er kapiert das System der Granularsynthese nicht. Meine Begründung hat er aber als gut und richtig eingestuft. Auch ein fadeout, das ich angefragt habe, hat er hinbekommen und am Ende ebenfalls als "sinnvoll" deklariert.

Man hat das Gefühl, dass da einer mitdenkt und lernt! Er versteht es aber nur in einer abstrakten Weise - nicht funktionell. Er sieht auch nicht die impliziten Zusammenhänge, wenn man sie ihm nicht als Randbedingung mitgibt.

Das ist auch irgendwo logisch: Was nicht eingegrenzt ist, kann er nicht sicher auswählen. Es kommt daher umsomehr drauf an, ihm alles mitzugeben, während ein echter Kollege mit viel weniger auskommen, da er sich seine eigenen Gedanken macht und fehlende Vorgaben vervollständigt. Der Chatter versteht das Problem nicht umfänglich und fragt Vieles zurück. Wenigstens wird man dadurch darauf aufmerksam, dass die Beschreibung nicht vollständig genug war.

Wo er Probleme hat, ist die Datenhaltung der bisherigen Anforderungen: Meistens holt er sich Sachen hoch, die zuvor diskutiert wurden, schmeißt aber auch mal Aspekte rein, die eigentlich schon verworfen wurden. Da muss man aufpassen und seine Zusammenfassung lesen, die er als Requirements ausgibt, bevor er loslegt. Sonst dreht man sich gfs im Kreis oder es dauert länger. In zwei Fällen hat er auch falsche oder schlechte kleine Änderungen vorgeschlagen, die ich einbauen sollte. Diese haben aber nicht immer funktioniert. Auch da hat er nach meiner Beschwerde sofort wieder "gewusst", warum das nicht geht, so als habe er inzwischen nachgedacht. In einem Fall hat er mit (und sich!) erklärt, dass die Änderung auf einer vorherigen Version beruht und das ein Fehler war.

Entweder wird er erst durch die Beschwerde getriggert, weiter zu suchen und zuprüfen, oder er ist in einer Art Suchmodus und klappert Alternativen ab - gfs. um selber zu lernen. Das könnte technische Strategie sein, oder auch Teil des Freeware-Konzeptes: Es wäre mal interessant, das zu untersuchen, ob das die Bezahlversion auch so macht. Es könnte ja sein, dass die kostenlose Version auch dazu da ist, anhand von try and error selber zu lernen und die Lösung nach hinten weiterzugeben.

Insgesamt ist das ein echtes Hilfsmittel. Es nimmt einem Sucharbeit und Tipparbeit ab und vermeidet Tippfehler. Man bekommt auf Wunsch Änderungen oder gleich einen neuen Code. Dort wo er sich verrant hat und die Änderungen in die Sackgasse führen, muss man um einen neuen Code bitten. Der sieht dann auch etwas anders aus und hat nicht nur die Änderungen richtig drin, sondern auch wieder andere Vereinfachungen.

Die Frage ist, wie man dann damit umgehen muss, wenn man eigene Änderungen hat, die man nicht überschrieben bekommen möchte, oder Kommentare bzw eigene IP schützen will. Da bietet sich ein modulares Arbeiten an, wo man die CGBT-Komponenten möglichs klein und isoliert hält und Eigenes als blackbox reinwirft.

Klar ist, je genauer man beschreibt, was man will und was nicht, desto schneller geht es ins Ziel. Die gesamte Geschichte hat insgesamt rund 2h gedauert und lieferte ein gutes Ergebnis, auf dem ich weiter aufbauen kann. Weil ich gut VBA kann, bin ich in der Lage, das nun funktionell anzupassen und auszubauen, nachdem es technisch gut gelöst ist.

Schlussbemerkung: Wie eingangs schon gesagt: Gelernt haben jetzt beide Seiten!

#8088132
Lesenswert?

Interessanter Bericht, danke fürs Teilen! Den WASAPI-Umstieg von Win7 zu Win10 kenne ich aus eigenen Audioprojekten auch - die alte waveOut-Schnittstelle läuft zwar noch über den Kompatibilitäts-Layer, aber sobald man niedrige Latenzen oder größere Buffer braucht, merkt man den Unterschied schnell. Das Verhalten, dass die KI zwischen zwei Sessions gerne unaufgefordert an bereits fertigem Code weiterbastelt, deckt sich auch mit meiner Erfahrung - am besten hilft es, jede Anfrage möglichst isoliert und mit klar abgegrenztem Kontext zu stellen. Für die Buffer-Kopie würde ich eher auf ein Ringbuffer-Pattern mit fester Blockgröße setzen, das nimmt einem viel vom Debugging bei variabler Samplelänge ab. Viel Erfolg beim weiteren Ausbau des Projekts!

#8088196
Lesenswert?

J. S. schrieb:

Machen wir es kurz, nach insgesamt 10 Lern- und Diskussionsschleifen hat er/sie/es dann mit meiner Hilfe hinbekommen ... Gelernt haben jetzt beide Seiten!

Wäre schön, wenn das gelernte nun permanent im ChatBot drin wäre. Noch besser: für alle Nutzer.

Andererseits kommt man im Gewerblichen Umfeld schnell an den Punkt, wo man anderer Leute Wissen gerne abgreift, selbst aber nicht teilen will. Irgendwie müssen die KI Anbieter diesen Spagat hinkriegen, wenn sie erfolgreich werden wollen. Oder sie schaffen es, ihre Kunden zu bekehren, so dass sie der KI dienen, nicht umgekehrt.

: Bearbeitet durch User
OP Persönliche Seite #8088346
Lesenswert?

Hans W. schrieb:

Wäre schön, wenn das gelernte nun permanent im ChatBot drin wäre. Noch besser: für alle Nutzer.

Ist eine gute Frage, ob das dann "drin" ist. Ich gehe schon davon aus, daß das protokolliert wird und die Hintergrund-SW dadurch lernt. Davon muss man auch ausgehen, denke ich, weil die Firma ein interesse haben wird. Die Frage ist, ob das dann auch permanent allen Nutzern kostenlos zur Verfügung gestellt wird- und werden kann:

Das ist ein Kostenfrage! Da kommt dann für einige irgendwann der Hammer, wie bei der Wikipedia, wo keiner mehr spenden will und die Server demnächst Feierabend machen oder die Zugriffe limitieren.

Genau so kann es sein, daß man Einiges nicht mehr machen kann. Momentan buhlen die alle um Aufmerksamkeit und um Kunden. Da ist die KI sicher gerne bereit, einiges rauszurücken, wenn sie dabei auch trainiert wird. Die KI ist aktuell im Abgreifmodus. Muss eben jeder selber sehen, was er der KI rausgibt. Im Prinzip ist es eine Art Geben und Nehmen. Meine bisherigen Diskussionen laufen auf einem Niveau, wie ich es mit Halbleiter-FAEs habe: Da lernt auch der FAE von mir, wenn er ein Problem diskutiert und merkt sich die Lösung. Ich habe denen auch schon Code überlassen auf der Basis von Demos, die ich bekommen habe und gefixet habe, weil sie nicht komplett liefen. Den haben dann auch andere genutzt.

Wie auch immer:

Wo ich für mich den Vorteil sehe ist, daß ich dort, wo ich Lücken habe, die KI sehr viel schneller alles durchsucht, als ich es könnte und mir die Lücken füllt. Ich müsste ansonsten selber lesen. Ganz konkret habe ich in den letzten 20 Jahren immer weniger Windows gemacht, nachdem ich 10 Jahre lang Windows- und Linuxprogrammierwissen aufgebaut hatte. Da rennt einem dann die aktuelle Technologie weg.

Bildlich gesprochen habe ich einen riesigen Block an Wissen über BSD, Linus, Windows, CPP und wxWidgets, kann theoretisch alles programmieren, aber der Block hat inzwischen Löcher wie ein Schweizer Käse! Da geht es schon los überhaupt mal ein Modul fehlerfrei aus dem Nichts heraus aufzusetzen. Diese Löcher lassen sich aber mit KI super schnell stopfen! Sobald ich den Code vor Augen habe, kapiere ich, was er macht und ... WARUM das so gemacht wird und was Windows eben genau braucht. Es ist vollständig, meistens Fehlerfei und ein super Startpunkt.

Ohne mein Studium und die bisherige Berufserfahrung in dem Sektor käme ich aber nicht klar. Da ginge nichts. Einfach KI-Code in VStudio und "compile" geht nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren