Projektvorstellung: Sompyler

Neusiker
Neusiker
Tschingderassabummschepper
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
Tschingderassabummschepper
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).


play: https://www.sequencer.de/synthesizer/attachments/anfaengerstueck_1-mp3.37016/
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.
Außerdem habe ich mich entschieden, ein Soundcloud-Profil anzulegen, auf dem ich neues eigenes oder Public-Domain-Zeug veröffentlichen werde.
 

Anhänge

  • anfaengerstueck_1.mp3
    2 MB · Aufrufe: 449
Zuletzt bearbeitet:
Neusiker
Neusiker
Tschingderassabummschepper
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.


play: https://www.sequencer.de/synthesizer/attachments/moonlight-mp3.49047/?temp_hash=941c033f610c192771ca47ab83e384f4

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: 665
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.


play: https://www.sequencer.de/synthesizer/attachments/moonlight-mp3.49047/?temp_hash=941c033f610c192771ca47ab83e384f4

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!
 
Neusiker
Neusiker
Tschingderassabummschepper
Coole Sache!
Höre ich da Aliasing aus meinen PC Lautsprechern?
Dürfte kein Aliasing sein, da ich alle Frequenzen über der halben Sampling-Rate (Nyquist-Schwelle) gar nicht erst render. Oder reicht das nicht, um diese Artefakte auszuschließen?
 
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
Tschingderassabummschepper
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:

play: https://www.sequencer.de/synthesizer/attachments/moonlight_sonata2-mp3.49150/
 

Anhänge

  • moonlight_sonata2.mp3
    3,2 MB · Aufrufe: 260
Zuletzt bearbeitet:
Neusiker
Neusiker
Tschingderassabummschepper
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.


play: http://sompyler.floritiv.de/2019-05-25/moonlight_sonata_2.mp3

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
Tschingderassabummschepper
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 eines Pluszeichens vor dem Nutzernamen*, im Anschluss nochmal ohne versuchen. Wenn es nicht funktioniert, schreibt mich gerne privat an. 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: 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 Plustrick. Den Plustrick ändere ich ggf., wenn es mir trotz der Schikanen insgesamt zu viele Anmeldungen von egal wem werden sollten, zu etwas anderem, 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 rhythmische Abfragen. 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
Tschingderassabummschepper
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
Tschingderassabummschepper
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:
 


Neueste Beiträge

News

Oben