Musikgenerator Web Audio API Anfängererfahrung

Kontext und Hintergrund


Ich bin 62 Jahre alt. Vor drei Jahren habe ich mich entschlossen, ein ziemlich komplexes System zu schreiben, bevor es 1981 nur 20 Zeilen in Basic gab, als uns 3 Monate Informatik im 5. Jahr der Radio-Fakultät (NSTU, früher NETI) festhielten. Der Profi gilt als derjenige, der das Fach besitzt und damit verdient, also bin ich in der Tat ein Anfänger.

Andererseits habe ich mich den größten Teil meines Lebens mit musikbezogenen Algorithmen beschäftigt, den Entwicklungsprozess und die Hardware und Software gefunden und, soweit ich konnte, daran teilgenommen. 1978 entwickelte und montierte er den Mini-Moog-Synthesizer (ich glaube, es war der erste im Ural), entwickelte und produzierte den ersten in der UdSSR-Soundkarte mit einem Synthesizer für Agat7 (9) - das sowjetische Analogon von Apple II, entwarf das FM-Synthesemodul Für eine der Fabriken, die mit Cakewalk (USA), PGMusic (Kanada) und PowerFX (Schweden) zusammengearbeitet haben - häufiger im Rahmen des Programms: „Ideen und Umsetzung stammen von uns, das Budget stammt von ihnen“, nahmen sie an internationalen Musikausstellungen MusikMesse (Deutschland), NAMM teil (USA) usw.All dies ist ein kleiner Teil dessen, was ich natürlich nicht allein getan habe, sondern mit dem Team, das ich zu einem bestimmten Zeitpunkt zusammengestellt hatte.

Außerdem beteiligte er sich aktiv an der Organisation der Abteilung für Informatik (1. in der UdSSR) am Nowosibirsker Konservatorium. Von 1983 bis 2004 unterrichtete er außerdem Musikakustik, Informatik und Tontechnik und verfasste eine Dissertation über Computermodellierung musikalischer Darbietungen (ISBN 5-9294-0023-7) ...

Ja, alles begann mit Schwarz-Weiß-Monitoren, Disketten, 256 kB RAM, einem persönlichen PC für die musikalische Montage ... Die Musiker mussten alles an ihren Fingern erklären, denn diese wunderbaren Menschen waren größtenteils weit von allem Strengen und Ordentlichen entfernt. Und wenn ein Posaunist eine Textseite füllen konnte, war er cool, und der Cellist, der Chizhik-Fawn programmiert hat, ist nur ein Star. Übrigens haben sich einige Lehrer aktiv gegen dieses ganze Thema gewehrt - aber jetzt versuchen Sie, ihnen Computer zu entziehen!

Diese Erfahrung ist sehr nützlich für meine Entwicklung, Ausbildung und Vertiefung des Themas geworden. Informatik war ebenso wie Sportunterricht für alle Fakultäten obligatorisch und ein ständiger Studentenstrom ermöglichte es uns, viele Tests, Experimente in Psychoakustik, Mustererkennung, Kommunikation mit theoretischen Musikern durchzuführen und ... zu verstehen, dass sie praktisch keine genauen Daten und Formeln haben. Zumindest diejenigen, die vom Entwickler von Musikgeräten und -programmen benötigt werden. Musikwissenschaftler sind leider im Wesentlichen Historiker, die die Vergangenheit beschreiben. Wenn sie Wissenschaft hätten, dann ... wäre es wahrscheinlich eine Ergänzung zu ihrer Konsultation, als zum Bürgermeister einer Stadt mit mehr als einer Million Einwohnern. Wie viel würde ein berühmter Musiker für eine „Hit-Formel“ und eine „Umsatzprognose“ bezahlen? Nehmen

wir also an, wir müssen Antworten erhalten, die für solche Algorithmen funktionieren, zum Beispiel:

a) Es ertönte eine Melodie (auch wenn sie bereits mit „Noten“ in MIDI aufgenommen wurde). Wie kann man feststellen, wo sich das Tonikum befindet? - Der Musiker wird es leicht machen, aber eine klare Antwort (Algorithmus) wird Ihnen nicht geben;

b) Es gibt eine Melodie, wie man die richtigen Akkorde dafür auswählt. Ja, der Chorleiter wird es wahrscheinlich besser machen als der Sänger, aber beide, selbst wenn sie Anweisungen geben, sind nicht sehr klar. Natürlich wird es aus ihrer Sicht streng sein. Erst wenn der Ingenieur beginnt, es in einen Algorithmus zu übersetzen, wird es einige schwer zu überwindende undefinierte ...

c) oder spielt der Schlagzeuger etwas mäßig Kompliziertes oder improvisiert der Saxophonist - wie man die Größe, die starken / schwachen Beats, den Anfang / das Ende einer musikalischen Phrase, die expressive Verlangsamung / Beschleunigung „abhebt“? Es geht nicht um EDM (Electronic Dance Music). Der Musiker-Performer fühlt und befolgt die vom Lehrer übermittelten „Regeln“ auf eine „Do as I Do“ -Methode, aber ein Ingenieur benötigt Zahlen, Grafiken, Proportionen, und all dies ist weder vom Performer noch vom Musikwissenschaftler-Theoretiker praktisch zu erhalten.

Aber auf solche Fragen wollte ich Antworten finden. In der Tat kann ein real klingendes Werk ein grobes Modell haben - eine musikalische Komposition im MIDI-Format, dh im Wesentlichen eine „elektronische Partitur“. Dies sind genaue Daten, aber wie soll man damit arbeiten? Im Allgemeinen war für mich am Ende die Analyse und Konvertierung von MIDI-Daten und solchen Algorithmen * am interessantesten:

Performance-Modellierung 1) ,
Morphing 2) ,
Generierung von Musik 3)

Und für all dies sind die Definition von Tonalität, Auto-Harmonisierung und Auto-Phrasierung nur separate Unteraufgaben ... Im Laufe der Zeit wurden akzeptable Antworten für all diese Themen erhalten, Algorithmen und Programme wurden erstellt es kam sogar in Cakewalk / Sonar.

* Eine kleine Entschlüsselung:

1) Analyse quantisierter MIDI-Daten, Erkennung von „Musikobjekten“ (Phrasen, Figuren) und deren Änderung im Teil von Velocity, NoteOn, Duration sowie Auferlegung von Tempo-, PitchWeel-, Expression- und Modulationskurven, um die Synthesizer-Ressourcen besser nutzen zu können und größere Ausdruckskraft erreichen.

2) Analyse sowohl des gesamten Werks als auch einzelner Teile mit dem Ziel, sie von einer Größe in eine andere (z. B. von 4/4 auf 6/8 oder 7/4) von einer Harmonie / Harmonie in andere umzuwandeln. Darüber hinaus wäre das Ergebnis "essbar" - so dass nach Meinung des Musikers die "richtige" Musik ohne offensichtliche Verstöße ist.

3) Erzeugung einer „elektronischen Partitur“ - ein System, das bei Verwendung von 1) und 2) und Wiedergabe von MIDI-Daten eine Ausgabe erzeugt, deren Klang dem eines Musikers, Arrangeurs mit einem Computer oder einem Live-Instrument ähnelt. Jene. Nicht etwas Abstraktes, das von der KI erzeugt wird, nicht nur zur Demonstration in einem engen Kreis von Spezialisten, sondern vollständig „menschlich“ und für den Gebrauch geeignet.

In dieser langen Geschichte gab es einige lustige Momente, wenn man sich die Gegenwart ansieht, zum Beispiel für den ersten 386 PC, den ich 2 neuen Moskowitern „Chignon“ (IL 2715) geben musste, jeweils 290 Tausend Rubel. Oder als Wintergarten hätte ich fast einen gebrauchten Minsk 32 in der sibirischen Abteilung der Akademie der Wissenschaften erworben - ich glaube, dieses Monster, schwächer als ein Smartphone, schien 60-80 m 2 zu besetzen und Strom zu verbrauchen, wahrscheinlich wie eine Bar + Sauna ...

Also programmierten meine Mitarbeiter (wir arbeiteten mit Z80, MOS 6502, "Electronics-60", auf den ersten Win-PCs der DDR, mit TMS- und Analog Devices-Signalprozessoren ...) jeden Tag "krakozyabra" auf den Bildschirmen und dachten nach dass alle von ihnen (Programmierer) "nicht von dieser Welt" sind. Obwohl die Partitur nicht einfacher ist! Und schließlich hören einige Musiker Musik, schauen sich die Noten an und bekommen sogar ästhetisches Vergnügen, wenn sie es mögen! Im Allgemeinen schien es mir, dass jeder, der den Code schreibt, Genies sind und dies ist überhaupt nicht meins ... Aber wie die Zukunft zeigte, habe ich mich geirrt. Ich kann nicht sagen, dass viel Zeit verloren gegangen ist, aber wahrscheinlich wäre das Schicksal vieler Projekte völlig anders gewesen ...

Erste praktische Erfahrung


Aus früheren Erfahrungen habe ich gelernt, dass die „schwierigsten“, „unangenehmsten“ Dinge für einen Programmierer zwei Dinge sind: GUIs und Schnittstellen (dh Umschalten von einer Umgebung in eine andere. Zum Beispiel das Empfangen von MIDI-Daten von einem externen Gerät), insbesondere wenn Es gibt keine geeigneten vorgefertigten Lösungen.

Zuerst habe ich AutoPlay Media Studio (Indigo Rose Software) genommen - es ist ein bisschen ein Designer für Dummies. Ursprünglich anscheinend entwickelt, um schnell ein CD-, DVD-Menü und autorun.exe zu erstellen. Aber es stellte sich heraus, dass es ein Meer von Funktionen gibt, und im Inneren (auf LUA) können Sie fast alles tun: Animation, Ogg spielen. Daher konnte die meiste "unangenehme" Arbeit (ich denke übrigens, dass Neuankömmlinge in solchen Momenten einfach aufhören) nicht erledigt werden - alles ist fertig.

Infolgedessen schrieb ich für 2 Monate zu Hause nach Stunden ein Analogon eines Trainingsmusikprogramms, das wir entwickelt und offiziell geliefert hatten. Darüber hinaus ist es mit einer anderen grafischeren Benutzeroberfläche interessanter, Audio- und Grafikinhalte zu erstellen und für mich zu testen. Er zeigte es im Büro und fragte einen der Moderatoren, wie viel Zeit er brauche, um eine solche Version zu erstellen. Die Antwort war 6 Monate! Hier dachte ich anscheinend zum ersten Mal: ​​Vielleicht sollte ich mich nicht nur selbst damit beschäftigen, sondern etwas studieren und versuchen, etwas Ernstes zu tun, und ... habe ich die Arbeit richtig organisiert? Tatsächlich war seine Antwort ehrlich - einfach „sie“ würden den Konstruktor nicht verwenden, aber sie würden alles selbst schreiben.

Seit 2009 habe ich einen Teil der Zeit der Arbeit in einem Aufnahmestudio und der Erstellung von Videoanzeigen gewidmet. Einmal fragte ein Freund, ob es möglich sei, schnell (und nicht teuer) hundert 1-Minuten-Clips zu erstellen (anscheinend für Werbung auf YouTube). Schreckliche Liebe solche Aufgaben! (Übrigens weiß ich seit langem, dass ein Programmierer, der dreimal gezwungen ist, etwas nicht sehr Kreatives zu tun, ein Skript schreibt). Ich habe die Programmierer gefragt, und wenn es ein solches Programm gibt, was kann es selbst die Tasten auf dem Bildschirm "drücken"? Wow, das ist AutoIt!

Im Allgemeinen habe ich zum Spaß ein Skript geschrieben, das:

  1. Launched Opera, eröffnete die Website eines (anscheinend niederländischen) Unternehmens, das sich auf Text-to-Speech spezialisiert hat.
  2. Auf der Seite habe ich zu RU gescrollt (Sprachausgabe in Russisch);
  3. öffnete eine * .txt-Datei im Editor, in der 20-30 Witze im Voraus aus dem Netzwerk kopiert wurden, Absätze;
  4. kopierte einen Witz und fügte ihn auf der Baustelle in das Feld ein;
  5. SoundForge wurde aufgezeichnet und auf der Site wurde die Wiedergabe aktiviert.
  6. Das Ergebnis wurde in einem Ordner im MP3-Format mit dem Namen „Seriennummer + die ersten 15 Zeichen aus dem Text des Witzes selbst“ aufgezeichnet und gespeichert.

Es hat funktioniert und ich war als Kind glücklich. Danach sagte ich zu meinem Freund: "Es ist kein Problem, kostengünstig 100 Clips (von guter Qualität) zu erstellen, nur Bilder, Musik, Überschriften, Untertitel, Beschreibungen usw. aufzunehmen. - Ich werde alles in Ordnung bringen (in Größe, Farbe), in Ordnern ablegen, eine Vorlage erstellen." + Ich werde die Variationen bestimmen (zufällig!) Und ... Ich kann Ihnen nicht 100, sondern 200 dieser Clips (in Vegas Pro mit AutoIt ist es einfach) machen, sie selektiv ansehen, und Sie werden bereits die richtige Menge für sich selbst auswählen ... Sie mussten dies alles nicht tun, aber danke für ihre frage!

Später begann ich allmählich, etwas auf der Website zu korrigieren, etwas zu lesen und etwas aus sportlichen Gründen auszuprobieren. Insbesondere, um Skripte in JavaScript / CSS für die einfache Animation zu erstellen, die für die Erstellung von Videos erforderlich ist. So erschienen einige allgemeine Ideen und ein wenig Erfahrung in PHP, HTML, jQuery, JavaScript, CSS, MySQL. "Crack-Overs" verschwanden fast und ich hatte keine Angst mehr vor diesem Thema "Programmierung". Der letzte Wendepunkt in Bezug auf sie und ihre Fähigkeiten ereignete sich, als ich 2 Punkte verstand:

  • Diese ganze Sphäre ist eine endlose Welt und selbst ein starker Programmierer wird die Frage nicht immer beantworten, wenn es nicht sein Gebiet ist. Genau wie in jedem anderen Bereich. Im Allgemeinen - ja, gut, und die Nuancen - suchen Sie einen engen Spezialisten, sondern graben Sie sich. Zum Glück gibt es ein Netzwerk.
  • Ich habe 99% der Fragen, die ich während der Entwicklung hatte, selbst gelöst und manchmal effizienter als in den Beispielen im Internet. Gleichzeitig verstehe ich, dass mein Code durch den Schreibstil schrecklich sein kann.

Musikgenerator


Ich kann mich nicht erinnern, wie ich auf die Web-Audio-API gestoßen bin. Zu diesem Zeitpunkt hatte ich noch keine LLC, keine IP oder kein Team, aber nach 2-3 Experimenten, als der „Sound ging“, schwang ich mich am ernstesten für mich Das Projekt ist ein Musikgenerator (den ich jetzt AlexAr nenne ). In Web Audio gab es tatsächlich alles Notwendige - Generatoren, Filter, Hüllkurven, Mixer, ein Prozessor (in C ++) und jQuery, JavaScript und CSS ermöglichten es uns, alle Probleme mit der GUI zu lösen. Tatsächlich können Sie in Web Audio, wie es mir scheint, sowohl die Verarbeitung als auch die Synthese von Klang beliebiger Komplexität durchführen.

Hier begann die eigentliche Arbeit fast wie in der Jugend, als Sie 25+ waren. 3-4 Mal habe ich von vorne angefangen, eine Version des Systems verworfen und eine neue gesammelt. Manchmal ändert sich der Ansatz zum Entwerfen eines bestimmten Moduls radikal. Gleichzeitig habe ich viele Experimente durchgeführt und neue Algorithmen getestet, die ich vorher noch nicht verwendet hatte. Er machte mehrere Entdeckungen für sich, die ohne das Starten des Systems nicht möglich gewesen wären. Insbesondere in der Psychoakustik, bei der Wahrnehmung der „Ähnlichkeit“ von Musiktiteln - welche Parameter ergeben „unterschiedliche“ Musik und welche mit ihren formalen Unterschieden nach Gehör „gleich“. Einige sehr nützliche Dinge wurden in der Verwendung von Harmonie, in der Nachahmung während des Zupfens, in der Phrasierung beim Ändern von Akkorden und in einem besseren Verständnis der „Stilgenauigkeit“ gefunden. Es ist möglich, dass dies alles offen und beschrieben ist. Aber im Leben passiert es oftDas ist einfacher (und nützlicher), an sich selbst zu denken.

Ja, es wäre großartig, wenn die Web-Audio-API das Binden, die Verwendung von VSTi für die Synthese oder etwas anderes zulassen würde. Auf der anderen Seite gab es die Gelegenheit, sich an die Jugend zu erinnern und alle notwendigen Synthesizer zu schreiben, um sowohl die Struktur als auch die Algorithmen und Inhalte zu erfinden, zu optimieren. Fast wie früher, als ein Künstler nicht nur malte, sondern auch selbst malte ...

Nach mehreren Rückschlägen und Änderungen, Modernisierungen (was eine gute Schul- und Gehirntraining war) wurde das System stabil und voll funktionsfähig. Natürlich nicht in der Form, in der es an Dritte weitergegeben werden kann. Es ist ungefähr wie bei einem selbstgebauten Auto, das nur dem Schöpfer "gehorcht" und wenn es kaputt geht, gibt es niemanden, der es repariert ...

Bild

Im Allgemeinen wird die fertige Komposition für 4-5 Minuten in 40-50 Sekunden erstellt. (auf Intel Core i5, 2,8 GHz, 12 GB RAM). Ich stellte eine Aufgabe, zum Beispiel „100 Tanzstücke machen“, wechselte zum Mittagessen oder ging spazieren. Er kam in einer Stunde an und, wenn das System nicht abstürzte, hörte er zu und bestimmte %% der Eignung des Ergebnisses. Dann habe ich etwas an den Parametern geändert und wieder angefangen. Wenn ich mich "vernünftig" verhalten habe, d.h. Stellen Sie Parameter ein, die nicht zu einer Unschärfe des Stils geführt haben (dies geschieht beispielsweise, wenn Jazz-Harmonie in EDM angewendet wird), dann klangen 90-95% der Tracks ziemlich anständig, und wenn nicht, könnten 60-70 %% weggeworfen werden.

Das System hat funktioniert, Sie können sich freuen, aber es scheint, dass lächerliche, aber echte Probleme entstanden sind: "Wie kann ich so viel Musik hören?" Und die Erkenntnis eines weiteren Augenblicks: "Und wer ist der Autor?" Ein guter Freund "im Fach" sagte, dass "der Autor ein Computer ist, inkl. es gehört dir nicht “... Wenn ja, dann ist es eine Schande, dass ich dort Melodien, Phrasen, Harmonien und Formen eingegeben, ein paar hundert Parameter eingerichtet habe, wobei sich manchmal 5 ms im Ergebnis widerspiegeln, und das System nur das Ergebnis generiert hat, wiederum nach einem Algorithmus, der Ich habe in es investiert ... Ich habe das Netzwerk durchsucht - das habe ich in einem ähnlichen Fall mit Urheberrecht nicht verstanden ...

Infolgedessen veröffentlichte ich ungefähr 3.500 Songs mit einer Gesamtspielzeit von mehr als 200 Stunden und stoppte oder wechselte - ich plane, SongModeler zu starten - einen Online-Arrangement-Generator, der auf in AlexAr ausgearbeiteten Ansätzen basiert. Beispiele für die automatische Musikgenerierung in AlexAr finden Sie hier .

Für zu wählerische Zuhörer möchte ich sagen, dass ich mehr Zeit mit Programmieren, Harmonie, Melodie, Form (d. H. Noten) verbracht habe, aber Synthese und Mischen können natürlich viel besser sein. Am Ende habe ich die Ideen überprüft, den Ansatz selbst - es ist wahr. Und für solche Projekte wird ein Team benötigt, Einzelgänger setzen sich selten mit interdisziplinären Themen auseinander. Andererseits wird die Arbeit viel komfortabler, wenn niemand „weder über dir noch unter dir“ ist. Aber die wahre Ironie ist, dass ich, als ich das Team und die Ressourcen hatte, nicht auf so etwas zielte, weil ich dachte, es sei zu kompliziert.

Bereits mitten in der Arbeit an AlexAr wurde mir klar, dass es durchaus möglich ist, dass 10 Programmierer (manchmal hatte ich viel mehr Mitarbeiter) durch drei ersetzt werden könnten, wenn ich früher mit dem Programmieren anfing :

Ich selbst (Design, Programmierung, Testen, Inhalt);
sehr klug - Engpässe, nachrichtendienstliche Ansätze, neue Bibliotheken, Dienste (unmittelbar nach der High School oder aus 3-4 Kursen);
produktiver Workaholic für Routineaufgaben ohne Vorstellungskraft, der nicht juckt, heute das anzuwenden, was gestern erschienen ist.

Ich bin sicher, dass die Aufgabe schneller gelöst werden würde und wie viel Nerven und Geld gespart würden! Woher kommt die Ersparnis? Also setzte ich mich vor dem Mittagessen hin, um etwas zu testen - "Nun, der Knopf ist nicht bequem und der Indikator würde mehr und nach rechts verschoben." OK - ich habe mich hingesetzt und es in einer halben Stunde gemacht, die Stimmung war 5+. Und wie würde dies früher in meinem Büro mit dem Team entschieden werden, wenn Sie selbst nicht schreiben? Zuerst fragte ich, wie lange es dauern würde, dann zeichnete ich es in PhotoShop, zählte die Pixel, schrieb eine TK, nahm es in den Plan auf, wartete ein paar Tage oder ... lehnte es überhaupt ab - es funktioniert, es ist bereits gut. Und so ständig.

Schlussfolgerungen und Motivation


Ich weiß nicht, wie harmonisch ich die tatsächlichen Schlussfolgerungen formulieren kann, aber noch nicht auf meinem Gebiet, aber ich werde es versuchen.

  1. , . , , , , . , . , 10 , ( ?).
  2. — . , - macOS Android, . , , . , .
  3. GUI , — . , - . , , -.
  4. - - , - — , , . , , - — . — «». 7 , 6 . — , — . , - . ? — , . - , « » — .. , «» .
  5. , , (software engineer, !) . , , ( ) -, . , , engineer, , «, », .. «Copy Paste».
  6. , , «» , , - . . - … , . . — . , , , , , .
  7. , . , , IDE, . , , — NotePad++, FireFox ZIP- — , . «» . , « », .
  8. ? . , , — UnDo/ReDo. JavaScript , , — . , , , . UnDo — , , , .

Im Allgemeinen scheint es mir, dass Erwachsene, insbesondere diejenigen mit einem technischen Hintergrund, die nicht an der Programmierung im Leben beteiligt waren, es versuchen sollten. Wenn Sie Ihr Fach kennen, sind 50% bereits erledigt. Sie brauchen Logik, ein klares Verständnis der „Physik, Natur“ Ihres Gebiets, und das haben Sie höchstwahrscheinlich. In „krummen Mänteln“ gibt es nichts zu befürchten, und JavaScript ist viel einfacher als Russisch oder Englisch. Am Ende werden Sie vielleicht kein echter Softwareentwickler, aber diese Fähigkeiten, auch kleine, werden Ihre technischen Qualifikationen um eine weitere Option erweitern. Ja, Sie werden sofort aufhören, IT-Mitarbeiter als Personen mit einem Heiligenschein über dem Kopf zu betrachten, und Sie können eine Aufgabe für sie auf einer kompetenteren Ebene festlegen. Immerhin gehen sie in Ihre Gegend, wo Sie ein Profi sind. Oder vielleicht implementieren Sie Ihr Projekt auf Ihren Daten, von denen Sie lange geträumt haben,Aber die Bedingungen für die Implementierung haben nicht geklappt - ich weiß nicht, ich glaube, ich hatte Glück, weil ich keine Angst hatte, es zu versuchen. Und überhaupt - Programmierung für einen Ingenieur, DAS IST FREIHEIT!

Beste Grüße an alle.

PS: Wenn sich jemand in detaillierterer Form für die Geschichte meiner Arbeit im Laufe der Jahre interessiert, dann ist sie hier .

All Articles