2009-02-20 8 views
23

Voglio creare una piccola app che crea suoni MIDI. Non mi sono mai occupato del suono nella programmazione, quindi mi piacerebbe iniziare con qualcosa di semplice e con una buona documentazione. Voglio stare con Python poiché sono il più a suo agio e non voglio sopraffarmi da solo, inizialmente.Libreria MIDI cross-platform semplice per Python

Il mio tempo è diviso circa 50/50 tra Windows e Ubuntu quindi qualcosa che "funziona" su entrambe le piattaforme sarebbe davvero utile.

Qualche suggerimento?

+0

correlati: http://stackoverflow.com/questions/507227/high-level-programming-language-for-music-composition –

+0

Perché non contrassegni la tua domanda come risposta !? – Shimmy

+3

La tua domanda non è chiara. Non è possibile "creare suoni MIDI". Il MIDI non memorizza o trasmette suoni, ma solo dati di controllo per apparecchiature/software MIDI compatibili. Suppongo che tu voglia o) parlare con altri dispositivi/software MIDI in tempo reale usando l'interfaccia MIDI del tuo computer o b) leggere e scrivere file MIDI standard (SMF). Questi sono due requisiti diversi (anche se molte applicazioni avranno entrambi) e ci sono diverse librerie da suggerire per entrambe le attività –

risposta

33

la Biblioteca MIDIUtil (ospitato su Google Code here) fa ciò che vuoi : scrivere file MIDI da una libreria Python pura. Una volta bella cosa (e piena divulgazione: sono l'autore) è che non devi tenere traccia degli eventi MID di livello inferiore come note e note: li gestisce per te.

Come esempio per scrivere una nota, si potrebbe fare qualcosa di simile:

MyMIDI = MIDIFile(1) 
track = 0 
channel = 0 
pitch = 60 
time = 0 
duration = 1 
volume = 100 
MyMIDI.addNote(track,channel,pitch,time,duration,volume) 

Spero che questo aiuti

+2

Davvero tardi per postare questo, ma può gestire gli accordi? Potrei implementarlo nel mio software se può ... – Blender

+1

Questo è davvero utile, grazie! – Dan

+2

puoi facilmente definire gli accordi, giusto? 'per pitch in pitch: midi.addNote (.., pitch, ...)' –

8

pyPortMidi è un wrapper Python di PortMidi, che è descritto come "una libreria C multipiattaforma per il controllo MIDI in tempo reale". Non l'ho usato da solo, ma sembra molto promettente. Menzione esplicita di essere in grado di inviare dati MIDI in tempo reale

+4

Per le persone che trovano questa pagina tramite Google: notare che pyPortMidi è stato aggiornato l'ultima volta il 15 marzo 2005. Sospetto che sia stato abbandonato. – larsks

+2

C'è una versione leggermente più aggiornata di pyPortMidi inclusa in pyGame, che ho usato con successo. – rjmunro

+0

non è nemmeno in grado di inviare curve di inclinazione senza scriverle in forma esadecimale grezza? 'player.write_short (0xE0, 0x00, 0x60)':/ – endolith

-3

Vedere cSounds.

+3

Potresti espandere questa risposta? La pagina cSounds non menziona MIDI o Python. – rjmunro

+0

@rjmunro, FYI: http://www.csounds.com/manual/html/py.html –

3

Il supporto per il Midi (entrata e uscita) è stato aggiunto a pyGame 1.9, sebbene sia principalmente in fase di sviluppo e non sia ancora ben documentato, ma funziona.

Il supporto per il Midi si sta sviluppando anche nel successore di pyGame, pgreloaded (o pygame2).

Inoltre, anche se pyGame ha "gioco" nel titolo, i suoi usi vanno ben oltre il semplice design del gioco.

+4

Il supporto MIDI in PyGame si basa sulla stessa base di codice di pyPortMidi (si veda la risposta di @ unwind) e il codice pyPortMidi nel [ PyGame repository] (https://bitbucket.org/pygame/pygame) è attualmente la versione più aggiornata e utilizzabile. Disclaimer: Sono l'autore di una patch alla versione pyPortMidi di PyGame, che ripulisce molto il codice e corregge gravi errori. La patch non è ancora applicata nel [repository portmidi] (https://portmedia.svn.sourceforge.net/svnroot/portmedia/portmidi/), dove il codice pyPortMidi sta vivendo ora. Ci sono molti altri repository pyPortMidi sulla rete che sono obsoleti. –

10

Stavo cercando una libreria Pure Python per generare un file MIDI, mxm's Python MIDI library è esattamente questo.

Da this dzone snippet, c'è una versione singolo file della libreria di cui sopra, smidi.py (gist'd here per i posteri)

L'uso è molto semplice:

>>> import smidi 
>>> m = smidi.MidiOutFile('out.mid') 
>>> m.header() 
>>> m.start_of_track() 
>>> m.update_time(0) 
>>> m.note_on(note=0x40) # single note 
>>> m.update_time(192) 
>>> m.note_off(note=0x40) # stop it after 192 
>>> m.update_time(0) 
>>> m.end_of_track() 
>>> m.eof() 

funziona Presumibilmente su Windows (come l'esempio originale usa C:\out.mid come il nome del file di output), e l'ho testato su OS X

7

Se solo è necessario generare Midi o di processo file midi, provare mingus, Si tratta di un ottimo pacchetto e consente anche astrazioni molto più elevate come accordi, progressioni di accordi, scale e così via.

5

Ho provato otto pacchetti elencati nella wiki http://wiki.python.org/moin/PythonInMusic. ho scoperto che quello che music21 (http://web.mit.edu/music21/) era

  • la più completa
  • il miglior tutorial
  • più semplice per installare sulle finestre

ma come alla vostra richiesta di semplicità, penso che non sia il più semplice. Ma non ho potuto ottenere uno qualsiasi degli altri programmi per leggere i file midi in modo robusto (ho una varietà di formati di file midi strane e meravigliose che stanno intorno)