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()))