def build_note_off(channel,note,velocity,time): m = Message("note_off") m.channel = channel m.note = note m.velocity = velocity m.time = time return m
def raw_to_msg(raw): if raw[0] == 144: msg = Message.from_bytes(raw[:3]) else: msg = Message('sysex', data=[]) msg.time = raw[3] / 1000 return msg
def appendNote(self, note, velocity, time, seconds = False): msg = Message("note_on") msg.note = note msg.velocity = velocity ## time (s) * (ticks / beat) * (beats / min) * (1min / 60s) msg.time = time if seconds == False else int(round(time / self.seconds)) self.appendMsg(msg)
def send (self, msg: mido.Message): self.input.send(msg) channel: RuntimeChannelData = self.runtime_data.channel_data(msg.channel) data: ChannelData = self.cube.reg().data(self).channel_data(msg.channel) index = 0 curr_bar = self.bar_counter % data.bars msg.time = time.clock_gettime_ns(time.CLOCK_BOOTTIME) - channel.last_start #Find postition for i in range(len(channel.messages)): if channel.messages[len(channel.messages) - i - 1].time < msg.time: index = len(channel.messages) - i #Insert channel.messages.insert(index, msg)
def shiftAndScale(inputFileName, outputFileName, pitchShift, timeScale): orig = MidiFile(inputFileName) mid = MidiFile() for tr in orig.tracks: track = MidiTrack() mid.tracks.append(track) #<meta message track_name name='Grand Piano' time=0> # time=0 could be replaced be time=timeShift if necessary msg = Message('note_on', note=0, velocity=0, time=0) track.append(msg) for msg in tr: if msg.type == 'note_on': msg.time = round(msg.time * timeScale) msg.note = msg.note + pitchShift track.append(msg) mid.save(outputFileName)
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 []