Ejemplo n.º 1
0
def add_defaults(single_track, defaults=master_defaults):
    time_signature = MetaMessage("time_signature")
    time_signature.numerator = defaults["time_signature.numerator"]
    time_signature.denominator = defaults["time_signature.denominator"]
    time_signature.clocks_per_click = defaults["time_signature.clocks_per_click"]
    time_signature.notated_32nd_notes_per_beat = defaults["time_signature.notated_32nd_notes_per_beat"]

    key_signature = MetaMessage("key_signature")
    key_signature.key = defaults["key_signature.key"]

    set_tempo = MetaMessage("set_tempo")
    set_tempo.tempo = defaults["set_tempo.tempo"]

    msgs = [time_signature, key_signature, set_tempo]
    msgs.extend(single_track)
    msgs.append(MetaMessage('end_of_track'))

    return MidiTrack(msgs)
Ejemplo n.º 2
0
def add_defaults(single_track):
    time_signature = MetaMessage("time_signature")
    time_signature.numerator = 4
    time_signature.denominator = 2  #quattro quarti
    time_signature.clocks_per_click = 24
    time_signature.notated_32nd_notes_per_beat = 8

    key_signature = MetaMessage("key_signature")
    key_signature.key = 'C'  # C major

    set_tempo = MetaMessage("set_tempo")
    set_tempo.tempo = 400000  #500000  # 120bpm

    msgs = [time_signature, key_signature, set_tempo]
    msgs.extend(single_track)
    msgs.append(MetaMessage('end_of_track'))

    return MidiTrack(msgs)
Ejemplo n.º 3
0
def encoding_to_message(encoding, decodings, defaults=master_defaults):

    message = decodings[encoding]

    if message == "START_TRACK":
        #header defaults
        time_signature = MetaMessage("time_signature")
        time_signature.numerator = defaults["time_signature.numerator"]
        time_signature.denominator = defaults["time_signature.denominator"]
        time_signature.clocks_per_click = defaults[
            "time_signature.clocks_per_click"]
        time_signature.notated_32nd_notes_per_beat = defaults[
            "time_signature.notated_32nd_notes_per_beat"]

        key_signature = MetaMessage("key_signature")
        key_signature.key = defaults["key_signature.key"]

        set_tempo = MetaMessage("set_tempo")
        set_tempo.tempo = defaults["set_tempo.tempo"]

        return [time_signature, key_signature, set_tempo]

    if message == "END_TRACK":
        return [MetaMessage('end_of_track')]

    if message == "WAIT_A_BEAT":
        return [message]

    if message.startswith("note"):
        parts = message.split("-")
        res = Message(parts[0])
        res.note = int(parts[1])
        res.time = int(parts[2])
        # defaults
        res.channel = defaults["note.channel"]
        res.velocity = defaults["note.velocity"]
        return [res]

    return []
def timesteps_to_midi(timesteps, zeros=0, ones=1, defaults=master_defaults):
    o = zeros
    l = ones

    messages = []

    #HEADER
    time_signature = MetaMessage("time_signature")
    time_signature.numerator = defaults["time_signature.numerator"]
    time_signature.denominator = defaults["time_signature.denominator"]
    time_signature.clocks_per_click = defaults[
        "time_signature.clocks_per_click"]
    time_signature.notated_32nd_notes_per_beat = defaults[
        "time_signature.notated_32nd_notes_per_beat"]

    key_signature = MetaMessage("key_signature")
    key_signature.key = defaults["key_signature.key"]

    set_tempo = MetaMessage("set_tempo")
    set_tempo.tempo = defaults["set_tempo.tempo"]

    messages.extend([time_signature, key_signature, set_tempo])

    state_vectors = {
        "NOTE": [o, o],
        "START_TRACK": [l, o],
        "END_TRACK": [o, l]
    }

    silence = [o for i in range(128)] + state_vectors["NOTE"]

    wait = 0

    last_timestep = silence

    def timestep_diffs(timestep1, timestep2):
        res = []
        for i, t1 in enumerate(timestep1):
            diff = timestep1[i] - timestep2[i]
            if diff != 0:
                res.append(i)
        return res

    for timestep in timesteps:
        diffs = timestep_diffs(timestep[:128], last_timestep[:128])
        if (len(diffs) == 0):
            wait += 1
        else:
            for d in diffs:
                if last_timestep[d] == o and timestep[d] == l:
                    message = Message("note_on",
                                      note=d,
                                      time=wait,
                                      channel=defaults["note.channel"],
                                      velocity=defaults["note.velocity"])
                    messages.append(message)
                    wait = 0
                elif last_timestep[d] == l and timestep[d] == o:
                    message = Message("note_off",
                                      note=d,
                                      time=wait,
                                      channel=defaults["note.channel"])
                    messages.append(message)
                    wait = 0

        last_timestep = timestep

    messages.append(MetaMessage('end_of_track', time=wait))
    wait = 0

    mid = MidiFile(ticks_per_beat=defaults["ticks_per_beat"])

    mid.tracks.append(MidiTrack(messages))

    return mid