Projektvorstellung: Sompyler

Beitrag Nr. 14 wurde als (mich) weiterbringende hilfreiche Antwort markiert.

Neusiker
Neusiker
Tonanie!
Sompyler ist ein Offline-Synthesizer. Von außen betrachtet ein klassisches Unixtool, das ohne grafische Benutzeroberflache auskommt. Na gut, eher sollte ich sagen, der Entwickler hat halt andere Prioritäten. Shit in, Fehlermeldungen und/oder Shit out, bzw. Data-by-somebody-knowing-how in, hearable music & sound out. Also ziemlich puristisch, nerdig. Und warum das Programm so heißt wie es heißt, sollte auch klar sein: Compiler, Namenspaten, arbeiten ganz ähnlich.

Eingabedaten sind im strikt hierarchischen YAML-Format. Sie umfassen Noten und Instrumentdefinitionen. Richtig gelesen: Nicht nur die Töne (nebst Rhythmus und Dynamik), sondern auch wie das Instrument klingt, formuliert man in Textform. Sompyler braucht also keine Soundfonts, Wavetables oder Granulars, sondern macht das alles selbst locker flockig aus dem Prozessor, wobei ggf. mehrere Kerne benutzt werden.

Sompyler ist also ähnlich wie CSound, dafür aber von der schnöden Mathematik aufwärts selbstgemacht, was mich mit einigem Stolz hier auftreten lässt, als hätte ich das Rad gerade neu erfunden.

Sompyler ist in Python programmiert. Ich arbeite daran seit März dieses Jahres. Die Berechnung von Bézierkurven (etwa für A(D)SR-Hüllkurven, Wellenformen, frequenzstatisch-relative Amplitudenmaxima) lässt sich durch einmalige Kompilierung in Maschinensprache massiv beschleunigen, aber Echtzeitbetrieb ist bestimmt nicht drin, nun, irgendeinen Tod muss man nun mal sterben. Dafür werden Additive Synthese, FM, AM und Waveshaping unterstützt. Die Klangfarbe lässt sich abhängig von Tonhöhe, Betonung und instrumentspezifischen Eigenschaften der Note variieren.

Ich arbeite zur Zeit am liebsten am Klavierton. Und jetzt, zur Adventszeit, an verschiedenen Weihnachtsliedern, von denen ich jeden Adventssonntag eines auf meine Seite mit Sompyler-Demos stelle: https://neusik.de - die Domain ist ein Kunstwort aus Nerd und Musik, na gut, auch "neu" und "noise" kann mit assoziiert werden.

Das Projekt ist Open-Source (GPL). Der Code ist verfügbar auf GitHub: https://gitlab.com/flowdy/sompyler.
 
Zuletzt bearbeitet:
Neusiker
Neusiker
Tonanie!
Hallo,

es ist an der Zeit, mal etwas Hörbares zu präsentieren, das mit dem Sompyler gemacht wurde. Es handelt sich um eine Eigenkomposition von mir. Die Noten sind "from scratch" über Monate hinweg in MuseScore entstanden und händisch in das von Sompyler erwartete YAML-Format überführt. Das war mir eine extrem gute Übung im Notenlesen. MIDI importieren kann der Sompyler nämlich nicht, und das Feature steht auch nicht in meiner Roadmap (will sagen, einen Importer zu schreiben überlasse ich etwaigen freiwilligen Dritten).


Weitere Links zum Stück:
  1. Das Sompyler-Pendant zur Common Music Notation: YAML-Textformat. Nicht nur Takte, instrumentgebundene Takte, Akkorde mit ihren Offsets zum Taktbeginn, Elementarnoten mit ihren Längen, ggf. Gewichten und instrumentspezifischen Merkmalen werden notiert, sondern auch notenübergreifende Angaben zur Betonungsstruktur und -stärke, Dynamik und Tempo werden definiert. Außerdem ganz oben auch, welche Instrumente wo auf der Stereobühne stehen.
  2. Instrumentdefinition, ditto
  3. Definition der Tonfrequenzberechnung und der Tonnamen gemäß des MIDI-Standards. Die Definition der Töne selbst ist flexibel gestaltet, um auch andere, nichtwestliche Tonsysteme zu unterstützen. Wobei die Intervalle hier noch statisch sind. Geplant ist, auch unregelmäßige Intervalle sowohl auf Ebene der Tonskala als auch auf Ebene einzelner Instrumente zu unterstützen.
 

Anhänge

  • anfaengerstueck_1.mp3
    2 MB · Aufrufe: 631
Zuletzt bearbeitet:
Neusiker
Neusiker
Tonanie!
Von Soundcloud bin ich wieder abgekommen. Die haben nen Uploadfilter, der angeschlagen hat, obwohl ich explizit geschrieben habe, dass das Mozarts Rondo alla turca ist, der Autor sich also seit 250 Jahren nicht mehr für die Fremdnutzungen interessiert und eh jeder weiß, dass das Rondo vom Mozart ist. Trotzdem hat da wohl irgendein Scan angeschlagen und Soundcloud hat ja ach so vollautomatisch angenommen, ich hätte irgendeine Wald-und-Wiesen-Interpretin, die ich gar nicht kenne, kopiert. Soviel zu automatischen Uploadfiltern, nö, kein Bock darauf.

Will mein Zeug nur wohldosiert bis gar nicht mehr zu veröffentlichen. Ich mache ja nicht nur eigene Kompositionen damit, sondern auch Sachen unter Copyright, da mach ich das natürlich eh nicht publik, nur für mich selbst (originäre "Hausmusik"), geb das allenfalls vielleicht mal Freunden/Bekannten bei Besuchen auf die Ohren.
Zumal: Wenn ich irgendwo MP3s hochlade und Freunden sage, hey hört mal, dann tun die das auf ihrem Smartphone. Auf deren Meinung zum Klang kann ich dann beim besten Willen nix geben.

Also hier mal einen Beethoven – Op. 27 Nr. 2, Sonate ähnlich einer Fantasie, volkstümlich auch "Mondscheinsonate" genannt, 1. Satz Adagio sostenuto. Der Klang ist eine Erfindung von mir.



Für die Umsetzung der Komposition habe ich mir die Sheets aus der IMSLP heruntergeladen und händisch in eine YAML-Textdefinition umgesetzt, trainiert ganz gut das Notenlesen, aber das allein hat natürlich nicht viel mit Musikmachen zu tun. Es ist eben eine Klangstudie zum einen und eine Übung im Notenlesen zum anderen, aber das "Musikmachen" zu nennen – zumindest nicht ohne eine Prise Salz ...

Hier mal, wie der Klang als YAML-Text aussieht:
p1: { S: '3:100;1,92;2,80;4,55!;5,86!;35,85;56,84;98,82;154,77' }
p2: { S: '2:100;1,100;2,90;3,89;4,88!;35,87;56,83;98,75;140,60' }
R: '0.2:1;1,1;2,0'
PROFILE:
- { A: '0.1:1,2;2,3', V: 100, S: '@p1' }
- [ 76, 67, 52] # dBFS-Level der Teiltöne bzw. %dB, da positiv
- { V: 48, A: '0.07:1,1', S: { '@p1': 2, '@p2': 3 } }
- [ 50, 51, 46, 34, 44, 43 ]
- { V: 41, A: '0.05:1,1;2,3', S: '@p2' }
SPREAD: [
1, 2, 3, 4, 5, 6, 6, 7, 7, 8, 9, 9, 10, 10, 11, 12, 11, 13,
13, 13, 14, 14, 15, 15, 15, 17, 16, 17, 17, 18, 18, 19, 19, 20
]
RAILSBACK_CURVE: [27, 4187, '-8+240;0,0;1,8;2,8;13,8;14,8;15,16'] # Oktavstreckung


So eine Datei kann man einfach im Texteditor bearbeiten. Während man probiert, baut sich eine Ahnung auf davon, was man wie ändern, wo man was hinzufügen muss, damit er der Klangvorstellung noch mehr entspricht. Das ist vergleichbar damit, wenn der "konventionelle" Synthetiker an irgendwelchen Potis dreht, Reglern dreht, Patchkabel steckt. An dieser Arbeitsweise ist nichts falsch, versteh mich niemand falsch oder möge dass als Angriff werden, sie spricht mich als programming nerd, dessen liebstes Werkzeug ein versatiler professioneller Texteditor (in meinem Fall vim, wenn den jemand kennt) ist, einfach nicht so an. Und die Ganzzahlen da oben ergeben auch keine Brüche im Envelope oder so, sind nur Koordinaten der Stützpolygone, die bei der Bézier-Bernstein-Approximation die berechnete Kurve umfassen.

Und hier mal ein paar Noten:

title: Sonata Op. 27 No. 2 – Sonata quasi una Fantasia ("Moonlight sonata")
author: L. v. Beethoven

stage: { p: '1|1 0 piano2' }

---
# P01 L1 M1 [1]
_meta: { stress_pattern: '1,0,1,0;1,0,0;1,0,0,0', ticks_per_minute: 960, upper_stress_bound: 80, lower_stress_bound: 75 }
p: { 0: [G#3 4, C#3 48 1-30, C#2 48 1-30], 4: C#4 4, 8: E4 4, 12: G#3 4, 16: C#4 4, 20: E4 4, 24: G#3 4, 28: C#4 4, 32: E4 4, 36: G#3 4, 40: C#4 4, 44: E4 4 }
 

Anhänge

  • moonlight.mp3
    3,2 MB · Aufrufe: 1.063
P
ps4074iclr
Guest
Coole Sache!
Höre ich da Aliasing aus meinen PC Lautsprechern?
 
Moogulator
Moogulator
Admin
Von Soundcloud bin ich wieder abgekommen. Die haben nen Uploadfilter, der angeschlagen hat, obwohl ich explizit geschrieben habe, dass das Mozarts Rondo alla turca ist, der Autor sich also seit 250 Jahren nicht mehr für die Fremdnutzungen interessiert und eh jeder weiß, dass das Rondo vom Mozart ist. Trotzdem hat da wohl irgendein Scan angeschlagen und Soundcloud hat ja ach so vollautomatisch angenommen, ich hätte irgendeine Wald-und-Wiesen-Interpretin, die ich gar nicht kenne, kopiert. Soviel zu automatischen Uploadfiltern, nö, kein Bock darauf.

Will mein Zeug nur wohldosiert bis gar nicht mehr zu veröffentlichen. Ich mache ja nicht nur eigene Kompositionen damit, sondern auch Sachen unter Copyright, da mach ich das natürlich eh nicht publik, nur für mich selbst (originäre "Hausmusik"), geb das allenfalls vielleicht mal Freunden/Bekannten bei Besuchen auf die Ohren.
Zumal: Wenn ich irgendwo MP3s hochlade und Freunden sage, hey hört mal, dann tun die das auf ihrem Smartphone. Auf deren Meinung zum Klang kann ich dann beim besten Willen nix geben.

Also hier mal einen Beethoven – Op. 27 Nr. 2, Sonate ähnlich einer Fantasie, volkstümlich auch "Mondscheinsonate" genannt, 1. Satz Adagio sostenuto. Der Klang ist eine Erfindung von mir.



Für die Umsetzung der Komposition habe ich mir die Sheets aus der IMSLP heruntergeladen und händisch in eine YAML-Textdefinition umgesetzt, trainiert ganz gut das Notenlesen, aber das allein hat natürlich nicht viel mit Musikmachen zu tun. Es ist eben eine Klangstudie zum einen und eine Übung im Notenlesen zum anderen, aber das "Musikmachen" zu nennen – zumindest nicht ohne eine Prise Salz ...

Hier mal, wie der Klang als YAML-Text aussieht:
p1: { S: '3:100;1,92;2,80;4,55!;5,86!;35,85;56,84;98,82;154,77' }
p2: { S: '2:100;1,100;2,90;3,89;4,88!;35,87;56,83;98,75;140,60' }
R: '0.2:1;1,1;2,0'
PROFILE:
- { A: '0.1:1,2;2,3', V: 100, S: '@p1' }
- [ 76, 67, 52] # dBFS-Level der Teiltöne bzw. %dB, da positiv
- { V: 48, A: '0.07:1,1', S: { '@p1': 2, '@p2': 3 } }
- [ 50, 51, 46, 34, 44, 43 ]
- { V: 41, A: '0.05:1,1;2,3', S: '@p2' }
SPREAD: [
1, 2, 3, 4, 5, 6, 6, 7, 7, 8, 9, 9, 10, 10, 11, 12, 11, 13,
13, 13, 14, 14, 15, 15, 15, 17, 16, 17, 17, 18, 18, 19, 19, 20
]
RAILSBACK_CURVE: [27, 4187, '-8+240;0,0;1,8;2,8;13,8;14,8;15,16'] # Oktavstreckung


So eine Datei kann man einfach im Texteditor bearbeiten. Während man probiert, baut sich eine Ahnung auf davon, was man wie ändern, wo man was hinzufügen muss, damit er der Klangvorstellung noch mehr entspricht. Das ist vergleichbar damit, wenn der "konventionelle" Synthetiker an irgendwelchen Potis dreht, Reglern dreht, Patchkabel steckt. An dieser Arbeitsweise ist nichts falsch, versteh mich niemand falsch oder möge dass als Angriff werden, sie spricht mich als programming nerd, dessen liebstes Werkzeug ein versatiler professioneller Texteditor (in meinem Fall vim, wenn den jemand kennt) ist, einfach nicht so an. Und die Ganzzahlen da oben ergeben auch keine Brüche im Envelope oder so, sind nur Koordinaten der Stützpolygone, die bei der Bézier-Bernstein-Approximation die berechnete Kurve umfassen.

Und hier mal ein paar Noten:

title: Sonata Op. 27 No. 2 – Sonata quasi una Fantasia ("Moonlight sonata")
author: L. v. Beethoven

stage: { p: '1|1 0 piano2' }

---
# P01 L1 M1 [1]
_meta: { stress_pattern: '1,0,1,0;1,0,0;1,0,0,0', ticks_per_minute: 960, upper_stress_bound: 80, lower_stress_bound: 75 }
p: { 0: [G#3 4, C#3 48 1-30, C#2 48 1-30], 4: C#4 4, 8: E4 4, 12: G#3 4, 16: C#4 4, 20: E4 4, 24: G#3 4, 28: C#4 4, 32: E4 4, 36: G#3 4, 40: C#4 4, 44: E4 4 }

Bei dem Thema werden wir bei allen Plattformen solche Filter vorfinden und es wird keine anderen mehr geben, so es sich um EU-Angebote handelt. Siehe aktuelle Reglung zu §13 - gibt's nen Thread zu, wird auch aktiv besprochen,..
Das die Uploadfilter alle schlecht sind ist auch allgemein bekannt, unzuverlässig und da die Plattformen keine Leute haben gibt es auch nur schlechtes oder gar kein Feedback an die Plattform und von ihr, man spricht idR mit Formularen, maximal!
 
P
ps4074iclr
Guest
_WIE_ schließt du denn aus, dass die Frequenzen über der Nyquist-Schwelle gerendert werden?

Ich stelle mir die Frage, da ich vor langer Zeit mal versucht habe einen Synthesizer zu programmiern, aber bereits an genau diesem Punkt gescheitert bin. In Gesprächen wurde mir von Experten immer wieder das Stichwort "Upsampling" genannt, aber in wie weit das nutzt, habe ich nicht richtig verstanden.

Ich meine es ging darum, dass man nach dem Upsamplen einen steilflankigeren Filter anwenden kann, so dass nach dem Downsampling weniger Zeugs übrig bleibt, was Aliasing hervorruft. Aaaaber, das wäre ja auch nur eine Entschärfung des Effekts und keine Beseitigung.

Mein Interesse an dem Thema besteht also weiterhin.
 
Zuletzt bearbeitet von einem Moderator:
Neusiker
Neusiker
Tonanie!
Ganz einfach, wenn Grundfrequenz*Frequenzfaktor > Samplingrate / 2, beende die Schleife, so die Kurzfassung. Bei der additiven Soundsynthese – mein primäres, in diesem Beispiel sogar einziges Verfahren, nehme ich andere hinzu, werde ich wohl tatsächlich mit Aliasing konfrontiert – ist das eigentlich ziemlich trivial, ob es leider naiv ist, werde ich wohl jetzt von euch erfahren. Du sagst dem (Sompyler-)Instrument, du hättest gern das Klangereignis für die gegebene Note, d.h. ihren Eigenschaften, v.a. die Tonhöhe. Das Instrument bildet zunächst einen Soundgenerator, maßgeschneidert hinsichtlich diesen Eigenschaften gemäß seiner Definition. Ein Soundgenerator weiß nach der Berechnung etwaiger Abweichungen von den natürlichen Harmonischen genau, welche Frequenzen, besser gesagt, welche Faktoren der angefragten Grundfrequenz er rendern muss. Er durchläuft also ganz banal eine Liste von Frequenzen, schichtet eine auf die andere. Bei jedem Durchlauf prüft er zunächst, ob die Frequenz unter der Schwelle bleibt, andernfalls steigt er aus.

Also entweder filtern meine Ohren das Aliasing raus oder ich bin einfach noch auditiv unerfahren, oder ich bin schwerhörig. Letzteres haben mir die Ohrenärzte noch nicht bescheinigt, im Gegenteil höre ich überdurchschnittlich gut für mein Alter, wurde mir mehrmals bestätigt. Unabhängig davon interessiert mich natürlich, welche Schwächen mein Sound hat und wie ich ihnen (gern auch mit anderen Programmen) beikommen kann. Kannst du näher beschreiben, wo du meinst Aliasing zu hören. Vielleicht am Anfang der Klänge, im Attack? Denn dass der Attack rau und spitz klingt, und dann in den unteren Harmonischen einen steilen, aber kurzen Senker hinlegt, war künstlerische Absicht.

Oben gesagtes gilt wie gesagt nur für die additive Synthese, auf die ich mich in vorigem Beispiel beschränkt habe. Anders sieht es aus, wenn ich zum Beispiel Frequenzmodulation hinzunehme.

Hier mal ein anderes Instrument, mit dem dasselbe Stück gespielt wird. Die anfangs inharmonischen Obertöne harmonisiere ich graduell. Aliasing sollte es auch hier nicht geben:
 

Anhänge

  • moonlight_sonata2.mp3
    3,2 MB · Aufrufe: 470
Zuletzt bearbeitet:
Neusiker
Neusiker
Tonanie!
Selbes Stück, aber vollständig d.h. alle drei Sätze, quasi "von Hand" aus dem gedruckten Urtext übersetzt – 8891 Noten bzw. 3810 Samples (Noten mit exakt gleichen Eigenschaften werden mit demselben Sample umesetzt). Da es sich um eine eine Klaviersonate handelt, klingt es mit andersartigen Klängen eben anders. Erkennt jemand das Vorbild (konventionelles Instrument), nach dem ich den Sound gestaltet habe? Darüber, dass ein Spieler oder Hersteller dies konventionellen Instruments allen Grund hat, über meinen Sound bestenfalls milde hinwegzulächeln, brauchen wir sicher nicht diskutieren, das ist mir schon klar.



Wer die Klavierversion hören möchte, muss die URL manuell aufrufen und das Anhängsel "_2" rausnehmen. Allerdings mache ich mir keine Illusionen, dass irgendwer das als Klavier anerkennt, für meine Ohren ist es jedenfalls eines, Betriebstaubheit sei dank.
 
einseinsnull
einseinsnull
[nur noch musik]
dein verfahren ist grundsätzlich richtig.
wenn von beginn an alles bandlimited ist, können dinge wie eine lautstärkeänderung oder die summierung mehrerer signale das nicht mehr kaputtmachen.
 
Neusiker
Neusiker
Tonanie!
Ich habe um den Sompyler eine kleine Server-App gestrickt, die sozusagen vermittelt zwischen mir, dem Nutzer, und dem Unix-Tool "Sompyler" auf dem Server. Läuft jetzt also im Browser.

Das Teil ist aber hinter einem schnöde browsergenerierten Login verborgen, und vom Design her auch recht rustikal funktional: https://demo.neusik.de/sompyle.

Öffentlich schalten will ich das nicht aus dem Grunde, dass ich Support- und Administrationsaufwand noch nicht recht abschätzen kann und die Sache nach hinten losgeht, wenn ich jetzt Nutzer reihenweise enttäusche. Womöglich gibt es noch Fehler, die ich alleine nicht blicke, und ich bin froh, dass das nicht öffentlich ist.

[... TL;TDRTA = Too long, they won't read that anyway ...]

Wer ausprobieren mag, wie extrem nerdig Klang- und MusikähNeusiksynthese geht: Den Log-in-Dialog kann man auch verwenden, um sich einen Account zu registrieren. Dazu bedarf es einmalig einer privat zu erfragenden Zeichenfolge vor dem Nutzernamen*, im Anschluss nochmal ohne. Auch nach der Anmeldung gibt es Herausforderungen für deine Geduld.**

Am besten, ich stell hier ein Beispiel ein, so als Appetitmacher für Nerds mit Programmierambitionen und Abschreckung echter Musiker. Ohne Sounddatei im Anhang, da das Forum eh kein Ogg/Vorbis unterstützt, und natürlich um Druck zu erzeugen, oder zumindest um mir einzubilden, dass ich so neugierig mache.

YAML:
stage:
  i: '1|1 0'
instrument i:
  NOT_CHANGED_SINCE: 2021-04-18 09:31:18
  SPREAD: '20:1,3;3,0'
  VOLUMES: '20:100;1,75;2,80!;3,70;5,67'
  TIMBRE: '4800:100;2,85;3,103!;4,83;6,90!;7,84;8,80;9,85!;10,75;12,70;13,70'
  O: triangle
  R: '0.2:1;2,1;3,0'
  PROFILE:
    - match: 1
      A: '0.005:1,3;2,3;4,4'
      S: '2:20;1,17;3,15;7,14'
    - match: 20
      A: '0.012:1,1;3,2'
      S: '1.5:20;3,18;7,15'
    - match: 25
      A: '0.007:1,1;2,3'
      S: '1.3:1;1,0;2,0'
    - match: 2n
      FM: '3.2f@sawtooth;1:3'
    - match: 5n-3
      FM: '2.7f@sine;1:2'
  MORPH:
    - '1 1:1;1,1'
    - '25 2:1;1,1'
    - '3n 100;1,106;3,100'

---
_meta:
  stress_pattern: '2,0,1,0,0;1,0'
  ticks_per_minute: 210
  upper_stress_bound: 100
  lower_stress_bound: 94
  cut: 7
i:
  7:
    - 'Cs3&m oo+2o-'
    - E3 3

---

i: 'Cs4&m7 o_o-_o+_o+2 o-*3'

---
_meta:
  ticks_per_minute: '200;1,190;2,195'
  repeat_unmentioned_voices: true

Außerdem wollte ich nur mal meine neueste Entdeckung ausprobieren: YAML-Highlighting im Beitragseditor in einem XenForo-Board.

---
*) Beispiel unter der Annahme, die geheime Zeichenfolge sei "?": 1. Versuch Benutzer "?name", Passwort "g3h h31m!" / 2. Versuch "name", Passwort "g3h h31m!" - wähle deinen eigenen Namen und ein anderes Passwort. Der Name sei eine beliebige Folge von kleinen Buchstaben des lateinischen Alphabets ohne Umlaute und Sonderzeichen.

Da der Service eigentlich privat und nicht gewerblich ist, muss ich die Zahl probierender User überschaubar halten, um selbst mit großer Wahrscheinlichkeit zum Zuge zu kommen, wenn ich will und tatsächlich mal nicht auf meine lokale Instanz zugreifen kann. Daher gibt es neben technisch bedingten Einschränkungen auch ein paar "Schikanen", die auch der Gerechtigkeit zwischen mehreren Usern dienen sollen.
  1. Es kann sein, dass du dich neu anmelden musst, wenn dein Browser die Anmeldedaten vergessen hat. Es kann sein, dass die Anmeldung nicht funktioniert, nach frühestens einer Stunde ohne Aktion (Rendering-Request an Server) können User gelöscht werden. Dann hilft aber wieder der Trick mit den beiden Versuchen und der geheimen Zeichenfolge vor dem Nutzernahmen beim ersten. Diese Zeichenfolge behalte ich mir vor zu ändern, wenn es mir trotz der Schikanen insgesamt zu viele Anmeldungen von egal wem werden sollten, teile es aber nicht überall mit.
  2. Außerdem kann es sein, dass du nach dem ersten Klick auf "Sompyle" eine Fehlermeldung kriegst à la "Service currently unavailable". Was darunter steht, ist lesenswert. Falls nicht, bist du mindestens eine Stunde sicher vor diesem Fehler, oft länger. So lang ist die Reservierungszeit eines Workers, dann nach kann er einem anderen zugeteilt werden. Es gibt drei Worker. Bis zu 3 Usern können also gleichzeitig sompylen, natürlich dauert es dann für jeden bis zu drei mal so lange. Du kannst deine Position in der Warteschlange verbessern durch wiederholte Abfragen mit gleichmäßigen Abständen dazwischen. Abhängig von deiner Netzverbindung und der Auslastung der Route zum Server kann die beste Zeit zwischen zwei Versuchen durchaus Minuten betragen.
  3. Auch die Anzahl an Samples, die ein User insgesamt generieren kann, ist beschränkt, und zwar auf eine Milliarde. Das ist nicht viel. Die Samplingrate beträgt 44,1 kHz. Jede Hüllkurve und jede Modulation (von jedem Layer eines distinkten Tons) geht für sich in die Rechnung ein. Sobald dieses Quota aufgebraucht ist, muss er mindestens drei Stunden pausieren. Wenn er früher seinen Worker an einen anderen User verliert, da die Reservierungszeit abgelaufen ist, ist das hinreichend, dass er bei der nächsten Zuteilung eines Workers wieder volle Quota hat.
  4. Auch der Cache pro User und Worker ist limitiert auf 800MB. Wenn das ausgereizt ist, kann er dem abhelfen, indem er Änderungen an seinem Score zurücknimmt, also mehr Noten wiederverwendet. Hierzu kannst du auch Dynamik und Agogik reduzieren. Ein distinkter Ton wird für alle Noten mit den fließkommawertgenau gleichen Eigenschaften wiederverwendet.
  5. Die maximale Tracklänge ist begrenzt auf 16min 40, also 44,1 Millionen Stereosamples.
  6. Der eingegebene Score (Noten, instrumentdefinitionen, etc.) bleiben nur so lange auf dem Server gespeichert und ist per Button wiederherstellbar, wie der User einen Worker reserviert hat. Wird der an einen anderen User umgeschrieben, überschreibt dessen Eingabe den Speicher.
  7. Wer diese Einschränkungen nicht dulden möchte, und aber Python-Kenntnisse besitzt, kann sich gerne auf eigene Hardware eine Instanz installieren. Code, Dokumentation und gern auch eure Fragen und Fehlerberichte auf Gitlab.
 
Zuletzt bearbeitet:
Neusiker
Neusiker
Tonanie!
Ich habe etwas Dokumentation im projekteigenen Wiki verfasst, die erstmals den Namen verdient, wie ich meine. Wann immer ich hier Sompyler code mit meinen Soundbeispielen gepostet habe, werdet ihr euch wohl gedacht haben, was schreibt der Kerl da, und warum, und ihr habt das sicher schulterzuckend überscrollt. Wohl denn, wehn es interessiert, der muss wohl ein Nerd mit Neigung zur deklarativen Programmierung sein. Viel Spaß damit, und (gerne deutsch-sprachige) Kommentare sind willkommen.
 
Neusiker
Neusiker
Tonanie!
Noch ein Beispiel, 32 technoide Takte, ziemlich minimal, denn ich will ja, dass irgendwer den Text versteht und Verstehen setzt Überschauen voraus. Zwischenzeitlich noch etwas an der Kickdrum weitergewerkelt.

YAML:
stage:
  d: 1|1 0
  r: 1|1 4

instrument d:
  NOT_CHANGED_SINCE: '2021-06-23 07:22:53'
  A: '0.013:1,2;2,2'
  R: '0.35:1;1,0'
  FM: '4.7f[1;1,0;2,0];5:1'
  VOLUMES: '30:100;3,85;5,65'
  PROFILE:
  - match: 1
    S: '0.2:5;10,3;13,1;15,1;17,0'
    FV: '12;1,5!;5,5'
  - match: 10
    A: '0.01:1,1;2,1'
    FV: '3;1,1;5,1'
  - match: 25
    A: '0.002:1,1;2,1;4,1'
    S: '0.12:3;5,2;8,0'
    FV: '1;1,1;5,1'

instrument r:
  NOT_CHANGED_SINCE: '2021-06-20 09:00:00'
  character:
  - SPREAD: [0, 5, -3, 4, -2, -1, 3, 7, -6]
    A: '0.03:1,1'
    R: '0.3:1;2,1;3,0'
  - ATTR: pitch
    30:
      VOLUMES: '15:100;1,70;5,65'
      PROFILE:
        - match: 1
          S: '100;3,85;5,75'
        - match: 15
          S: '100;1,85;5,70'
    250:
      VOLUMES: '15:100;1,55;2,55;5,40'
      PROFILE:
        - match: 1
          S: '0.5:100;3,85;5,75'
        - match: 15
          S: '0.3:100;1,75;5,70'

---
_meta:
  stress_pattern: 3,1,2,0
  ticks_per_minute: 160
  lower_stress_bound: 97
  upper_stress_bound: 100
d: A1 oooo
r:
  - F1 oooo
  - D1 4 .o__..o_o__..o--__

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
d: A1 oooo
r:
  - F1 oooo
  - D1 4 .o__..o_o+7o=_..o-9__

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
d: A1 oooo
r:
  - F4 4 oo+4_. o_..*3
  - D1 4 .o__..o_o__..o--__

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }

---
_meta: { repeat_unmentioned_voices: true }
r:
  - F4 oo+4o--o--
  - D1 4 .o__..o_o+7o=_..o-9__ >rumble

---
_meta: { repeat_unmentioned_voices: true }
r: ['F4 oo+3o--o-5', <rumble]
---
_meta: { repeat_unmentioned_voices: true }
r: ['F4 oo+4o--o--', <rumble]

---
_meta: { repeat_unmentioned_voices: true }
r: ['F4 oo+3o--o-5', <rumble]
---
_meta: { repeat_unmentioned_voices: true }
r: ['F4 oo+4o--o--', <rumble]

---
_meta: { repeat_unmentioned_voices: true }
r: ['F4 oo+3o--o-5', <rumble]
---
_meta: { repeat_unmentioned_voices: true }
r: ['F4 oo+4o--o--', <rumble]
---
_meta: { repeat_unmentioned_voices: true }
r: ['F4 oo+3o--o-5', <rumble]

Ist das nicht cool, unsere Kinder von morgen müssen nicht mehr die einzelnen Frames von Youtube-Schminkvideos auf Höhlenwände pinseln (so ein Sonnensturm macht auch vor Google-Rechenzentren nicht halt), sondern nur noch diesen Text, dann ist wenigstens ein bisschen Musik in die Zukunft gerettet.

Soundupload gibts nicht, habe ja beschrieben, wie man daraus Audio machen kann. Na gut, will mal nicht so sein: wenn wer ne halbwegs aktuelle Spendenquittung für Ärzte ohne Grenzen, Greenpeace oder Unicef hochlädt ... :D

Schönen Sonntag
Neusiker.
 
Zuletzt bearbeitet:
Neusiker
Neusiker
Tonanie!
Hier mal ein Video, nur ne Demo meines Workflows, annotiert in Schriftform. Musik gibt es am Ende auch, nämlich bei 48m09s.

 
Zuletzt bearbeitet:
Neusiker
Neusiker
Tonanie!
Mein Beitrag zum Remix-Battle:
Dieser Track ist gänzlich ohne Synthesizergear entstanden, auch mein E-Piano hab ich dafür nicht angefasst. Eine DAW habe ich auch nicht benutzt. Ob ich das verwendete Programm als eine Art Text-DAW bezeichnen kann, habe ich Zweifel.

Ich habe den Track gescriptet und komplett offline berechnen lassen, was auf meinem 2013 gebraucht gekauften Businesslaptop (Core 2 Duo, 2.26GHz) eine halbe Stunde dauerte und ca. 300MB Arbeitsspeicher benötigte, sowie 117MB Festplattenplatz.
  1. Score-file, diese Datei wird dem Programm zum Fraß vorgeworfen.
  2. fh/sonor2, eine in ersterem referenzierte Klangdefinition, verwendet für die Noten aus der Feder von @spurkopf
In dem Script ist alles teils enthalten, teils referenziert, woraus am Ende die 2m:48s x 44.1KHz Stereosamples berechnet werden können. Die Skriptsprache habe ich entwickelt, allerdings auf Grundlage des Datenserialisierungsformats YAML. Mir war es wichtig, dass sie frei war von Konstrukten der imperativen Programmierung (etwa Bedingungen und Schleifen), alles sollte deklarativ sein, auch sollte es überwiegend Ganzzahlen geben. Angaben im kontinuierlichen Wertebereich sollten soweit möglich mit Verhältnissen ganzer Zahlen ausgedrückt oder anders aus ganzen Zahlen als Grundlagen berechnet werden. Ganzzahlen haben den Vorteil, dass mein Lieblingstexteditor VIM diese, wenn der Cursor darauf steht, inkrementieren und dekrementieren kann per Strg-A und Strg-X, ohne dass ich in den Editiermodus wechseln muss. Das ist der Betätigung von Fadern entfernt vergleichbar.

Die Skriptsprache listet hauptsächlich auf, welche Noten von welcher Stimme in welchem Takt und wann darin zu spielen sind. Musikalische Aspekte wie Betonung und Tempo, sowie auch die Dauernverhältnisse von Tönen etwa für den Swing-Rhythmus (hier 3 Onbeatlängen : 2 Offbeatlängen pro Zählzeit je ein Viertel identisch lang), sind von den Noten wegabstrahiert, in den taktbezogenen Metadaten. Denn auch wenn man einem einzelnen Ton anhören könnte, dass er Teil eines Swingstückes ist, bedeutet es nicht, dass Swing zu der einzelnen Note kodiert werden muss. Auch die Betonung muss nicht zu jeder einzelnen Note kodiert werden. Die Betonungsverhältnisse sowie etwaige dynamische Variationen lege ich lieber taktbezogen fest. Das Programm kann besser berechnen diese Verläufe auf den einzelnen Ton herunterrechnen. Ausnahmen von den taktweise definierten Verläufen, die bestimmte Töne betreffen, sollen nicht unmöglich sein. Aber eben Ausnahmen. Ein Musiker, der eine Tabellenkalkulation bemüht, ist auch für mich eine komische Vorstellung.

Im Script sind keine genauen Frequenzangaben enthalten. Nur Notenbezeichnungen wie "G#3". Das Mapping zu den Frequenzen existiert aber nicht in Form einer Liste oder so, aus Entsprechungen von Namen und Zahlen. Sondern es gibt im Installationsverzeichnis des Synthesizers eine Datei tones_de+en_euro.splt mit Angaben, aus denen dieses Mapping beim Start des Programms berechnet wird. Im Ergebnis ist es durch eine simple Angabe (s.u. "just5lim") möglich, die Musik mit reiner Stimmung zu rendern. Der Wettbewerbsbeitrag hatte noch die gleichstufige Stimmung, denn ich war mir unsicher, ob die reine passt.

Außerdem erst nach Einreichung des Wettbewerbsbeitrags habe ich auf jemandes Anregung hin den Bass (b) als eigenständige Stimme hinzugefügt.

Die Skriptdatei habe ich auf Englisch kommentiert. Persönliche Gewohnheit von mir, in Quelltexten kann ich nun mal leider kein Deutsch schreiben.

Spätestens wenn ihr euch fragt, warum ich nach den expliziten Notennamen Folgenoten in so einer kryptisch-kruden Kurzschreibweise angebe, muss ich wohl euch eine gute Erklärung schuldig bleiben. Hier der Versuch einer Erklärung: Eingedenk dessen ich absehbar eh der einzige Benutzer dieses Programms sein werde und ich daher meiner Vorliebe für einzelne Tastendrücke als Befehl ans System fröhnen kann, wurde es mir einfach zu öde, nachdem ich den ersten Satz der Beethoven'schen Mondscheinsonate durchexerziert hatte mit lauter expliziten Noten. Ich habe mich gefragt, wie Melodieläufe im Kopf eines Pianisten abgespeichert sein könnten und befand: kürzer. Jedenfalls nicht Note für Note.

Diese komprimierte Syntax umfasst Dinge wie relativ-kumulative Tonhöhenänderung (chromatisch, diatonisch oder harmoniegebunden, abhängig von bestimmten Anhängseln an die Ausgangsnote), Rückkehr zum Ausgangston, beliebige Längen, fingerpedalartige Überlängen, Wiederholungen, Klammergruppen, in denen alle Noten zusammen auf einen Tick komprimiert und ggf. wieder gemeinsam verlängert werden je nach Verlängerung, und natürlich Pausen. Neu angeschlagene Noten werden mit 'o' abgekürzt. Oder mit anderen Buchstaben. Diese Buchstaben werden als "Artikel" definiert: Assoziationen von Buchstaben mit Noteneigenschaftengruppen. Wird ein anderer Buchstabe als 'o' an einer Taktposition verwendet, wird die betreffende Note mit den jeweiligen Eigeschaften versehen. Wird diese Eigenschaft als Verlauf im Takt definiert, wird der letztendliche Wert abhängig von der Taktposition berechnet.
 
Neusiker
Neusiker
Tonanie!
Ah, da erinnert sich jemand. War zwar in nem anderen Thread und dort bezog ich mich auf Stücke, die schon gemacht sind und ihrer scheibchenweisen Refi harren. Hab zwar gerade keine in der Mache - das im Anhang ...
Anhang anzeigen HbMuth_Am-Anfang-fielen-Wuerfel_sepVoices.mp3
... hab ich glaub ich schon einzelnen Personen aus der Hand gegeben, unterlag also nicht mehr meiner 100%igen Kontrolle - Aber geht eigentlich auch umgekehrt:

Ich setze die Felder meines Pseudozufallstonfolgen-Generators so, dass ich in ihnen an einer Stelle auf dich und deine Spenden Bezug nehme. Und benutze die Tonfolge als Inspiration für meine nächste Komposition.

Zufällige Tonfolge, geseedet mit dem Text
sushiluv spendet monatlich 15 Euro an die Ärzte ohne Grenzen. Zum Dank "über die Bande" hier eine CC-BY-Komposition von mir, die inspirativ aus dieser pseudozufälligen Tonfolge entsteht.
Neben diesem Text gibt es noch andere Werte, die mit in den Link kodiert sind und eine Änderung derselben ich mir vorbehalte, wenn ich mit einem Ideenpfad nicht weiterkomme. Ich überlege sogar, die Interaktion zwischen dem Tonfolgengenerator und das, was ab Text passiert, komplett umzumodeln. Aber hier ist schon mal das Ergebnis - indes keine fertige Musik, nur eine Keimzelle. Klingt für mich nach Jazz, für euch auch?
Anhang anzeigen ely.ogg
Bald, hoffentlich noch in diesem Jahr, gibts hier MP3, Sompyler-Score-file, Noten und MIDI, wiederum nach Freigabe durch Spenden an gemeinnützige Non-Profit-Orgs.

(todo von mir: Upload Sompyler Score, Noten mit Fingersatzempfehlungen, MIDI von "Am Anfang fielen Würfel")
 
Zuletzt bearbeitet:
T
Turing
Thou shalt not loop
Warum hört sich der Remix-Thread-Beitrag "Swinging Wire Phones" eigentlich so schräg / in sich verstimmt an?
Hast Du den einzelnen Noten über den Sompyler nicht-harmonische, verstimmte Obertöne spendiert? Tuning war ja wie heute gewohnt und kann es daher eigentlich nicht sein?
 
Neusiker
Neusiker
Tonanie!
Du meinst den, den ich zum Wettbewerb eingereicht habe, der auf SC liegt? Der korrigierte hat ja reine Stimmung und es kann sein, wenn du diesen hörst und dann die eingereichte Version, dass du das dann als Verstimmung wahrnimmst. Aber ja, die Obertöne der Drums vor allem und die des Basses sind nicht ganz harmonisch. Auch die mal mehr, mal weniger starke Frequenzmodulation könnte diese Wirkung haben, denn jeder Layer hat seine eigene, mit einer leicht abweichenden Modulationsfrequenz. Deine Ohren sind gewiss empfindlicher als meine.
 
Neusiker
Neusiker
Tonanie!
Da Bearbeiten aktuell oder nicht mehr möglich ist, hier ein Addendum: Krumme Modulationsfrequenz (Faktoren der Trägerfrequenz) führen eh zu Inharmonischen. Der Modulationsindex fällt zwar schnell ab, das Anschlagsgeräusch bleibt aber inharmonisch.

YAML:
# [...]
  FM: "3.52f[0,2;1,1;3,1;4,0];1:5"

- ATTR: whe
  # Wenn der Note ein Parameter "whe" mitgegeben wird, ändere Klang wie folgt:
  10:
    VOLUMES: "10:110;1,92;2,97;4,90;7,85"
    PROFILE:
    - match: 1
      FM: "3.12f@triangle[2;1,1;3,1;4,0];1:2"
# [...]
    - match: 10
      FM: "3.27f[2;1,1;3,0];1:3"
 
T
Turing
Thou shalt not loop
Du meinst den, den ich zum Wettbewerb eingereicht habe, der auf SC liegt? Der korrigierte hat ja reine Stimmung und es kann sein, wenn du diesen hörst und dann die eingereichte Version, dass du das dann als Verstimmung wahrnimmst. Aber ja, die Obertöne der Drums vor allem und die des Basses sind nicht ganz harmonisch. Auch die mal mehr, mal weniger starke Frequenzmodulation könnte diese Wirkung haben, denn jeder Layer hat seine eigene, mit einer leicht abweichenden Modulationsfrequenz. Deine Ohren sind gewiss empfindlicher als meine.
Danke für die Info! Vermutlich kommt es dann durch die FM, denn ich empfinde die Töne in beiden Versionen als in sich etwas unrein.
Dieses leicht Verstimmte wirkte auf mich wie ein absichtlich eingesetztes Stilmittel, damit man beim Hören etwas irritiert wird, und es passte ja auch gut zum Wire Phones-Titel.
 
 


Neueste Beiträge

News

Oben