Danke für einen Kommentar. Ich habe lange darauf warten müssen, dass ich am Ende schon gar nicht mehr darauf gewartet habe, naja. Der Unterschied zu meiner Bass-Drum fällt gleich ins Auge bzw. ins Ohr. Meine nimmt sich im Vergleich viel schwachbrüstiger aus und das, wo mir schon bei meiner über Kopfhörer schon die Ohren wegflogen.
In den ersten Millisekunden sind die Höhen präsenter, Downpitch geht wohl über mehr als nur drei Oktaven, gell. Außerdem ist der Attack in den Höhen eher da als im Bass, check. Mehr Obertöne hab ich der Sache auch gleich mal spendiert.
Code:
r --volume "20:100;1,80;5,60" \
-R "0.5:1;2,1;3,0" \
--profile "1=O:noise;A:0.015:1,1;5,1;S:0.3:100;1,100;2,78;6,70;FV:5;1,1;3,0" \
"20=O:sine;A:0.008:4,1;5,4;S:0.17:100;1,50;2,45;5,40;FV:-1+2;0,1;1,1" \
--spread "5:-30+80;1,75;2,0;3,0;5,30" \
-f Ds1 -l 0.2 --sound /tmp/bassdrum.wav
Höre die Datei im Anhang.
Verdammt, eine Chain aus irgendwelchen tollen grafischen Widgets kann nur von einem fertig gekauften Programm stammen. Das ist fast ungerecht, aber hey, ich wills ja so.[/selfsarcasm]
EDIT: Ich hab mir gedacht, ich erklär mal glossarmäßig. Ob das zu großen Ahaeffekten oder auch nur zu mehr Aufmerksamkeit (nach der ich ja gar nicht süchtig bin, iwo!
) führt, sei mal dahingestellt.
A: attack, zur Notation s. volume.
FV: frequency variation, hier Downpitch um 5 Oktaven für den 1.
Sympartial, bis hin zu einem gar nicht existenten Downpitch beim 20. Zur Notation des Verlaufs s.
volume, wobei die Angaben hier in Oktaven sind.
Neusik: Textdefinierte, deklarativ programmierte Musik bzw. hier einzelne Klangobjekte zur anderweitigen Verarbeitung scheint aus der Zeit gefallen ... wenn ich Musik schon nicht spielen kann (noch nicht, gönne mir Instrumentalunterricht, wo ich als Späteinsteiger mit motorischer Behinderung mit dem Weltuntergang um die Wette fortschreite), möchte ich sie auf eine einzigartige Weise, ja, neue Weise selbst machen, auf eine Weise, die mir nicht zuletzt erlaubt, meine bestehenden Fähigkeiten im textbasierten Arbeiten mit VIM zu nutzen, denn Programmierer war ich schon als Jugendlicher und bin Fan dieses eigenwilligen Texteditors. Ob die wirklich neu ist, keine Ahnung, gibt ja auch CSound, SuperCollider etc., aber die Domain neusik.de war noch frei und mir gefiel der selbstironische Anklang an englisch "noise".
O: Oszillatorprimitive. sine, sawtooth, square, triangle, noise und slopy (S+H noise mit linearer Interpolation). Mischbar per z.B.
noise:3,sine:2
.
Profil: Ordnet Attribute den verschiedenen Sympartials im Spektrum zu. Ggf. werden Zwischenstufen ergänzt und interpoliert, so dass die harmonische Obertonreihe komplett ist.
r: Hat nichts mit der statistikorientierten Programmiersprache R zu tun, sondern ist einfach meine Aliasdefinition
alias r=$SOMPYLER/scripts/render-single-sound
R: release, überlagert sich zeitlich mit dem Anfang des nachfolgenden Tons (legato). Zur Notation s. volume.
S: Decay+Sustain, zur Notation s. volume. Kurve wird verkürzt (trunkiert) oder erweitert, bis Attack und Sustain die nominale Tondauer ergeben.
Sompyler: mein Softwareprojekt und Sprache, um Musik aus Text zu machen. Link spar ich mir an der Stelle, nutzt eh keiner außer mir und das ist okay so, denn self-made software zur Nachnutzung zu bewerben ist eigentlich recht doppelmoralisch. Außerdem hagelt es noch kryptische Fehlermeldungen, wenn man bei der Definition Fehler macht , deren Interpretation Kenntnisse des Quelltextes (Python) voraussetzt.
Spread: Abweichungen von der harmonischen Obertonreihe 1f, 2f, ... nf in Cent, also dem 1200. Teil einer Oktave. Hier habe ich nur die Abweichungen der ersten 5 Sympartials bestimmt, der Rest wird kummulierend fortgeführt, bleibt also hier 0 ... nein, stimmt nicht, hier hab ich einen Fehler gemacht, der dazu führt, das der 6. 60 Cent höher verschoben wird, der 7. um 90 und so weiter. Richtig wäre
--spread "5:-30+80;1,75;2,0;3,0;4,30;5,30"
, so würde die 30 konstant weitergeführt. Habe eben eine Korrektur hochgeladen: bassdrum-fixedSpread.wav.
Sympartials: usprünglich, als es nur Sinus gab, Partial, engl. für Teilton. einzelner Oszillator, der mit einer Frequenz angesteuert wird, und verschiedene Attribute unterstützt, hier nämlich die hüllkurvenbezogenen (A attack, S decay/sustain, R release, AM amplitude modulation) und die frequenzbezogenen (FM frequency modulation,
FV frequeny variation, WS waveshape).
volume:
--volume "20:100;1,80;5,60"
, definiert das Spektrum der ersten 20 Sympartials. 100 = 0dBFS, 80 = -20dBFS usw. 5 bezieht sich auf den 20. Sympartial. 1, 2, ... 5 sind reine Längenverhältnisangaben bezogen auf die angegebene Gesamtlänge, könnte auch jeweils mit n multiplizieren, wurscht. Die nicht angegebenen Werte werden interpoliert aufgrund der Polynomfunktion, die ich hier definiert habe. Die gleiche Notation der Hüllpolygon-Koordinaten für eine polynomische Kurve wird an vielen Stellen benutzt.
EDIT: Beide Beispiele sind immer noch recht schwachbrüstig im Vergleich zum dem Upload von
@borg029un03 . Aber ich lern ja noch. Ein Waffenschmied kann vielleicht gute Waffen schmieden, das heißt natürlich nicht, dass er damit automatisch einen Kampf gewinnt.
"bassdrum-fettereKick-A0.wav" hat noch eine weitere Profilangabe --profile ... "1n+3=O:noise;S:0.005:7;1,10;2,1"
(Jeder Sympartial bekommt noch ein um 3 Cent höheren Noise-Bruder, zum Andicken der Kick in den ersten 5ms). Außerdem habe ich das Ganze von Dis1 auf A0 runtergezogen, damit es besser verglichen werden kann.
... EDIT²: Noise-Bruder, Quatsch mit Soße ... 1n+3 heißt, dass das angegebene Rauschen und Sustain allen Frequenzen ab 4*f bis 20*f zugewiesen wird. In Übereinstimmend mit der Beschreibung hätte es 1n=D:3;O:noise,...
heißen müssen. So klingt es noch mal wieder anders, aber auch nicht weltbewegend genug für noch'n 50kB-Upload. (Alles Murks. Wenn ich den Befehl mit den gleichen Argumenten wiederholt aufrufe, muss das Ergebnis tunlichst gleichklingen. Hab ich ja was zu tun über die Ostertage: Ermitteln, warum es Unterschiede gibt, und nein, es geht nicht um Millionstel oder so, es geht um deutliche, hörbare Unterschiede, die dem Zufall unterworfen sind. Bugs wie dieser sind zum Glück gar nicht schlimm, insofern, wie das allein mein Problem ist.
Aber, heute, Karfreitag – ja, das ist ein weiterer Edit – weiß ich, dass ich mir das sparen kann. Ich krieg die Rausch-Samples vom Zufallsgenerator des Systems. Der Zugriff darauf ist sehr teuer. Das heißt, ich muss in der Initialisierungsphase des Programms ein paar Zufallswerte ziehen, sagen wir 1s bei der aktuell eingestellten Ausgangs-Samplingrate = 44100. Die leg ich im Speicher ab und greife darauf zu, wann immer ich in diesem Programmlauf ich "Zufall" brauche.)