Beispiel #1
0
class Song:
    def __init__(self, tracks, length):
        self.song = None
        self.tracks = tracks
        self.length = length
        self.actual_track = 0
        self.tracks_list = []

    def add_track(self, track):
        self.tracks_list.append(track)

    def save_song(self, output="my_file.mid"):
        self.song = MIDIFile(len(self.tracks_list))
        for t in self.tracks_list:
            self.song.addTempo(self.actual_track, t.start, t.tempo)
            self.add_pitches(t)
            self.actual_track += 1
        with open(output, "wb") as output_file:
            self.song.writeFile(output_file)

    def add_pitches(self, track):
        for list in track.board.values():
            for note in list:
                self.song.addNote(self.actual_track, self.actual_track,
                                  note.get_pitch(), note.time, note.duration,
                                  100)
        self.song.addProgramChange(self.actual_track, self.actual_track,
                                   track.start, track.instrument)
Beispiel #2
0
class Midi:
    """Musique midi"""
    def __init__(self,partition,tempo):
        # Définition des paramètres MIDI.
        piste = 0
        temps = 0
        self.sortieMidi = MIDIFile(1)
        # Nom de la piste.
        self.sortieMidi.addTrackName(piste,temps,"Gregorien")
        # Tempo.
        self.sortieMidi.addTempo(piste,temps, tempo)
        # Instrument (74 : flûte).
        self.sortieMidi.addProgramChange(piste,0,temps,74)
        # À partir des propriétés de la note, création des évènements
        # MIDI.
        for note in partition:
            channel = 0
            pitch = note.hauteur
            duree = note.duree
            volume = 127
            self.sortieMidi.addNote(piste,
                                    channel,
                                    pitch,
                                    temps,
                                    duree,
                                    volume)
            temps += duree
    def ecrire(self,chemin):
        """Écriture effective du fichier MIDI"""
        binfile = open(chemin, 'wb')
        self.sortieMidi.writeFile(binfile)
        binfile.close()
Beispiel #3
0
class Midi:
    """Musique midi"""
    def __init__(self, partition, tempo):
        # Définition des paramètres MIDI.
        piste = 0
        temps = 0
        self.sortieMidi = MIDIFile(1)
        # Nom de la piste.
        self.sortieMidi.addTrackName(piste, temps, "Gregorien")
        # Tempo.
        self.sortieMidi.addTempo(piste, temps, tempo)
        # Instrument (74 : flûte).
        self.sortieMidi.addProgramChange(piste, 0, temps, 74)
        # À partir des propriétés de la note, création des évènements
        # MIDI.
        for note in partition:
            channel = 0
            pitch = note.hauteur
            duree = note.duree
            volume = 127
            self.sortieMidi.addNote(piste, channel, pitch, temps, duree,
                                    volume)
            temps += duree

    def ecrire(self, chemin):
        """Écriture effective du fichier MIDI"""
        binfile = open(chemin, 'wb')
        self.sortieMidi.writeFile(binfile)
        binfile.close()
Beispiel #4
0
class MIDInotes(object):
    def __init__(self, tempo=120, outfile='midi.mid'):
        self.tempo = tempo
        self.outfile = outfile
        self.tracks = []

    def add_track(self, note_list):
        self.tracks.append(note_list)

    def add_note(self, track, channel, note):
        time = note[0]
        pitch = note[1]
        velocity = note[2]
        duration = note[3]

        # Now add the note.
        self.MIDIFile.addNote(track, channel, pitch, time, duration, velocity)

    def save_midi(self, instrument):
        # Create the MIDIFile Object with 1 track
        self.MIDIFile = MIDIFile(len(self.tracks))
        #self.MIDIFile.addProgramChange(0, 0, 0, instrument)

        for i, note_list in enumerate(self.tracks):

            # Tracks are numbered from zero. Times are measured in beats.
            track = i
            time = 0

            # Add track name, tempo and instrument change event
            self.MIDIFile.addTrackName(track, time, "Track %s" % i)
            self.MIDIFile.addTempo(track, time, self.tempo)
            self.MIDIFile.addProgramChange(track, 0, time, instrument)

            for n in note_list:
                if len(n) == 2:
                    note = n[0]
                    channel = n[1]
                else:
                    note = n
                    channel = 0
                self.add_note(track, channel, note)

        # And write it to disk.
        with open(self.outfile, 'wb') as binfile:
            self.MIDIFile.writeFile(binfile)
Beispiel #5
0
class MidiWrite(OutputRajapinta):
    def __init__(self, max_tracks, filename):
        self.filename = filename
        self.midi = MIDIFile(max_tracks)

    def nuotti(self, track, channel, pitch, time, duration, volume):
        self.midi.addNote(track, channel, pitch, time, duration, volume)

    def tempo(self, track, time, tempo):
        self.midi.addTempo(track, time, tempo)

    def soitin(self, track, channel, time, program):
        self.midi.addProgramChange(track, channel, time, program)

    def kirjoita(self):
        file = open(self.filename, "wb")
        self.midi.writeFile(file)
        file.close()
Beispiel #6
0
class Midi:
    """Musique midi"""
    def __init__(self, partition, titre, tempo):
        # Définition des paramètres MIDI.
        piste = 0
        temps = 0
        self.sortiemidi = MIDIFile(1)
        # Nom de la piste.
        self.sortiemidi.addTrackName(piste, temps, sansaccents(titre))
        # Tempo.
        self.sortiemidi.addTempo(piste, temps, tempo)
        # Instrument (74 : flûte).
        self.sortiemidi.addProgramChange(piste, 0, temps, 74)
        self.traiter_partition(partition, piste, temps)

    def traiter_partition(self, partition, piste, temps):
        """Création des évènements MIDI"""
        transposition = partition.transposition
        for neume in partition.musique:
            for note in (
                    notes for notes in neume if isinstance(notes, Note)
            ):
                channel = 0
                pitch = note.hauteur + transposition
                duree = note.duree
                volume = 127
                self.sortiemidi.addNote(
                    piste,
                    channel,
                    pitch,
                    temps,
                    duree,
                    volume
                )
                temps += duree

    def ecrire(self, chemin):
        """Écriture effective du fichier MIDI"""
        with (
            open(sys.stdout.fileno(), 'wb')
            if chemin == '-'
            else open(chemin, 'wb')
        )as sortie:
            self.sortiemidi.writeFile(sortie)
Beispiel #7
0
class MidiPlay(OutputRajapinta):
    def __init__(self, max_tracks, filename):
        self.midi = MIDIFile(max_tracks)

    def nuotti(self, track, channel, pitch, time, duration, volume):
        self.midi.addNote(track, channel, pitch, time, duration, volume)

    def tempo(self, track, time, tempo):
        self.midi.addTempo(track, time, tempo)

    def soitin(self, track, channel, time, program):
        self.midi.addProgramChange(track, channel, time, program)

    def kirjoita(self, file=None):
        import sys
        import io

        # Systeemialustan mukainen miditiedoston soittamiseen käytetty tiedosto
        if sys.platform == "win32":
            from mplaymaster.win32midi import midiDevice
        elif sys.platform == "darwin":
            from mplaymaster.darwinmidi import midiDevice
        else:
            raise ImportError(
                "Sori, soitto ei tue muuta kuin Windowsia ja Mac OS X:ää :(")

        # Haetaan soittolaite tiedoston alussa importatusta kirjastosta
        laite = midiDevice()

        # Luodaan BytesIO-objekti, joka toimii kuin bytes-tilassa avattu tiedosto
        tiedosto = file if file is not None else io.BytesIO()
        self.midi.writeFile(tiedosto)
        tiedosto.seek(0)

        # Ja kutsutaan laitteen soittofunktiota omassa säikeessään. Tämä tehdään siksi, että
        # ohjelma pääsee jatkamaan suoritustaan musiikin soidessa taustalla.
        laite.play(tiedosto)
Beispiel #8
0
track1 = 0
track2 = 1
time = 0

MyMIDI = MIDIFile(2)
MyMIDI.addTrackName(track1, time, "Temperature MusicHI")
time = time + 1
MyMIDI.addTrackName(track2, time, "Temperature MusicLOW")
time = time + 1
MyMIDI.addTempo(track1, time, 540)
time = time + 1
MyMIDI.addTempo(track2, time, 540)

time = time + 1
MyMIDI.addProgramChange(track1, 0, time, 1)
time = time + 1
MyMIDI.addProgramChange(track2, 1, time, 2)

time = time + 1

#f = open("climate2010.txt")
#for row in csv.reader(f):

channel = 0
channel2 = 1
pitch1 = 60
pitch2 = 64
duration = 5
volume = 100
time = time + 2
Beispiel #9
0
track1 = 0
track2 = 1
time = 0

MyMIDI = MIDIFile(2)
MyMIDI.addTrackName(track1,time,"Temperature MusicHI")
time = time +1
MyMIDI.addTrackName(track2,time,"Temperature MusicLOW")
time = time +1
MyMIDI.addTempo(track1,time, 540)
time = time +1
MyMIDI.addTempo(track2,time, 540)

time = time +1
MyMIDI.addProgramChange(track1,0, time, 1)
time = time +1
MyMIDI.addProgramChange(track2,1, time, 2)

time = time +1

#f = open("climate2010.txt")
#for row in csv.reader(f):
    
channel = 0
channel2 = 1
pitch1 = 60
pitch2 = 64
duration = 5
volume = 100
time = time +2
Beispiel #10
0
MyMIDI.addTrackName(track1, time, "Year Changes")
time = time + 1
MyMIDI.addTrackName(track2, time, "Percussion")
time = time + 1
#MyMIDI.addTrackName(track3,time,"Misc")
#time = time +1
MyMIDI.addTempo(track1, time, beats)
time = time + 1
MyMIDI.addTempo(track2, time, beats)
#time = time +1
#MyMIDI.addTempo(track3,time, beats)

# set voice (sound) to be played on tracks
#  we used General Midi sounds ( see General Midi docs )
time = time + 1
MyMIDI.addProgramChange(track1, channel, time,
                        12)  # voice 1 = 86   fretless bass
#time = time +1
#MyMIDI.addProgramChange(track2,channel10, time, 40)    # voice 2 = 53
#time = time +1
#MyMIDI.addProgramChange(track3,2, time, 77)   # cymbal = 119

time = time + 1

# open and read each line ( data object ) in file
f = open("StormyWeather.txt")
for row in csv.reader(f):

    # calculate pitch value from temperatures
    #pitch1 =  20 + winddirection_to_values(row[windDirection])

    dingaLing = 1
Beispiel #11
0
MyMIDI.addTrackName(track1,time,"Temperature MusicHI")
time = time +1
MyMIDI.addTrackName(track2,time,"Temperature MusicLOW")
time = time +1
MyMIDI.addTrackName(track3,time,"Temperature MusicPrecip")
time = time +1
MyMIDI.addTempo(track1,time, beats)
time = time +1
MyMIDI.addTempo(track2,time, beats)
time = time +1
MyMIDI.addTempo(track3,time, beats)

# set voice (sound) to be played on tracks
#  we used General Midi sounds ( see General Midi docs )
time = time +1
MyMIDI.addProgramChange(track1,0, time, 112)    # voice 1 = 86   fretless bass
#time = time +1
MyMIDI.addProgramChange(track2,1, time, 112)    # voice 2 = 53
time = time +1
MyMIDI.addProgramChange(track3,2, time, 119)   # cymbal = 119

time = time +1

# open and read each line ( data object ) in file
f = open("2015OutputCSV.txt")
for row in csv.reader(f):
    
    # calculate pitch value from temperatures
    pitch1 =  20 + winddirection_to_values(row[windDirection])    #int(row[windDirection]) + highTempAdjustment
    pitch2Tmp = float(row[windSpeed]) 
    pitch2 = int(pitch2Tmp) + lowTempAdjustment
Beispiel #12
0
MyMIDI.addTrackName(track1,time,"Temperature MusicHI")
time = time +1
MyMIDI.addTrackName(track2,time,"Temperature MusicLOW")
time = time +1
MyMIDI.addTrackName(track3,time,"Temperature MusicPrecip")
time = time +1
MyMIDI.addTempo(track1,time, beats)
time = time +1
MyMIDI.addTempo(track2,time, beats)
time = time +1
MyMIDI.addTempo(track3,time, beats)

# set voice (sound) to be played on tracks
#  we used General Midi sounds ( see General Midi docs )
time = time +1
MyMIDI.addProgramChange(track1,0, time, 1)    # voice 1 = 86   fretless bass
#time = time +1
MyMIDI.addProgramChange(track2,1, time, 112)    # voice 2 = 53
time = time +1
MyMIDI.addProgramChange(track3,2, time, 73)   # cymbal = 119

time = time +1

# open and read each line ( data object ) in file
f = open("lunarprecipitation.txt")
for row in csv.reader(f):
    
    # calculate pitch value from temperatures
    #pitch1 =  20 + winddirection_to_values(row[windDirection])
        
    pitch1 =   moonphase_to_values(row[moonphase])  
Beispiel #13
0
#Import the library
from midiutil.MidiFile3 import MIDIFile


MyMIDI = MIDIFile(1)

# Add track name and tempo. The first argument to addTrackName and
# addTempo is the time to write the event.
track = 0
time = 0
channel = 9
MyMIDI.addTrackName(track,time,"Sample Track")
MyMIDI.addTempo(track,time, 120)

time = time = 2
MyMIDI.addProgramChange(0,channel, time, 44)    # voice 1 = 86   fretless bass
# Add a note. addNote expects the following information:

pitch = 60
duration = 10
volume = 100
duration2 = 5

# Now add the note.
MyMIDI.addNote(track,channel,pitch,time,duration,volume)
time = time + 1
MyMIDI.addNote(track,channel,pitch,time,duration,volume)
time = time + 1.25
MyMIDI.addNote(track,channel,pitch,time,duration,volume)
time = time + .5
MyMIDI.addNote(track,channel,pitch,time,duration,volume)
Beispiel #14
0
MyMIDI.addTrackName(track1,time,"Year Changes")
time = time +1
MyMIDI.addTrackName(track2,time,"Percussion")
time = time +1
#MyMIDI.addTrackName(track3,time,"Misc")
#time = time +1
MyMIDI.addTempo(track1,time, beats)
time = time +1
MyMIDI.addTempo(track2,time, beats)
#time = time +1
#MyMIDI.addTempo(track3,time, beats)

# set voice (sound) to be played on tracks
#  we used General Midi sounds ( see General Midi docs )
time = time +1
MyMIDI.addProgramChange(track1,channel, time, 12)    # voice 1 = 86   fretless bass
#time = time +1
#MyMIDI.addProgramChange(track2,channel10, time, 40)    # voice 2 = 53
#time = time +1
#MyMIDI.addProgramChange(track3,2, time, 77)   # cymbal = 119

time = time +1

# open and read each line ( data object ) in file
f = open("StormyWeather.txt")
for row in csv.reader(f):
    
    # calculate pitch value from temperatures
    #pitch1 =  20 + winddirection_to_values(row[windDirection])
    
    
Beispiel #15
0
MyMIDI.addTrackName(track1,time,"Year Changes")
time = time +1
MyMIDI.addTrackName(track2,time,"Percussion")
time = time +1
#MyMIDI.addTrackName(track3,time,"Misc")
#time = time +1
MyMIDI.addTempo(track1,time, beats)
time = time +1
MyMIDI.addTempo(track2,time, beats)
#time = time +1
#MyMIDI.addTempo(track3,time, beats)

# set voice (sound) to be played on tracks
#  we used General Midi sounds ( see General Midi docs )
time = time +1
MyMIDI.addProgramChange(track1,channel, time, 12)    # voice 1 = 86   fretless bass
#time = time +1
#MyMIDI.addProgramChange(track2,channel10, time, 40)    # voice 2 = 53
#time = time +1
#MyMIDI.addProgramChange(track3,2, time, 77)   # cymbal = 119

time = time +1

print("The instnrument is: ", BASSDRUM1)

# open and read each line ( data object ) in file
f = open("StormyWeather.txt")
for row in csv.reader(f):
    
    # calculate pitch value from temperatures
    #pitch1 =  20 + winddirection_to_values(row[windDirection])
Beispiel #16
0
import random
# Create the MIDIFile Object
MyMIDI = MIDIFile(6)

# Add track name and tempo. The first argument to addTrackName and
# addTempo is the time to write the event.
track = 0
time = 0
channel = 0
program = 0
volume = 100

#Adding instruments
MyMIDI.addTrackName(track,time,"Mellow Ambience I")
MyMIDI.addTempo(track,time,92)
MyMIDI.addProgramChange(track,channel,time,program+53)

MyMIDI.addTrackName(track+1,time,"Harpsichord")
MyMIDI.addTempo(track+1,time, 92)
MyMIDI.addProgramChange(track+1,channel+1,time,program+107)

MyMIDI.addTrackName(track+2,time,"Percussion")
MyMIDI.addTempo(track+2,time, 92)
MyMIDI.addProgramChange(track+2,channel+2,time,program+47)

#Saving Randomness state
random.seed(1337,2)

# Get pitch of note
def getPitch(key, pitchOct):
    if (key == 'C'):