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
Wie realisiert man eigentlich...
@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?
-
- 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
Gruß DADA
- 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.
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.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- 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
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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ja. Wobei ich mal das nicht definierte Abspielen außen vor lasse.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?!
@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.
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.
-
- 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
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
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.
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.
@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.
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.
-
- 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
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
Hab' wohl zu lange nicht nach "Python Midi" gegoogelt . 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ß
http://wiki.python.org/moin/PythonInMusic
Werd' mal wieder ein bißchen 'rumprobieren ...
Gruß
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):
Bei PySeq ist ein Skript midiplayer.py dabei. Also:
Dann braucht man noch ein Ausgabegerät:
Und dann noch die Verbindung:
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 .
Gruß
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
Code: Alles auswählen
python midiplayer.py datei.mid
Code: Alles auswählen
timidity -iA
Code: Alles auswählen
qjackctl
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 .
Gruß