Notationsprogramm

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.
lunar

@Xynon1: Ich habe keine Ahnung, ob man mit Phonon den Lautsprecher der Hauptplatine ansprechen kann, würde aber ins Blaue hinein geraten verneinen. Ist schließlich ziemlich anachronistisch, moderne Systeme besitzen so einen Lautsprecher gar nicht mehr.
problembär

Hallo,

zur Soundausgabe mit Python unter Linux hab' ich bei mir jetzt was viel Cooleres installiert:

1. Fluidsynth,
2. Das SuSE-Paket "snd_sf2" mit dem Soundfont "Vintage Dreams Waves" (128 Klänge),
3. pyFluidSynth

Das Ganze kann man dann mit folgendem Skript testen:

Code: Alles auswählen

#!/usr/bin/env python
# coding: iso-8859-1
import time
import fluidsynth
fs = fluidsynth.Synth()
fs.start()
sfid = fs.sfload("/usr/share/sounds/sf2/Vintage_Dreams_Waves_v2.sf2")
for i in range(119, 128, 1):
    fs.program_select(0, sfid, 0, i)
    for u in range(40, 75, 3):
        fs.noteon(0, u, 30)
        time.sleep(0.2)
        fs.noteoff(0, u)
fs.delete()
Die Instrumentennamen erhält man angezeigt, indem man Fluidsynth von der Shell aus mit

Code: Alles auswählen

fluidsynth -n /usr/share/sounds/sf2/Vintage_Dreams_Waves_v2.sf2
im interaktiven Modus startet und dort

Code: Alles auswählen

inst 1
eingibt. Klingt sehr gut, ein echter Softsynthesizer eben (der noch dazu gleich direkt funktioniert, ohne daß man mit dem Alsa-Sequencer oder Jack hantieren müßte (obwohl man das auch lernen sollte, wenn man wirklich Musik machen will; Zugriff darauf von Python aus wäre eigentlich nicht schlecht, kann ich aber noch nicht ...)).

Gruß

P.S.: Am Ende braucht man sowieso ein komplexes Midi-Sequencer-Programm mit Track-, Piano-Roll und Notationsansicht. Unter Windows war da immer "Cubasis VST" (eine völlig ausreichende kleinere Version des sehr teuren Profiprogramms "Cubase") ganz gut, unter Linux wohl Rosegarden oder Muse, die mich bisher aber beide noch nicht so richtig überzeugen konnten. Ist aber auch schon ein paar Jahre her, daß ich mir sie angesehen hatte. Vielleicht sind sie heute schon besser. :)

PPS.: Übrigens: Fluidsynth kann in der Konfiguration oben auch unmittelbar Midis abspielen:

Code: Alles auswählen

fluidsynth -ni /usr/share/sounds/sf2/Vintage_Dreams_Waves_v2.sf2 somemidi.mid
obwohl die meisten wohl für "General Midi" geschrieben sind, was man wohl typischerweise mit "Timidity" abspielt ...
questlove
User
Beiträge: 65
Registriert: Dienstag 15. Februar 2011, 16:11

vielen vielen dank! ;)
ich selber bin auchschon schlauer geworden und werde euer antworten jetzt mal nochmal genau durchgehen :)

LG
questlove
User
Beiträge: 65
Registriert: Dienstag 15. Februar 2011, 16:11

Ich stehe gerade vor dem Problem , dass ich bei meinem Notationsprogramm auch die Dateien, die man damit erstellt abspeichern will, um sie wann anders forstetzen zu können. Da Mingus keine brauchbare Methode zur Verfügung stellt, die geschrieben Noten in einem Format auszugeben, das man abspeichert und dann einzeln wieder durch methoden aufruft (also ich erstelle die schon geschriebenen Noten nocheimal), dachte ich ich protokolliere einfach die noten auf einer text datei (z.B: A4,G4,D2 für eine viertel a note, viertel g note, halbe d note) und führe einzeln die Methoden Note erstellen mit den empfangenen Werten auf..
Wie kann ich jetzt eine solche Datei an einem bestimmten ort erstellen? (wie die Speichern unter funktion in den Programmen) und kann ich ihnen eine eigenes Kürzel geben, sodass die Datei mit meinem Programm auch geöffnet wird und nicht mit dem Editor?

LG
questlove
problembär

Uff, da willst Du also das Rad noch einmal neu erfinden. Denn das bestehende .mid (Midi-)Format wäre natürlich für Noten sehr leistungsfähig.

Ansonsten gehe ich mal davon aus, daß Du weißt, wie man Textdateien speichert und liest.
Weiterhin, daß Du Tkinter benutzt. Dann brauchst Du also noch den Dateinamen. Dazu schau' Dir am besten mal "pydoc tkFileDialog" an.

Gruß
questlove
User
Beiträge: 65
Registriert: Dienstag 15. Februar 2011, 16:11

Ich würde gerne die Lieder, die man mit diesem programm komponiert, festhalten, um später daran weiterarbeiten zu können. Mein plan war dass ich eine text datei erstelle und zeilenweise ein protokoll vom projekt erstelle, bei dem ich dann nach wiederöffnen jede zeile einzeln durchgehe (am anfang steht der titel und es wird eine methode aufgerufen die den titel setzt, dann kommen noten und es werden methoden verwendet um die noten wieder zu erstellen,....) und am schluss wieder am letzten stand bin. Ist es dann vllt auch möglich diesen dateien ein eigenes kürzel zu geben, welches für mein programm steht, und bei doppelklick öffnet sich auch das programm mit dem projekt?

und wie mache ich eine typische speichern unter funktion? mit methoden des moduls "os" oder?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

questlove hat geschrieben: und wie mache ich eine typische speichern unter funktion? mit methoden des moduls "os" oder?
Ich habe das ganze nicht wirklich verstanden, denke aber mal, dass Du einfach `open` suchst ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
questlove
User
Beiträge: 65
Registriert: Dienstag 15. Februar 2011, 16:11

mit open kann ich eine datei erstellen, das weis ich.
aber ich meinte ich brauch ein "speichern unter fenster", in dem ich sozusagen einen pfad wählen kann, (was ich auch noch nicht weis wie ich das in ein fenster bekomme ;) ) und dann die funktion, die die datei direkt an diesem pfad erstellt.. kann ich das mit open machen? ich hab das noch nicht gesehen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Welches GUI-Toolkit verwendest du denn? Darin sollte ein entsprechender Dialog vorgesehen sein.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Naja, Du kannst `open` ja einen kompletten Pfad übergeben.

Der andere Teil Deiner Frage zielt ja irgend wie auf ein GUI-Toolkit ab. Da müßtest Du erst einmal sagen, welches Du verwendest. Unter Qt gibt es bspw. den `QFileDialog`.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
questlove
User
Beiträge: 65
Registriert: Dienstag 15. Februar 2011, 16:11

nö. tkinter ^^
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

questlove hat geschrieben:nö. tkinter ^^
'Nö' ist jetzt eine Antwort auf welche Frage? :roll:

So, ich bin mal lieb.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten