Ejemplo n.º 1
0
    def pitch2midiPyinMonoNoteOut(self, monoNoteOut_filename, monoNoteOutMidi_filename):

        """
        read note pitch and convert to midi note
        :param monoNoteOut_filename:
        :return: noteStartingTime, noteDurationTime
        """

        monoNoteOut = np.loadtxt(monoNoteOut_filename, delimiter=",", usecols=[1, 2, 3])
        noteStartingTime = monoNoteOut[:, 0]
        noteDurTime = monoNoteOut[:, 1]
        notePitch = monoNoteOut[:, 2]
        notePitchMidi = pitch2midi(notePitch)

        with open(monoNoteOutMidi_filename, "w+") as outfile:
            outfile.write("startTime" + "," + "pitch" + "," + "freq" + "," + "duration" + "," + "noteStr" + "\n")
            for ii in range(len(noteStartingTime)):
                noteCents = hz2cents(float(notePitch[ii]))
                noteStr = cents2pitch(noteCents)
                outfile.write(
                    str(noteStartingTime[ii])
                    + ","
                    + str(notePitchMidi[ii])
                    + ","
                    + str(notePitch[ii])
                    + ","
                    + str(noteDurTime[ii])
                    + ","
                    + noteStr
                    + "\n"
                )

        return noteStartingTime, noteDurTime, notePitch, notePitchMidi
    def pitch2midiPyinMonoNoteOut(self, monoNoteOut_filename,monoNoteOutMidi_filename):

        '''
        read note pitch and convert to midi note
        :param monoNoteOut_filename:
        :return: noteStartingTime, noteDurationTime
        '''

        monoNoteOut = np.loadtxt(monoNoteOut_filename,delimiter=',',usecols=[1,2,3])
        noteStartingTime = monoNoteOut[:,0]
        noteDurTime = monoNoteOut[:,1]
        notePitch = monoNoteOut[:,2]
        notePitchMidi = pitch2midi(notePitch)

        with open(monoNoteOutMidi_filename, 'w+') as outfile:
            outfile.write('startTime'+','
                            +'pitch'+','
                            +'freq'+','
                            +'duration'+','
                            +'noteStr'+'\n')
            for ii in range(len(noteStartingTime)):
                noteCents = hz2cents(float(notePitch[ii]))
                noteStr = cents2pitch(noteCents)
                outfile.write(str(noteStartingTime[ii])+','
                            +str(notePitchMidi[ii])+','
                            +str(notePitch[ii])+','
                            +str(noteDurTime[ii])+','
                            +noteStr+'\n')

        return noteStartingTime, noteDurTime, notePitch, notePitchMidi
Ejemplo n.º 3
0
    def noteEndFrameHelper(self, notePitchtrack, startDur):

        notePitchtrack = np.abs(notePitchtrack)
        notePitchtrack = pitch2midi(notePitchtrack)  # convert to midi note

        self.pitchtrackByNotes.append([notePitchtrack,startDur])
        notePitchtrack = []
        startDur = [0, 0]

        return notePitchtrack, startDur
Ejemplo n.º 4
0
    def doSegmentationForPyinVamp(self, pitchtrack_filename,
                                  monoNoteOut_filename):

        # doSegmentationFunction for pYin vamp plugin exported
        # pitchtrack and monoNote

        self.reset()

        frameStartingTime, pitchtrack = self.readPyinPitchtrack(
            pitchtrack_filename)
        noteStartingTime, noteDurTime = self.readPyinMonoNoteOut(
            monoNoteOut_filename)

        # convert pitch to midi and save pitch track
        monoNoteOutMidi_filename = monoNoteOut_filename[:-4] + '_midi.csv'
        self.pitch2midiPyinMonoNoteOut(monoNoteOut_filename,
                                       monoNoteOutMidi_filename)

        self.minMaxPitchtrack(pitchtrack)

        pitchtrack = np.abs(pitchtrack)
        pitchtrack = pitch2midi(pitchtrack)

        noteEndingTime = noteStartingTime + noteDurTime

        noteStartingIndex = []
        noteEndingIndex = []

        for ii in noteStartingTime:
            noteStartingIndex.append(np.argmin(np.abs(frameStartingTime - ii)))

        for ii in noteEndingTime:
            noteEndingIndex.append(np.argmin(np.abs(frameStartingTime - ii)))

        for ii in range(len(noteStartingIndex)):
            notePitchtrack = pitchtrack[noteStartingIndex[ii]:(
                noteEndingIndex[ii] + 1)]
            startDur = [
                noteStartingIndex[ii],
                noteEndingIndex[ii] - noteStartingIndex[ii] + 1
            ]

            noteStartingFrame = int(noteStartingTime[ii] *
                                    (self.fs / self.hopSize))
            noteEndingFrame = int(noteEndingTime[ii] *
                                  (self.fs / self.hopSize))
            self.noteStartEndFrame.append([noteStartingFrame, noteEndingFrame])
            self.pitchtrackByNotes.append([notePitchtrack.tolist(), startDur])

        return
    def doSegmentationForPyinVamp(self, pitchtrack_filename, monoNoteOut_filename):

        # doSegmentationFunction for pYin vamp plugin exported
        # pitchtrack and monoNote

        self.reset()

        frameStartingTime, pitchtrack = self.readPyinPitchtrack(pitchtrack_filename)
        noteStartingTime, noteDurTime = self.readPyinMonoNoteOut(monoNoteOut_filename)

        # convert pitch to midi and save pitch track
        monoNoteOutMidi_filename = monoNoteOut_filename[:-4]+'_midi.csv'
        self.pitch2midiPyinMonoNoteOut(monoNoteOut_filename,monoNoteOutMidi_filename)

        self.minMaxPitchtrack(pitchtrack)

        pitchtrack = np.abs(pitchtrack)
        pitchtrack = pitch2midi(pitchtrack)

        noteEndingTime = noteStartingTime+noteDurTime

        noteStartingIndex = []
        noteEndingIndex = []

        for ii in noteStartingTime:
            noteStartingIndex.append(np.argmin(np.abs(frameStartingTime - ii)))

        for ii in noteEndingTime:
            noteEndingIndex.append(np.argmin(np.abs(frameStartingTime - ii)))

        for ii in range(len(noteStartingIndex)):
            notePitchtrack = pitchtrack[noteStartingIndex[ii]:(noteEndingIndex[ii]+1)]
            startDur = [noteStartingIndex[ii],noteEndingIndex[ii]-noteStartingIndex[ii]+1]

            noteStartingFrame = int(noteStartingTime[ii]*(self.fs/self.hopSize))
            noteEndingFrame = int(noteEndingTime[ii]*(self.fs/self.hopSize))
            self.noteStartEndFrame.append([noteStartingFrame,noteEndingFrame])
            self.pitchtrackByNotes.append([notePitchtrack.tolist(), startDur])

        return