Exemplo n.º 1
0
def predict(modelPath, labelPath, wavPath):
    lf = open(labelPath, 'r')
    labelLn = lf.readlines()

    # remove \n
    label = []
    for item in labelLn:
        label.append(item.strip())

    pred = Predictor()
    pred.load(modelPath)

    #70Hzと74Hzの区別がつく分解能が要る。
    FR = 44100
    T = 1.0 / FR
    N = 16384

    rate, dataAll = wavfile.read(wavPath, True)

    if rate != FR:
        print('Error: sample rate is not 44.1kHz!')
        return

    # get channel 0 (left channel in stereo)
    if dataAll.ndim != 1:
        dataAll = dataAll[:, 0]

    print('Time        Chord   Confidence')

    nPred = (int)(len(dataAll) / FR)
    for t in range(0, nPred):
        data = dataAll[t * FR:t * FR + N]

        # 16bit int format -> float64
        x = data.astype(np.float)

        # normalize input time domain data to [-1 +1]
        xs = normalizeArray(x)

        w = scipy.signal.blackman(N)
        xf = scipy.fftpack.fft(xs * w)
        xfa = np.abs(xf)

        #70Hzと4kHzの区間を見る。
        startIdx = (int)(70 * N / FR)
        endIdx = (int)(4000 * N / FR)
        xfs = xfa[startIdx:endIdx]

        # normalize frequency domain data to [0, +1]
        xIn = normalizePositiveArray(xfs)

        xInR = np.reshape(xIn, (1, -1))
        (ypred, conf) = pred.predict(xInR)

        ypredI = int(ypred)

        #print('', ypredI)
        if conf.max() >= 0:
            print('%3d:%02d %10s %6.2f' %
                  ((int)(t / 60), t % 60, label[ypredI], conf.max()))