Pure Data | Organelle | Max/MSP | Q&A

Mein Szenario schaut in etwa so aus:

1739361658253.png

Aktuell eben ein X-Fade (xblend 4 mono Kanäle) von Klangquelle 1 zu Klangquelle 2 (hier in 1000ms, nur so als Test).

Also eigentlich etwas vollkommen Anderes. Und in diesem Fall sogar "passender", da die Klangquellen natürlich sehr unterschiedlich sein können. Das erlaubt mir, random die Puffer einzublenden. Oder vor und zurück zu springen. Was immer ich mag.

Der Ansatz mit den Nulldurchläufen würde abrupt die andere Quelle aktivieren. Oder ich kombiniere beides. Dann wäre es garantiert ohne Knackser.
 
es funktioniert auch nur, wenn überhaupt nulldurchgänge drin sind. und spätetesten bei 5 kHz macht es überhaupt keinen unterschied mehr und knackst immer noch.

im prinzip würde das verfahren mehr dem ähneln, das audiomaterial im nachhinein zu entknacksen als es von vorneherein zu vermeiden. :)

wobei man es sicherlich damit kombinieren könnte, zusätzlich dazu windowing zu verwenden, oder envelopes mit kürzeren fade zeiten zu machen, wie normalerweise notwendig wären.
 
hier klappt das gut:

 
hier klappt das gut:
Vielleicht sollte ich mir den einfach kaufen und gut isses. ;-)

Nee, ich will das schon selber machen. Ich habe nun erstmal den segmentierten Ringpuffer in ein eigenes Objekt ausgelagert und variabel gemacht. Das Einlesen läuft wieder, jetzt kommt wieder das Auslesen. Knackserfrei hoffentlich. Mal schauen... Ich hatte heute mal eine relativ leise Klangquelle (Mikro hier auf dem Dorf aus dem Fenster gehalten). Da hört man die Knackser wieder. Oder man dreht den Input-Gain hoch wie Sau damit das die Knackser übertönt. Dann hat man aber Rauschen wie Sau. Unbefriedigend so oder so.
und spätetesten bei 5 kHz
Danke für den Hinweis. Tatsächlich habe ich es beim Live-Sampling nicht knackserfrei bekommen. Und genau dazu ist der Puffer ja da.
 
ich hatte oben ja das wort "hüllkurve" ins spiel gebracht. du kannst es ja mal so herum denken, und einfach immer nur dann, wenn ein stück auf dem buffer ausgelesen werden soll, dessen amplitude mit einem envelope buffer ein kleines fade-in aufzuoktruieren. and likewise to the end.
 
Zuletzt bearbeitet:
pahhh - ich habe jetzt mal länger max-pause gehabt und fange wieder bei null an :/

folgende frage: ich habe ein multisolider Objekt mit 4 Slidern:

Bildschirmfoto 2025-02-14 um 01.42.05.png

Max Wert pro Slider ist 100 - die vier Slider dürfen in Summe nicht mehr als 100 (Prozent) haben...

wenn ich einen slider hochziehe, sollen sich die zwei links und recht daneben proportional reduzieren und vice versa

wenn ich den ersten hochziehe, sollte sich der 2te und 4te proportional reduzieren usw.

wie lässt sich sowas realisieren?! ich sitze jetzt seit 3 stunden und checks nicht :sad:
 
pahhh - ich habe jetzt mal länger max-pause gehabt und fange wieder bei null an :/

folgende frage: ich habe ein multisolider Objekt mit 4 Slidern:

Anhang anzeigen 244228

Max Wert pro Slider ist 100 - die vier Slider dürfen in Summe nicht mehr als 100 (Prozent) haben...

wenn ich einen slider hochziehe, sollen sich die zwei links und recht daneben proportional reduzieren und vice versa

wenn ich den ersten hochziehe, sollte sich der 2te und 4te proportional reduzieren usw.

wie lässt sich sowas realisieren?! ich sitze jetzt seit 3 stunden und checks nicht :sad:

1000015438.jpg
 
Max Wert pro Slider ist 100 - die vier Slider dürfen in Summe nicht mehr als 100 (Prozent) haben...

wenn ich einen slider hochziehe, sollen sich die zwei links und recht daneben proportional reduzieren und vice versa

wenn ich den ersten hochziehe, sollte sich der 2te und 4te proportional reduzieren usw.

wie lässt sich sowas realisieren?! ich sitze jetzt seit 3 stunden und checks nicht :sad:

haha, das ist ein schönes problem, damit wärst du nicht der erste.

ich fange mal mit tip #1 an: das ganze bedarf zunächst einmal zwei modi, zwischen denen man umschalten kann. der eine davon ist der modus, bei dem man die controls unabhängig voneinander einstellen kann - und somit auch die summe (hier 100) festlegt.
erst danach kannst du nämlich überhaupt die werte von b und c anhand der änderung von a ausrechnen.

hast du diese 2 modi nicht, stört das schon während des programmierens.

tip #2 wäre, dass du beim multislider nicht übersehen darfst, dass der statt "set 0.7" "set 1 0.7" braucht, und zwar auch dann, wenn er nur 1 slider hat. entsprechende abstractions für andere GUI objects müssen für multislider also immer erst mal entsprechend geändert werden.
 
Zuletzt bearbeitet:
ok, die tips sind unzureichend, versuchen wir es anders.

1. du hast einen init state bzw. musst ihn herbeiführen.

2. du hast immer DEN EINEN slider und DEN ANDEREN (wobei DEN ANDEREN für jeden der anderen steht.)

3. wenn DER EINE vom init state aus verändert wird, gilt:

init wert DES EINEN minus neuer wert DES EINEN (aka "die veränderung in prozent")
geteilt durch die anzahl der slider minus 1
plus den ist-wert DES ANDEREN


damit settest du DEN ANDEREN dann immer nur, und gibst den wert aber direkt aus. (sonst schleife, böse, böse)


hier mit 0.25 von maximal 1.

das kannst du jetzt für alle 4 DEN EINEN so machen und wenn es läuft, machst du ein schönes subpatch draus.

1739500369716.png

erst init mode, dann mouse mode.

wie du siehst, muss man nicht mit den GUI objekten herumhantieren beim rechnen, da das [+ ] für die ist-werte als register dient und immer schon alles weiß.

von da an musst du nur noch schauen wie du das ausgeben oder abspeichern willst und musst das ein oder andere gate setzen um irgendwas umzuschalten.

eventuell wirst du nicht die slider zu ableton parametern machen wollen sondern lieber eine numberbox dahintersetzen und die zum parameter machen.
 
Zuletzt bearbeitet:
Das Problem ist ungenügend beschrieben. ;-)

Die Slider können unterschiedlich stehen. Wenn ich alle anderen Slider pauschal um 1/3 des Überhangs nach unten korrigiere besteht die Gefahr, dass Slider den Minimalwert unterschreiten.

Minimalwert des Sliders: 0. Trotzdem nimmt er einen Wert an, der darunter liegt.

1739516764836.png

Vielleicht ist das in Max aber auch nicht so.

Spielt aber keine Rolle, da sich in dem Moment die Rechnung ändert. Es fehlt also ein Minimalwert, der nicht unterschritten werden darf.

Dann muss der verbleibende Überhang des Slider der seinen Minimalwert erreicht hat auf die verbliebenen Slider verteilt werden.

Zusatz-Feature: Slider-Wert einfrieren, da der Slider den behalten muss. Auch, wenn ein anderer Slider den Gesamtwert über das Maximum bringen würde.
 
puh. bin noch nicht dazu gekommen das alles anzutesten / auszuprobieren… bin auf jeden fall sehr überrascht, dass es sich dabei um ein scheinbar ziemlich komplexes problem handelt…. 🙄
danke aber mal für all die tipps!
 
Einfacher ist es, das Empfängermodul so zu gestalten, dass es alles über dem Maximalwert ignoriert. Für den Benutzer gibt es dann kein direktes Feedback, aber zumindest bist du dann in der Funktion save. Und das ist eh die bessere Herangehensweise. Daher ist Modularisierung auch so wichtig.
 
also ich habe jetzt rumgespielt - aber ich muss sagen, der aufwand dafür lohnt sich nicht -- mich frustriert es extrem mit solchen Sachen stunden zu verbringen, ohne dass es am Ende zu irgendwas führt. das ist echt extrem frustrierend.

ich hätte gerne eine multislider gehabt, mit dem ich 4 Wahrscheinlichkeiten (Summe 100 %) einstellen kann, zu den Slidern 2, 3, 4 ein Dial zum Transponieren um +/- 36 Semitönen. Ziel wäre es, die eingehende MIDI-Note mit unterschiedlichen Wahrscheinlichkeiten zu transponieren bzw. mit slider Nummer 1 die Wahrscheinlichkeit einstellen, damit die Originalnote gespielt wird. Dachte nicht dass es so schwer ist. Bin kein absoluter Anfänger, aber sowas sollte doch nicht sooo schwierig zum Umsetzen sein?!
 
In etwa das, was ich hier gemacht habe.


Allerdings inklusive Akkorden (einfache Dreiklänge, Terz und Quinte) und mit wechselnden Skalen.
Nein, das ist nicht so schwierig. Aber deine Sliderbegrenzung ist halt Luxus. Sowas in PD oder Max zu machen ist halt was für Sadisten. Die Werte lassen sich ja einfach mittels 1739555863663.png eingrenzen. Was dann am Slider passiert, kann dir egal sein.

Hier ohne [clip] sondern mit Berechnung und [spigot]. [t] sorgt dafür, dass die Events in einer definierten Reihenfolge gefeuert werden. Du willst ja erstmal schauen, ob der Wert über 100 liegt bevor du das in die Verarbeitung gibst.

1739557083845.png
 
Ich selbst stehe vor einem kleinen Rätsel mit meiner Hüllkurve. Das Knacksen hört einfach nicht auf.

Anhang anzeigen recording_2.wav

Es tritt mit jedem Neustart der Hüllkurve auf. Was ich nicht kapiere, da ich mit der Amplitude erstmal auf 0 gehe.

ENV: 0 100 (0 in 100 ms)
ENV: 1 100 (dann 1 in 100 ms)
ENV: 0 100 71 (dann 0 in 100 ms nach 71 ms 1)

Das Problem sitzt mit Sicherheit vor dem Rechner. Ich muss da mal eine Nacht drüber schlafen.
 
Okay, das Problem war der Startpunkt des Playheads. Sobald ich den ein paar Millisekunden nach vorne schiebe ist das Knacksen weg. Dann hört sich es sogar ohne Hüllkurve noch fast knackserfrei an.

Dann hab ich's jetzt wohl endlich. ✌️
 
Das Problem ist ungenügend beschrieben. ;-)

Die Slider können unterschiedlich stehen.

hat er bislang nicht gesagt, aber könnte natürlich sein.

das ist dann noch eine ecke komplizierter, aber im großen und ganzen das gleiche prinzip.

da ist dann halt nur auch die summe eine variable, und der gesamtbereich dessen, wo die werte gespeichtert werden, muss größer sien als der des sliders.

das ist dann exakt das, was in jeder DAW oder jedem digitalmischpult bei beim gruppieren von fadern passiert - da können slider oben anstoßen, stehen aber aus sicht der gruppierungsberechnung bei +15 db
 
Zuletzt bearbeitet:
habe jetzt gestern nacht eine andere lösung für mich gefunden… also nur 2 alternative transponierungsoptionen, mit 2 der 3 multislider ist es einfach, dass sie sich gegenseitig „ausgleichen“. danke auf jeden fall für eure tatkräftige unterstützung. auch weil die infos so schnell kamen, das ist wirklich toll hier im forum ❤️
 
habe jetzt gestern nacht eine andere lösung für mich gefunden… also nur 2 alternative transponierungsoptionen, mit 2 der 3 multislider ist es einfach, dass sie sich gegenseitig „ausgleichen“. danke auf jeden fall für eure tatkräftige unterstützung. auch weil die infos so schnell kamen, das ist wirklich toll hier im forum ❤️

lad gerne das (teil-)projekt hier hoch oder mach einen screenshot. mich würde interessieren wie Du es gelöst hast.
 
hier mal der umdokumentierte screenshot:

Bildschirmfoto 2025-02-16 um 01.29.59.png

komischer weise kann man hier keine amxd-dateien hochladen ... keine Ahnung ob man das ändern kann @Moogulator (?) - wäre jedenfalls cool zum patch tauschen... lg
 
vielleicht fortgeschrittener anfänger, mein problem: ich mache öfter mehrmonatige max-pausen & vergesse dann immer 2/3 😅 … tw. habe ich mir v.a. die „listen“-sachen aus dem helpfiles geholt…
 
Code:
<pre><code>
----------begin_max5_patcher----------
2908.3ocyb00caibC8YmeErp4gjVG1A.ym8zWZ66s+.xtmbjsoS3tRT9HQkM
6tm8+9BPJJ+Ek0PwQL1IwwhjRf3NW.bwLC8u+lKlc0puUrYV1+L6iYWbwu+l
Ktn4PxAtX2quX1x4e65Ey2zbYypJ9kUW8Sytr8T0Eeqt4v0YKxVzczpsKKqV
TT27NfcG7t40W+kxpO+o0EWW2ZQStxRX.L5f0iVvcYFXs4fypsNM3sNk0n4C
pT4pKyP96Y+381X015Nif6NZ6gp+06JZsvrYWx+a+ap7llaV1A9felbn+3Mu
Q91kiy4WT90h7qlW8yaFJBPdUNncJCXbnKvv.I9oJ21fAfWgFT4LwfAvAwf9
7eyo3+WuZ4xhp5mA.+2uLu55hen5+ut7ykUyW7CU+uU0EcW1hxphqWssp4Zo
NvXcwF9iZdc4ppOc7q3dHCHAGbx2z1lu+PH4guoGBJwNf3yUd9ONq23Yj2.L
jmqP9OP.AskT.OBYT4jl+Iiwo4eviO4t3wCLpmi91Tx9VM+Fl784gx8PqOm7
HocdDAefHH8bular93e5SAAVVrYy7OW7LHf502wWHty3xICFHMYUFkFLxfpI
2K3AmRBQhyL4aFoSYTG3nSwuuZacMymGZxkdbRdvtc7EzFOp3btbRWT23j5D
N7BNX196r0yWVTWr9SEUyuZQyaUcJz+sKupX8fAA.xE+MDBjI.jxaujS65yC
bVWNTGrbb.GZGwP8KVj4vHgMjbjn+DA+kOHQpCNTnW.hKCG.vYbNNCPfoJL2
gLmZrPojYuWrwkvDg0YWkUNX9QvmywHZN7vRRbRPb+fMWnGNs0ykmQmyOJUH
someAbvjR4HEe6t0Yrod26d6sP1+Ptwy9aYu8V78uu2Rx3PYL8AYZiNWKLFq
h7VKSbf8PFAoJ8oNL66blCh0bH9tgK9qMjNbFybP1IJyQ4sYu6skP1+J6sk3
6yp+RQUFjUrXSQFeKiYvPSpffIWKzAtNJPNJnXXRq2waHTwJcsrfWQvuJmSv
nIP44SAn1jXk9.kTsF3vwBLWyjnfIvoS7bY3oRrAASmXid8xISsAguNTavYK
xYVuk7f7k1n3VCXE1MAC1fi7NavPmwbF3qa0F8CPH0p1vqQzy8BawyhZCRkx
DACNoH33TcRPOp3ZmJC5HQoEzVPQ6cdqTPUlAfPtIkIBvIrqi98RR0Ezm5Pe
XpH7a9kR1Yy5O+O8RTdtYC4Kf0KEXUEFY5BPHmo8FjqNZrFKH4+YBZSQAtWM
s1EHmBRIK.RZcvME0YT1agLL6sCtlH24Ua4Of47NT6ko4S5JyJ4FX4.baYlf
Tsv4xYwDPfkQfVCChXRgDJg5tua9OmUdfNPdQrfxkAcviNqLGSLRvwPB4vyE
K.k0nrbLjlxQmW6IqHYvZ8IMEAfolbfB4fNExgByQo6KtuKMKHrERBTqZbO6
5AOwhHYxAlKbCkntfYKXHsPB7JfbnnVETpfm6Gf0QGD5gocl6LxoPDjCxhL3
ZnjDgvsjwkQsoDKTgj1n9hSY4BzcymE2i.w5K4HF1EIL2IgJAiiXlglhZACn
WrMhC1JgxOc8eZ5ZyVQZti5FgA7Pd6DWABBfZqwe9jRpnWGhpMTnc1XjjBdq
Wq7SMR.upEU2KSAw1NvUb4SqhKWDNGZps5Ye289doGSj6CSX9ft4jk7ANcWa
B9tIpjo+rdJVg44q0RyTMaT+1h7k0GRnMNP.pSIk2ycWJUPscqaXRmjIiaBI
BvtVFQE6rAh7ZgIznOxo3ioIBrVy4iInmVlvf6zteDZpnBloiJzujnojJnlV
pvvmvodQnIhJftTtKKJqto3acG81UU0aJ+slaglsDwKPbjqshGbZ9T92qKmu
X1gALtmqbTZzRldNMZ3ltkxo6.LG2rki6EyKSgQCdACYeOfpwGab97bK03jt
.qXP4E.PzYR6VvGQLgrdObemll8fBRINXxk5XoaWrhuuNBvc6p0Km2.A1jAk
1cSBHhbCrVKx8OJSBnosWVsrGa.kQ6NaPIRSVdoLNuzP3lX5.TX2l0QaLRBe
VInz6KlGDkuZixIBBkMrzohu8isoTyOieb9NdPp37iggPalMzn0AxAxTEfdU
auSVRww1Nuz8fSOFRY+fl47MAJmsLh8x5PY2uIy9jWwMVobglE5+Xgwm1Dtf
1jthMJEqCJ6dMKiZaPz+9mCcsSrcPAZTPNWm1qzsKHNIUEK2tntbyhxatuR5
A1gkgbhbVqHdD3b0xhwwhnbADUNG37AiQBR.cylvTx2bues4t4WWJ4j6eeb9
PmcSQMCz78XqUUseXOQ90yIvcDcZP6qXClaDuI3kx6NvPOvABGMNmuW2T+qs
EOfAG6OU0h96CdEIUPt2zPdsnh01nZVQxPNejfh31m7MysvXVQxCM0IzIEZ2
rUqu4AYs95706Sms+jej9wivwAtzIHKnDfJiIv0DjZAsbDCKAV5JPR1oglsX
rOgawXP4xsrVnfAQODLxj22P96wVCnpCq0a9AP5WbyQrOtZ9WKt4SyqqWWd0
15h6+oM6FN1MdHP9hsEqts6vcG+ge7rtyOueXod87pM+0tahGccK2E9K6ppd
OcYCD+gCc9U2v+swJ5dN8lurZccL2FcPIzy41VUderup87Mj1t+6rvfOB80h
OOG8zvdM9mmb87xdgWCrW30A6E9dydOwMPHetzraYT9lR1m+MMnOwx0uZv6i
FJmUZ6cbWxbgXTaE0kZStWwgdbyKbnGW2xEQo4SqC5SayRc.DfIu2rZ4or5N
8RCPuKmz.qjSye4YILmgmPJHkcrsayC0+CphdXrf926PhpBEP.48AEZs5TtQ
YBoDKVVdS4tIcpOzvMPzv4ZluCqiLZimbi6AFTjqdvmYPUR2PHWeR6HjdwfW
Xy2mLNfKkaAjA2pB2ql4o5NlnNUboj7us5EG3GXAABvbq7z4PP.CJvBPJX+G
b4tcuRC.ljBBFHwIAYYZaJRhtf9l0oi699iNmbW9HJwiOR+OVmThwH9dq2o4
TMzo4L6+rZwMyFFtZTPt7zY6jGEc9ENU6Fs6kg09V2qDiJkUe+.Er6QW4gjM
sJ46V+GBYMWPyz09jeYEzbOKG+w33lUaWecmE1Ifg6ScuctoXScY09lf+39J
bMWTuiUwZIVjvwsDlBCweFvwriMQF5XNjryHGuk5F.dQS0AviyRwvGZHM3Xs
TLnGnSfOYcw5S2SaVsVVO.I9b7lFhI7BlBm7Iit6cR77aZx1uoUiyz5nhAoT
vhfnLEj.SYhAPMoHElwFgkdBHmngtnLs73WzqsGWXoIlrblTj6wDCA8ITqTA
vQEanCmiTBwYaU3rL3FSfZWNqwYoXjz.9yQgk3LMoNGDKMES99TnFIJVTJFI
IarRDnwZIL1hkiUQ.AwpHXzVJFxnIEUFarzwzSAlTXoXTbm.6fQUqOEASnMl
FiRAenwRXLVJI9zQapLEExQSLJ4ezcyxxataE2F+l62FstmtM6HLjSflzV9k
VKZk0rv4Ze18d7Ft84WYpSrGkO1flIudFFSpdLE53gXle.froxTGWhaJlcE4
WfZQVAa7lJpNgbIYvJpVKSggrgnDToShshZtOrIgWX7CoKfDXKHJaAi1VwJ8
dzdkNdlwn8pnzgBIo4k82wGILFRlsNNFhIwVXT1JM9ELYYciRjcyuliFusvn
n7ljDdgSWgKHJ2JMpL.8TU4BnnmIcbz1JpXKHM9EDseM57tpnXFPRxYnhohr
wkLScrT7FSxL0Q64KMdEE8LGOdhAD8DYNZaEgkzOOxpcIfme2cesX8lcWciM
lsb9OsZ898y.2NZU6KadbFmst3qkcWuo4HyWe8WJqKttd651kB+a11Gn8Yx1
wcc01xc84wdGaxlEjWV1b4Yao8MHqa+a9i27m0qQjU.
-----------end_max5_patcher-----------
</code></pre>

so?! 🙄
 


Zurück
Oben