Beispiel #1
0
    def old_callback(self, path, args):
        if DEBUG_OSC:
            print "received:", path, args

        def scale(val, minin, maxin, minout, maxout):
            relval = (val - minin) / (maxin - minin)
            return relval * maxout + minout

        if path.startswith("/st"):
            st = self.params.violin_string
            if path == '/st_g':
                st = 0
            elif path == '/st_d':
                st = 1
            elif path == '/st_a':
                st = 2
            elif path == '/st_e':
                st = 3
            if st != self.params.violin_string:
                self.turn_off_current_string()
                # new
                self.params.violin_string = st
                self.commands_pipe_master.send((COMMANDS.BOW, self.params))
            #print "finger\t%.2f\t%.2f" %( x, y)
            #fp = scale(args[0], 0.0, 1.0, 0.0, 0.4) - 0.05
            fm = scale(args[0], 0.0, 1.0, 0.0, 8.0) - 0.5
            if fm < 0:
                fm = 0
            fp = midi_pos.midi2pos(fm)
            #if fp < 0:
            #    fp = 0
            #print "f\t%.2f\t%.2f" %( x, y)
            text = "fp: %.2f" % (fp)
            if DEBUG_OSC:
                print text
            else:
                self.set_message(text + "             ")
            self.params.finger_position = fp
            self.commands_pipe_master.send((COMMANDS.FINGER, self.params))

        if path.startswith("/bow"):
            x, y = args

            #print "bow\t%.2f\t%.2f" %( x, y)
            #print "\t%.2f\t%.2f" %( scale(x, 0.0, 0.25, 0.05, 0.20), y)
            #print "\t%.2f\t%.2f" %( scale(y, 0.0, 0.25, 0.05, 0.20), y)
            #vb = scale(x, 0.0, 1.0, 0.0, 4.0) - 2.0
            vb = x - 0.5
            Fb = 4.0 - scale(y, 0.0, 1.0, 0.0, 4.0)
            text = "vb: %.2f\tFb: %.2f" % (vb, Fb)
            if DEBUG_OSC:
                print text
            else:
                self.set_message(text + "             ")
            self.params.force = Fb
            self.params.velocity = vb
            self.commands_pipe_master.send((COMMANDS.BOW, self.params))
def main(stdscr):
    try:
        instrument_type = int(sys.argv[1])
    except:
        instrument_type = 0
    try:
        instrument_number = int(sys.argv[2])
    except:
        instrument_number = 0

    try:
        st = int(sys.argv[3])
    except:
        st = 0
    try:
        dyn = int(sys.argv[4])
    except:
        dyn = 0
    try:
        finger = int(sys.argv[5])
    except:
        finger = 0
    try:
        text_message = " ".join(sys.argv[6:])
    except:
        text_message = ""


    try:
        p, audio_stream = artifastring_interactive.make_audio_stream()
    except:
        p = None
        audio_stream = None

    artifastring_init = artifastring_process.ArtifastringInit(
        instrument_type, instrument_number)

    vln = ArtifastringOsc(artifastring_init, stdscr)
    vln.turn_off_current_string()
    vln.params.violin_string = st
    #vln.params.bow_position = dynamics.get_distance(dyn)
    #vln.params.velocity = dynamics.get_velocity(dyn)
    vln.params.finger_position = midi_pos.midi2pos(finger)
    vln.commands_pipe_master.send( (COMMANDS.BOW, vln.params) )

    vln.dyn = dyn


    if stdscr is not None:
        vln.set_message(text_message)

    time.sleep(0.5)
    vln.main_loop()

    if p is not None:
        audio_stream.close()
        p.terminate()
    def old_callback(self, path, args):
        if DEBUG_OSC:
            print "received:", path, args

        def scale(val, minin, maxin, minout, maxout):
            relval = (val - minin) / (maxin-minin)
            return relval*maxout + minout

        if path.startswith("/st"):
            st = self.params.violin_string
            if path == '/st_g':
                st = 0
            elif path == '/st_d':
                st = 1
            elif path == '/st_a':
                st = 2
            elif path == '/st_e':
                st = 3
            if st != self.params.violin_string:
                self.turn_off_current_string()
                # new
                self.params.violin_string = st
                self.commands_pipe_master.send( (COMMANDS.BOW, self.params) )
            #print "finger\t%.2f\t%.2f" %( x, y)
            #fp = scale(args[0], 0.0, 1.0, 0.0, 0.4) - 0.05
            fm = scale(args[0], 0.0, 1.0, 0.0, 8.0) - 0.5
            if fm < 0:
                fm = 0
            fp = midi_pos.midi2pos(fm)
            #if fp < 0:
            #    fp = 0
            #print "f\t%.2f\t%.2f" %( x, y)
            text = "fp: %.2f" %( fp)
            if DEBUG_OSC:
                print text
            else:
                self.set_message(text + "             ")
            self.params.finger_position = fp
            self.commands_pipe_master.send( (COMMANDS.FINGER, self.params) )

        if path.startswith("/bow"):
            x, y = args

            #print "bow\t%.2f\t%.2f" %( x, y)
            #print "\t%.2f\t%.2f" %( scale(x, 0.0, 0.25, 0.05, 0.20), y)
            #print "\t%.2f\t%.2f" %( scale(y, 0.0, 0.25, 0.05, 0.20), y)
            #vb = scale(x, 0.0, 1.0, 0.0, 4.0) - 2.0
            vb = x - 0.5
            Fb = 4.0-scale(y, 0.0, 1.0, 0.0, 4.0)
            text = "vb: %.2f\tFb: %.2f" %( vb, Fb)
            if DEBUG_OSC:
                print text
            else:
                self.set_message(text + "             ")
            self.params.force = Fb
            self.params.velocity = vb
            self.commands_pipe_master.send( (COMMANDS.BOW, self.params) )
Beispiel #4
0
def main(stdscr):
    try:
        instrument_type = int(sys.argv[1])
    except:
        instrument_type = 0
    try:
        instrument_number = int(sys.argv[2])
    except:
        instrument_number = 0

    try:
        st = int(sys.argv[3])
    except:
        st = 0
    try:
        dyn = int(sys.argv[4])
    except:
        dyn = 0
    try:
        finger = int(sys.argv[5])
    except:
        finger = 0
    try:
        text_message = " ".join(sys.argv[6:])
    except:
        text_message = ""

    try:
        p, audio_stream = artifastring_interactive.make_audio_stream()
    except:
        p = None
        audio_stream = None

    artifastring_init = artifastring_process.ArtifastringInit(
        instrument_type, instrument_number)

    vln = ArtifastringOsc(artifastring_init, stdscr)
    vln.turn_off_current_string()
    vln.params.violin_string = st
    #vln.params.bow_position = dynamics.get_distance(dyn)
    #vln.params.velocity = dynamics.get_velocity(dyn)
    vln.params.finger_position = midi_pos.midi2pos(finger)
    vln.commands_pipe_master.send((COMMANDS.BOW, vln.params))

    vln.dyn = dyn

    if stdscr is not None:
        vln.set_message(text_message)

    time.sleep(0.5)
    vln.main_loop()

    if p is not None:
        audio_stream.close()
        p.terminate()
def main(stdscr):
    artifastring_interactive.GAUSSIAN_FORCE = 0.01
    artifastring_interactive.GAUSSIAN_VELOCITY = 0.01

    try:
        instrument_type = int(sys.argv[1])
    except:
        instrument_type = 0
    try:
        instrument_number = int(sys.argv[2])
    except:
        instrument_number = 0

    try:
        st = int(sys.argv[3])
    except:
        st = 0
    try:
        dyn = int(sys.argv[4])
    except:
        dyn = 0
    try:
        finger = int(sys.argv[5])
    except:
        finger = 0
    try:
        text_message = " ".join(sys.argv[6:])
    except:
        text_message = ""


    artifastring_init = artifastring_process.ArtifastringInit(
        instrument_type, instrument_number)

    vln = ViviTrainer(artifastring_init, stdscr, "train-data")
    vln.turn_off_current_string()
    vln.params.violin_string = st
    vln.params.finger_position = midi_pos.midi2pos(finger)
    vln.params.bow_position = dynamics.get_distance(instrument_type,dyn)
    vln.params.velocity = dynamics.get_velocity(instrument_type,dyn)
    vln.commands_pipe_master.send( (COMMANDS.BOW, vln.params) )

    vln.dyn = dyn

    if stdscr is not None:
        vln.set_message(text_message)

    time.sleep(0.5)
    vln.main_loop()
    curses.endwin()
    if ACTIONS2CSV:
        vln.actions2csv()
Beispiel #6
0
def main(stdscr):
    try:
        instrument_type = int(sys.argv[1])
    except:
        instrument_type = 0
    try:
        instrument_number = int(sys.argv[2])
    except:
        instrument_number = 0
    try:
        st = int(sys.argv[3])
    except:
        st = 0
    try:
        dyn = int(sys.argv[4])
    except:
        dyn = 0
    try:
        finger = int(sys.argv[5])
    except:
        finger = 0
    try:
        text_message = " ".join(sys.argv[6:])
    except:
        text_message = ""

    p = pyaudio.PyAudio()
    audio_stream = p.open(
        rate = 44100,
        channels = 1,
        format = pyaudio.paInt16,
        output = True,
        frames_per_buffer=HOPSIZE,
    )

    vln = InteractiveViolin(instrument_type, instrument_number, stdscr, audio_stream)
    vln.turn_off_current_string()
    vln.params.violin_string = st
    vln.params.finger_position = midi_pos.midi2pos(finger)
    vln.params.bow_position = dynamics.get_distance(dyn)
    vln.params.velocity = dynamics.get_velocity(dyn)
    vln.params_queue.put(vln.params)

    vln.dyn = dyn

    if stdscr is not None:
        vln.set_message(text_message)
    vln.main_loop()

    audio_stream.close()
    p.terminate()
def main(stdscr):
    artifastring_interactive.GAUSSIAN_FORCE = 0.01
    artifastring_interactive.GAUSSIAN_VELOCITY = 0.01

    try:
        instrument_type = int(sys.argv[1])
    except:
        instrument_type = 0
    try:
        instrument_number = int(sys.argv[2])
    except:
        instrument_number = 0

    try:
        st = int(sys.argv[3])
    except:
        st = 0
    try:
        dyn = int(sys.argv[4])
    except:
        dyn = 0
    try:
        finger = int(sys.argv[5])
    except:
        finger = 0
    try:
        text_message = " ".join(sys.argv[6:])
    except:
        text_message = ""

    artifastring_init = artifastring_process.ArtifastringInit(
        instrument_type, instrument_number)

    vln = ViviTrainer(artifastring_init, stdscr, "train-data")
    vln.turn_off_current_string()
    vln.params.violin_string = st
    vln.params.finger_position = midi_pos.midi2pos(finger)
    vln.params.bow_position = dynamics.get_distance(instrument_type, dyn)
    vln.params.velocity = dynamics.get_velocity(instrument_type, dyn)
    vln.commands_pipe_master.send((COMMANDS.BOW, vln.params))

    vln.dyn = dyn

    if stdscr is not None:
        vln.set_message(text_message)

    time.sleep(0.5)
    vln.main_loop()
    curses.endwin()
    if ACTIONS2CSV:
        vln.actions2csv()
Beispiel #8
0
def do_string(violin, insttype, st, plot=False, write=False):
    force = INST_FORCES[insttype][st]

    MIDI = numpy.arange(0, 13)
    POS = [ midi_pos.midi2pos(float(m)) for m in MIDI]
    vals = []
    #dbs = []
    for finger in POS:
        val = pluck_force(violin=violin,
            st=st, force=force, finger=finger,
            plot=plot, write=write,
            )
        vals.append(val)
        #dbs.append(db)
    val = min(vals)
    #db = max(dbs)
    return val
Beispiel #9
0
    def keypress(self, c):
        if c == 'q':
            return False
        if c == 's':
            self.turn_off_current_string()
            # new
            self.params.violin_string += 1
            if self.params.violin_string > 3:
                self.params.violin_string = 0
        if c == 'a':
            self.turn_off_current_string()
            # new
            self.params.violin_string -= 1
            if self.params.violin_string < 0:
                self.params.violin_string = 3
        if c == 'f':
            if self.params.finger_position == 0.0:
                self.params.finger_position = 0.02
            else:
                self.params.finger_position *= 1.1
        if c == 'd':
            if self.params.finger_position < 0.02:
                self.params.finger_position = 0.00
            else:
                self.params.finger_position /= 1.1
        if c == 't':
            self.params.bow_position *= 1.01
        if c == 'g':
            self.params.bow_position /= 1.01
        if c == 'y':
            self.params.force *= 1.1
        if c == 'h':
            self.params.force /= 1.1
        if c == 'u':
            self.params.velocity *= 1.1
        if c == 'j':
            self.params.velocity /= 1.1

        skip_violin_print = False
        if c == 'z' or c == 'x' or c == 'c' or c == 'v':
            if c == 'z':
                alter = 1.0/1.1
            if c == 'x':
                alter = 1.0/1.01
            if c == 'c':
                alter = 1.01
            if c == 'v':
                alter = 1.1
            self.change_tension(alter)
            skip_violin_print = True
        if c >= '1' and c <= str(vivi_defines.CATEGORIES_NUMBER):
            skip_violin_print = True
            self.snapshot(int(c) - vivi_defines.CATEGORIES_CENTER_OFFSET)
            self.stdscr.addstr(self.row, 0, str("file written"))

        if c == 'l':
            if self.params.force > 0:
                self.store_force = self.params.force
                self.params.force = 0
            else:
                self.params.force = self.store_force

        if c == 'm':
            midi = midi_pos.pos2midi(self.params.finger_position)
            midi = round(midi)
            self.params.finger_position = midi_pos.midi2pos(midi)
            self.stdscr.addstr(23, 20, str("midi: %i" % midi))
        if c == 'b':
            self.dyn += 1
            if self.dyn >= 4:
                self.dyn = 0
            self.params.bow_position = dynamics.get_distance(self.dyn)
            self.params.velocity = dynamics.get_velocity(self.dyn)
            self.stdscr.addstr(23, 20, str("dyn: %i  " % self.dyn))
        if c == 'n':
            midi = midi_pos.pos2midi(self.params.finger_position)
            midi = round(midi) + 1
            if midi > 7:
                midi = 0
            self.params.finger_position = midi_pos.midi2pos(midi)
            self.stdscr.addstr(23, 20, str("midi: %i  " % midi))

        self.params_queue.put(self.params)
        if not skip_violin_print:
            self.stdscr.addstr(self.row, 0, str(
                "%i\t%.3f\t%.3f\t%.3f\t%.3f" % (
                self.params.violin_string, self.params.finger_position,
                self.params.bow_position, self.params.force, self.params.velocity)))
            # next line
            self.row += 1
            if self.row > 20:
                self.row = 5
            self.stdscr.addstr(self.row, 0, str(" "*40))
            self.stdscr.move(self.row, 0)
        return True
    def keypress(self, c):
        if c == 'q':
            return False
        if c == 's':
            self.turn_off_current_string()
            # new
            self.params.violin_string += 1
            if self.params.violin_string > 3:
                self.params.violin_string = 0
        if c == 'a':
            self.turn_off_current_string()
            # new
            self.params.violin_string -= 1
            if self.params.violin_string < 0:
                self.params.violin_string = 3
        if c == 'f':
            if self.params.finger_position == 0.0:
                self.params.finger_position = 0.02
            else:
                self.params.finger_position *= 1.1
        if c == 'd':
            if self.params.finger_position < 0.02:
                self.params.finger_position = 0.00
            else:
                self.params.finger_position /= 1.1
        if c == 't':
            self.params.bow_position *= 1.01
        if c == 'g':
            self.params.bow_position /= 1.01
        if c == 'y':
            amount = self.params.force * 0.05
            amount = random.gauss(amount, 0.01*amount)
            self.params.force += amount
        if c == 'h':
            amount = self.params.force * 0.05
            amount = random.gauss(amount, 0.01*amount)
            self.params.force -= amount
        if c == 'u':
            self.params.velocity *= 1.1
        if c == 'j':
            self.params.velocity /= 1.1

        if c == 'm':
            self.tuning = TUNING_SETTLE_BUFFERS

        if c == 'p':
            self.commands_pipe_master.send( (COMMANDS.RESET, None) )

        skip_violin_print = False
        if c == 'z' or c == 'x' or c == 'c' or c == 'v':
            if c == 'z':
                alter = 1.0/1.1
            if c == 'x':
                alter = 1.0/1.01
            if c == 'c':
                alter = 1.01
            if c == 'v':
                alter = 1.1
            self.change_tension(alter)
            skip_violin_print = True

        ### TODO: icky hard-coding categories
        if c >= '1' and c <= '5':
            skip_violin_print = True
            self.snapshot(c)
            self.stdscr.addstr(self.row, 0, str("file written"))

        if c == ord('b'):
            self.params.force /= 1.1
        if c == 'l':
            if self.params.force > 0:
                self.store_force = self.params.force
                self.params.force = 0
            else:
                self.params.force = self.store_force
        if c == 'm':
            midi = midi_pos.pos2midi(self.params.finger_position)
            midi = round(midi)
            self.params.finger_position = midi_pos.midi2pos(midi)
            self.stdscr.addstr(23, 20, str("midi: %i" % midi))
        if c == 'n':
            midi = midi_pos.pos2midi(self.params.finger_position)
            midi = round(midi) + 1
            if midi > 12:
                midi = 0
            self.params.finger_position = midi_pos.midi2pos(midi)
            self.stdscr.addstr(23, 20, str("midi: %i  " % midi))

        self.keypress_extra(c)



        self.commands_pipe_master.send( (COMMANDS.FINGER, self.params) )
        self.commands_pipe_master.send( (COMMANDS.BOW, self.params) )
        if not skip_violin_print:
            self.stdscr.addstr(self.row, 0, str(
                "%i\t%.3f\t%.3f\t%.3f\t%.3f" % (
                self.params.violin_string, self.params.finger_position,
                self.params.bow_position, self.params.force, self.params.velocity)))
            # next line
            self.row += 1
            if self.row > 20:
                self.row = 5
            self.stdscr.addstr(self.row, 0, str(" "*40))
            self.stdscr.move(self.row, 0)
        return True