Wie realisiert man eigentlich...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dada.dscorp
User
Beiträge: 5
Registriert: Freitag 6. November 2009, 19:02

Wie realisiert amn eigentlich einen Midi-Sequencer a la TB303?
Einen Patternsequencer also.

Hat schon jemand Erfahrungen gesammelt, und weiss, wodurch man eigentlich ein Pattern realisieren kann?

bis denn dann
dada
BlackJack

@dada.dscorp: Eine eigenartige Frage. Was ist denn ein Pattern? Ein Folge von Noten? Welche Grunddatenstruktur kann man da wohl nehmen… Hast Du das Tutorial in der Dokumentation schon durchgearbeitet?
dada.dscorp
User
Beiträge: 5
Registriert: Freitag 6. November 2009, 19:02

Ohh, `Tschuldigung. Ein Pattern ist eine Sequenz von Notenwerten, die in einer Schleife abgespielt werden kann. Das Tutorium habe ich durchgearbeitet, aber ich bin nicht sicher, welche Möglichkeit die bessere ist. Als Optionen kämen ja nur Listen oder Tupel in Frage?! Oder liege ich falsch?

Gruß DADA
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nein, es sind nicht die einzigen Moeglichkeiten.
Was du verwenden kannst, ist eine Frage, was du denn brauchst.
Kann(/soll) sich das "Pattern" nicht aendern, reicht ein Tupel, andernfalls nimmst du eine Liste.

Eventuell willst du auch eine Klasse, aber keine Ahnung, was du erreichen willst.
dada.dscorp
User
Beiträge: 5
Registriert: Freitag 6. November 2009, 19:02

Erst einmal soviel: Wie bestimmt schon aus der Frage ersichtlich, beschäftige ich mich jetzt seit über 10 Jahre wieder mit dem programmieren; soll heißen: es ist nicht mehr viel übrig von dem Wissen, welches mir damals bei der Amigaprogrammierung zur Verfügung stand.
Deshalb brauch ich Eure Hilfe.

Mein Ziel ist es, einen einfachen kleinen Sequencer zu schreiben, der nur ein Pattern wiedergeben kann, welches aber nach einmaligem "Durchlauf" gewechselt werden kann.

Am liebsten wäre es mir, dass beim Abspielen des Pattern auch Änderungen an den Noten vorgenommen werden können.

Kleines einfaches Beispiel; das Pattern besteht aus acht achtel Noten der Tonhöhe C3.

c3 c3 c3 c3 c3 c3 c3 c3

Jetzt läuft sie Sequenz durch und startet wieder von vorn.

c3 c3 c3 c3 c3 c3 c3 c3

Und wenn sich der Benutzer dazu entschließt, einen Wert zu ändern, so soll dies möglich sein. Also direkt während des Abspielens.

c3 d3 a5 c2 f4 c3 c1 d3

Also wäre es am besten eine Liste zu nutzen?!

bis denn dann
dada
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

dada.dscorp hat geschrieben: ... Und wenn sich der Benutzer dazu entschließt, einen Wert zu ändern, so soll dies möglich sein. Also direkt während des Abspielens.

c3 d3 a5 c2 f4 c3 c1 d3

Also wäre es am besten eine Liste zu nutzen?!
Ja. Wobei ich mal das nicht definierte Abspielen außen vor lasse.
BlackJack

@dada.dscorp: Eine Liste, eventuell in einer Klasse gekapselt, welche die Operationen auf so einem Pattern bereitstellt.

Je nach Vorwissen scheint mir das aber schon eine relativ hochgestecktes Ziel zu sein. Denn die Benutzerinteraktion deutet auf die Verwendung von Threads hin, und das auch noch in Verbindung mit einer GUI. Reinen Anfängern würde ich das nicht als Einstieg empfehlen. Da kommt es also auch ein wenig darauf an, wie die Programmiererfahrung von damals aussah, und wieviel sich davon reaktivieren lässt.

Ausserdem musst Du Dich auch noch mit MIDI auseinandersetzen, falls da nicht auch noch Wissen vorhanden ist. Und eine entsprechende Bibliothek für Python braucht man dann auch noch.
dada.dscorp
User
Beiträge: 5
Registriert: Freitag 6. November 2009, 19:02

Ne GROßE Aufgabe wird das für mich werden, jawohl. Doch man muss halt üben und üben, von sonst kommt ja nichts.
Die Kapselung der Pattern hatte ich mir auch schon überlegt. Da kommt mir die Objektorientierung ja hilfreich entgegen. Zu Zeiten der Amigaprogrammierung hat es soetwas noch nicht gegeben (oder zumindest nicht in der Menge). Deswegen ist natürlich auch das ein neues Feld für mich.
Meine Programmiererfahrung aus vergangen Tagen beläuft sich auch Texteditoren. Das war mein Gebiet. Nun ist es die Midiprogrammierung; wobei ich glücklicherweise Midi-Kenntnisse besitze.
Es soll ein kleines Midi-Projekt werden, dass mir die aktuelle programmierweisen näher bringen soll, und dass mich wieder fitter macht. Auch wenn das Ziel hochgesteckt ist, werde ich mich daran versuchen.

Außerdem bin ich von diesem freundlichen und schnellen Pythonforum begeistert, dass mir vielleicht auch ab und an helfen kann. :-))

lg dada
problembär

Schätze, Du meinst sowas wie den MilkyTracker.
Bin nicht sicher, ob sowas in Python schnell genug laufen würde.
Ich glaube, viele Tracker unter Linux bauen auf libmikmod oder libmodplug auf. Leider kenne ich dafür aber keine Python-Bindings.
Na ja, bin gespannt wie weit Du kommst!

Happy Tracking!

P.S.: Zu Skriptsprachen und Midi habe ich bisher noch nicht viel gefunden, bis auf den Artikel "Hacking Perl in Nightclubs". Bin damit aber nicht allzu weit gekommen :(.
Ach so, und Ben Daglish (einer der bekanntesten C64-Musikprogrammierer) hat ein paar musikorientierte-Perlmodule auf CPAN.

P.P.S.: TB-303 selbst und ein paar andere alte Roland-Kisten wurde als "Rebirth" unter Win und Mac emuliert. Die Software soll inzwischen kostenlos sein.
Auch lmms (oder das kommerzielle FL Studio) könnte man sich bei Interesse mal anschauen.
BlackJack

@problembär: Es geht hier ja um MIDI, d.h. die Töne generiert jemand anderes. Der Tracker ist nur zum Ansteuern da. Dafür sollte Python grundsätzlich schnell genug sein, ich weiss nicht, ob es vom Timing her präzise genug wird.

Ein Module-Tracker wäre vielleicht etwas anderes, andererseits wäre es sicher spannend einen Player in Python zu schreiben, und mal zu sehen, wie weit man kommt, und welche Teile man dann mit Cython oder C-Code beschleunigen müsste.
dada.dscorp
User
Beiträge: 5
Registriert: Freitag 6. November 2009, 19:02

Erst mal ein Dankeschön für die rege Beteiligung.

Die Sache mit der Geschwindigkeit von Python sollte eigentlich kein großes Problem darstellen. Der Umfang dieses Projektes ist so gering, dass es eigentlich keine großen Timingprobleme geben sollte. Mein Ziel ist es, einen Midi-Kanal (also eine Midi-Spur) zu nutzen, um als "musikalischer Notizblock" zu dienen. Bei meheren Spuren ist das Timing natürlich wichtig.

Python soll keine großen Berechnungen durchführen, sondern, wie BlackJack richtig sagt, nur zur Ansteuerung von externem Midi-Equipment dienen.

bis denn dann
dada
problembär

Hab' wohl zu lange nicht nach "Python Midi" gegoogelt :oops:. Inzwischen gibt's offenbar einiges (mehr als früher), auch zu Midi:

http://wiki.python.org/moin/PythonInMusic

Werd' mal wieder ein bißchen 'rumprobieren ...

Gruß
problembär

Hallo nochmal,

konnte einen Midiplayer in Python in Gang setzen. Ist aber ziemlich systemabhängig:
Also bei mir (SuSE Linux 10.0 mit Python 2.4, ctypes) konnte ich PySeq-0.3.6 installieren. Dazu habe ich den Inhalt von pythonmidi 0.1.4 kopiert (offenbar kein Installationsskript nötig).
Ich muß noch den Alsa-Sequenzer starten (als root):

Code: Alles auswählen

modprobe snd-seq
Bei PySeq ist ein Skript midiplayer.py dabei. Also:

Code: Alles auswählen

python midiplayer.py datei.mid
Dann braucht man noch ein Ausgabegerät:

Code: Alles auswählen

timidity -iA
Und dann noch die Verbindung:

Code: Alles auswählen

qjackctl
Dort Midi-Out von midiplayer.py mit Midi-In von timidity verbinden.
Dann noch Audio-Out verbinden. Läuft.

Kann sein, daß man so auch über Python Musik programmieren kann, anders als bei Pygame (oder?).
Schade, daß den Weg oben wohl nur ganz wenige nachvollziehen können, so daß man sich damit nur unter sehr wenig Leuten austauschen kann.

Viele andere Module konnte ich nicht kompilieren/installieren ...

Python mit ZynAddSubFX könnte lustig werden :P.

Gruß
Antworten