Ejemplo n.º 1
0
def predict():
    now = time.time()
    values = json.loads(request.data)
    midi_data = pretty_midi.PrettyMIDI(
        StringIO(''.join(chr(v) for v in values)))
    duration = float(request.args.get('duration'))
    ret_midi = generate_midi(midi_data, duration)

    # Store the received midi file in a temporary file to be able to use it with mido
    mfile = tempfile.NamedTemporaryFile()
    midi_data.write(mfile)
    mfile.seek(0)

    midofile = mido.MidiFile(mfile.name)

    mood = predictmood(midofile)
    print mood

    # Add a new track with the first note indicating the mood
    midi_to_mod = mido.MidiFile(ret_midi.name)
    midi_to_mod.tracks.append(HappyTrack() if mood == 'happy' else SadTrack())

    ret_file = tempfile.NamedTemporaryFile()
    midi_to_mod.save(ret_file.name)
    ret_file.seek(0)

    return send_file(ret_file,
                     attachment_filename='return.mid',
                     mimetype='audio/midi',
                     as_attachment=True)
Ejemplo n.º 2
0
def predict(pitchNums):
    now = time.time()

    #initialize midi data and instrument
    midi_data = pretty_midi.PrettyMIDI()
    myInstru = pretty_midi.Instrument(program=0)

    timeTracker = 0.0  #track the entire duration of the input midi data
    #generate midi notes and append to the midi instrument
    for i in pitchNums:
        randDura = 0.1
        note = pretty_midi.Note(velocity=100,
                                pitch=i,
                                start=timeTracker,
                                end=timeTracker + randDura)
        myInstru.notes.append(note)
        timeTracker += randDura

    # print("my notes:")
    # print(myInstru.notes)
    midi_data.instruments.append(myInstru)

    duration = timeTracker + 1.0
    # print("this is duration")
    # print(duration)

    ret_midi = generate_midi(midi_data, duration)

    ret_midi_data = pretty_midi.PrettyMIDI(ret_midi)
    print("returned midi")

    playOutputMidi()
Ejemplo n.º 3
0
def predict():
    now = time.time()
    # values = json.loads(request.data) #avenote reads input
    values = [
        77, 84, 104, 100, 0, 0, 0, 6, 0, 0, 0, 1, 1, 224, 77, 84, 114, 107, 0,
        0, 0, 59, 0, 255, 81, 3, 7, 161, 32, 0, 144, 72, 127, 89, 144, 71, 127,
        22, 128, 72, 90, 22, 144, 69, 127, 17, 128, 71, 90, 95, 128, 69, 90,
        16, 144, 72, 127, 73, 144, 71, 127, 0, 128, 72, 90, 17, 144, 69, 127,
        22, 128, 71, 90, 22, 128, 69, 90, 0, 255, 47, 0
    ]
    print("the input data is loaded")
    print(values)
    # or we send in on our own
    # values = our_own_function()
    midi_data = pretty_midi.PrettyMIDI(
        StringIO(''.join(chr(v) for v in values)))
    print("midi file")
    print(midi_data)
    duration = float(request.args.get('duration'))
    ret_midi = generate_midi(midi_data,
                             duration)  #avenote send generated output
    return send_file(ret_midi,
                     attachment_filename='return.mid',
                     mimetype='audio/midi',
                     as_attachment=True)
Ejemplo n.º 4
0
def predict():
    print('predicting.....')
    now = time.time()
    start_time = float(request.args.get('start_time'))
    if start_time != 0:
        session_time = start_time
        midi_path = midipath + str(session_time)
        os.mkdir(midi_path)
    else:
        midi_path = midipath

    values = json.loads(request.data)
    valuesStr = (''.join(chr(v) for v in values))
    valBytes = BytesIO(bytes(valuesStr, 'latin1'))

    midi_data = pretty_midi.PrettyMIDI(valBytes)
    for note in midi_data.instruments[0].notes:
        note.velocity = 64

    prime_midi_loc = os.path.join(midi_path, prime_name)
    total_midi_loc = os.path.join(midi_path, total_midi_name)
    partial_midi_loc = os.path.join(midi_path, partial_midi_name)
    midi_data.write(prime_midi_loc)
    print('setting retMidi')
    ret_midi = generate_midi(prime_midi_loc, partial_midi_loc, total_midi_loc)
    return send_file(ret_midi,
                     attachment_filename='return.mid',
                     mimetype='audio/midi',
                     as_attachment=True)
Ejemplo n.º 5
0
def predict_frames():
    print('predicting.....')
    now = time.time()
    values = json.loads(request.data)

    midi_data = pretty_midi.PrettyMIDI()
    piano = pretty_midi.Instrument(program=0)
    for cNote in values['notes']:
        print(cNote)
        note = pretty_midi.Note(velocity=cNote['velocity'],
                                pitch=cNote['pitch'],
                                start=cNote['startTime'],
                                end=cNote['endTime'])
        piano.notes.append(note)
    midi_data.instruments.append(piano)
    print('setting retMidi', midi_data)

    midi_path = midipath
    prime_midi_loc = os.path.join(midi_path, prime_name)
    total_midi_loc = os.path.join(midi_path, total_midi_name)
    partial_midi_loc = os.path.join(midi_path, partial_midi_name)
    midi_data.write(prime_midi_loc)
    print('setting retMidi')

    ret_midi = generate_midi(prime_midi_loc, partial_midi_loc, total_midi_loc)
    return send_file(ret_midi,
                     attachment_filename='return.mid',
                     mimetype='audio/midi',
                     as_attachment=True)
Ejemplo n.º 6
0
def predict():
    values = json.loads(request.data)
    midi_data = pretty_midi.PrettyMIDI(
        StringIO(''.join(chr(v) for v in values)))
    duration = float(request.args.get('duration'))
    ret_midi = generate_midi(midi_data, duration)
    return send_file(ret_midi, attachment_filename='return.mid',
                     mimetype='audio/midi', as_attachment=True)
Ejemplo n.º 7
0
def predict():
    now = time.time()
    values = json.loads(request.data)
    midi_data = pretty_midi.PrettyMIDI(StringIO(''.join(chr(v) for v in values)))
    duration = float(request.args.get('duration'))
    ret_midi = generate_midi(midi_data, duration)
    return send_file(ret_midi, attachment_filename='return.mid', 
        mimetype='audio/midi', as_attachment=True)
Ejemplo n.º 8
0
def predict():
    notes = json.loads(request.get_data())
    midi_data = pretty_midi.PrettyMIDI(StringIO("".join(chr(n)
                                                        for n in notes)))
    duration = float(request.args.get("duration"))  #seconds
    generated = predictor.generate_midi(midi_data, duration)
    return send_file(generated,
                     attachment_filename="output.mid",
                     mimetype="audio/midi",
                     as_attachment=True)
Ejemplo n.º 9
0
def predict():
    midi_data = json.loads(request.data)
    #duration = float(request.args.get('duration'))
    print(midi_data)
    pitches = midi_data["pitches"]
    start_times = midi_data["start_times"]
    durations = midi_data["durations"]
    tempo = midi_data["tempo"]
    length = midi_data["length"]
    ret_midi = generate_midi(pitches, start_times, durations, tempo, length)
    return json.dumps(ret_midi)
Ejemplo n.º 10
0
    def run(self):
        print "Starting " + self.name
        # Get lock to synchronize threads
        ret_midi = generate_midi(self.midi_data, self.duration)
        midi_data = pretty_midi.PrettyMIDI(ret_midi.name)

        if len(midi_data.instruments) > 0:
            for midi_note in midi_data.instruments[0].notes:
                threadLock.acquire()
                app.ai_midis.append({
                    "pitch": midi_note.pitch,
                    "velocity": midi_note.velocity
                })
                threadLock.release()
Ejemplo n.º 11
0
def predict():
    now = time.time()
    values = json.loads(request.data)
    if sys.version_info.major <= 2:
        midi_data = pretty_midi.PrettyMIDI(
            StringIO(''.join(chr(v) for v in values)))
    else:
        midi_data = pretty_midi.PrettyMIDI(
            BytesIO(b''.join([v.to_bytes(1, 'big') for v in values])))
    duration = float(request.args.get('duration'))
    ret_midi = generate_midi(midi_data, duration)
    return send_file(ret_midi,
                     attachment_filename='return.mid',
                     mimetype='audio/midi',
                     as_attachment=True)
Ejemplo n.º 12
0
def predict():
    notes = json.loads(request.get_data())
    if sys.version_info.major <= 2:
        from cStringIO import StringIO
        note_stream = StringIO("".join(chr(n) for n in notes))
    else:
        from io import BytesIO
        note_stream = BytesIO("".join(chr(n) for n in notes).encode("latin1"))

    midi_data = pretty_midi.PrettyMIDI(note_stream)
    duration = float(request.args.get("duration"))  #seconds
    generated = predictor.generate_midi(midi_data, duration)
    return send_file(generated,
                     attachment_filename="output.mid",
                     mimetype="audio/midi",
                     as_attachment=True)
Ejemplo n.º 13
0
def predict():
    print('predicting.....')
    now = time.time()
    # print(request.data)
    values = json.loads(request.data)
    start_time = float(request.args.get('start_time'))
    if start_time!=0:
        session_time = start_time
        midi_path = midipath + str(session_time)
        os.mkdir(midi_path)
    else:
        midi_path = midipath
    

    # print(values)
    # for v in values:
    #     print(v)
    # midi_data = pretty_midi.PrettyMIDI(StringIO(''.join(chr(v) for v in values)))
    # midi_data = pretty_midi.PrettyMIDI(prime_loc)
    values = json.loads(request.data)
    # print('creating midi data', values)
    valuesStr = (''.join(chr(v) for v in values))
    valBytes = BytesIO(bytes(valuesStr, 'latin1'))
    
    midi_data = pretty_midi.PrettyMIDI(valBytes)
    for note in midi_data.instruments[0].notes:
        note.velocity=64
    
    prime_midi_loc = os.path.join(midi_path,prime_name)
    total_midi_loc = os.path.join(midi_path,total_midi_name)
    partial_midi_loc = os.path.join(midi_path,partial_midi_name)
    
    # if start_time==0:
    #     previous_midi = pretty_midi.PrettyMIDI(total_midi_loc)
    #     first_time = previous_midi.instruments[0].notes[0].start
    #     last_time = previous_midi.instruments[0].notes[-1].end
    #     print('concat midi file')
    #     for note in midi_data.instruments[0].notes:
    #         note.start = note.start + last_time + 0.5
    #         note.end = note.end + last_time + 0.5
    #         previous_midi.instruments[0].notes.append(note)
        
    # else:
    #     previous_midi = midi_data
   
        
    
    # first_time = previous_midi.instruments[0].notes[0].start
    # last_time = previous_midi.instruments[0].notes[-1].end
    # print('first time is')
    # print(first_time)
    # print('last time is')
    # print(last_time)
    # cut_note_index = 0
    # shift_time = 0
    # if last_time -first_time > 30:
    #     print('longer than 30s, cut prime')
    #     for i in range(len(previous_midi.instruments[0].notes)):
    #         if last_time - previous_midi.instruments[0].notes[i].start< 30:
    #             cut_note_index = i
    #             shift_time = previous_midi.instruments[0].notes[cut_note_index].start
    #             print("shift_time is")
    #             print(shift_time)
    #             break
        
    #     previous_midi.instruments[0].notes = previous_midi.instruments[0].notes[i:]
    #     for note in previous_midi.instruments[0].notes:
    #          note.start -= shift_time
    #          note.end -= shift_time

    midi_data.write(prime_midi_loc)
    # print('setting duration')
    # duration = float(request.args.get('duration'))
    print('setting retMidi')
    ret_midi = generate_midi(prime_midi_loc,partial_midi_loc,total_midi_loc)
    return send_file(ret_midi, attachment_filename='return.mid', 
        mimetype='audio/midi', as_attachment=True)