def main(argv): if len(argv) != 2: print "usage: python %s foo.mp3" % (argv[0]) return fp = FeaturePlan(sample_rate=SAMPLE_RATE, resample=True, time_start=TIME_START, time_limit=TIME_LIMIT) fp.addFeature("frames: Frames blockSize={0} stepSize={1}".format(SLICE_WINSIZE, SLICE_STEPSIZE)) if "YAAFE_PATH" in os.environ: fp.addFeature( "beat_hist: BeatHistogramSummary ACPNbPeaks=3 BHSBeatFrameSize=128 BHSBeatFrameStep=64 " "BHSHistogramFrameSize=40 BHSHistogramFrameStep=40 FFTLength=0 FFTWindow=Hanning " "HInf=40 HNbBins=80 HSup=200 NMANbFrames=5000 blockSize=1024 stepSize=512" ) df = fp.getDataFlow() engine = Engine() engine.load(df) afp = AudioFileProcessor() song_path = argv[1] assert os.path.exists(song_path) afp.processFile(engine, song_path) frames = engine.readOutput("frames") frames = np.concatenate(frames) print "time start: %ss" % TIME_START print "time limit: %ss" % TIME_LIMIT print "duration:", 1.0 * frames.size / SAMPLE_RATE if "YAAFE_PATH" in os.environ: beat_hist = engine.readOutput("beat_hist") print "beat_hist: %s" % beat_hist
def main(argv): if len(argv) != 2: print 'usage: python %s foo.mp3' % (argv[0]) return fp = FeaturePlan(sample_rate=SAMPLE_RATE, resample=True, time_start=TIME_START, time_limit=TIME_LIMIT) fp.addFeature("frames: Frames blockSize={0} stepSize={1}".format( SLICE_WINSIZE, SLICE_STEPSIZE)) if 'YAAFE_PATH' in os.environ: fp.addFeature( "beat_hist: BeatHistogramSummary ACPNbPeaks=3 BHSBeatFrameSize=128 BHSBeatFrameStep=64 " "BHSHistogramFrameSize=40 BHSHistogramFrameStep=40 FFTLength=0 FFTWindow=Hanning " "HInf=40 HNbBins=80 HSup=200 NMANbFrames=5000 blockSize=1024 stepSize=512" ) df = fp.getDataFlow() engine = Engine() engine.load(df) afp = AudioFileProcessor() song_path = argv[1] assert os.path.exists(song_path) afp.processFile(engine, song_path) frames = engine.readOutput('frames') frames = np.concatenate(frames) print 'time start: %ss' % TIME_START print 'time limit: %ss' % TIME_LIMIT print 'duration:', 1. * frames.size / SAMPLE_RATE if 'YAAFE_PATH' in os.environ: beat_hist = engine.readOutput('beat_hist') print 'beat_hist: %s' % beat_hist
def compute_spec(song_path): fp = FeaturePlan(sample_rate=22050, resample=True) #add one feature fp.addFeature("spec: PowerSpectrum blockSize=1024 stepSize=512") df = fp.getDataFlow() engine = Engine() engine.load(df) afp = AudioFileProcessor() afp.processFile(engine, song_path) return engine.readOutput('spec')
def main(argv): if len(argv) != 2: print 'usage: python %s foo.mp3' % (argv[0]) return fp = FeaturePlan(sample_rate=SAMPLE_RATE, resample=True, time_start=TIME_START, time_limit=TIME_LIMIT) fp.addFeature("frames: Frames blockSize={0} stepSize={1}".format( SLICE_WINSIZE, SLICE_STEPSIZE)) df = fp.getDataFlow() engine = Engine() engine.load(df) afp = AudioFileProcessor() song_path = argv[1] assert os.path.exists(song_path) afp.processFile(engine, song_path) frames = engine.readOutput('frames') frames = np.concatenate(frames) print 'time start: %ss' % TIME_START print 'time limit: %ss' % TIME_LIMIT print 'duration:', 1. * frames.size / SAMPLE_RATE from pylab import plot, show plot(frames) show()
def detect(wav_path, ans_path=None): sample_rate = 8000 block_size = 1024 step_size = block_size / 2 n_band = block_size / 2 freq_bound = [i * sample_rate / 2. / n_band for i in range(n_band + 1)] plan = FeaturePlan(sample_rate=sample_rate, resample=True) plan.addFeature('power_spectrum: PowerSpectrum blockSize=%d stepSize=%d' % (block_size, step_size)) dataflow = plan.getDataFlow() afp = AudioFileProcessor() engine = Engine() engine.load(dataflow) afp.processFile(engine, wav_path) spectrogram = engine.readOutput('power_spectrum') seq = [] for spectrum in spectrogram: mean_mag = np.mean(spectrum) if mean_mag <= SILENT_MAG_THRESHOLD: seq.append(SILENT_KEY) continue lower_data = (-1, -1) upper_data = (-1, -1) for target_idx, target_freq in itertools.chain(enumerate(LOWER_FREQS), enumerate(UPPER_FREQS)): idx = bisect.bisect(freq_bound, target_freq) assert idx > 0 freq1 = freq_bound[idx - 1] mag1 = spectrum[idx - 1] freq2 = freq_bound[idx] mag2 = spectrum[idx] w1 = 1. * (freq2 - target_freq) / (freq2 - freq1) w2 = 1. - w1 target_mag = (w1 * mag1 + w2 * mag2) if target_mag > mean_mag * 2: if target_freq < 1000: if target_mag > lower_data[1]: lower_data = (target_idx, target_mag) else: if target_mag > upper_data[1]: upper_data = (target_idx, target_mag) lower_idx = lower_data[0] upper_idx = upper_data[0] if lower_idx == -1 or upper_idx == -1: seq.append(UNKNOWN_KEY) else: seq.append(KEYS[lower_idx * len(LOWER_FREQS) + upper_idx]) ans = purge_seq(seq) if ans_path is not None: with open(ans_path) as fh: for i, line in enumerate(fh): line = line.strip() assert line == ans[i], "%s != %s" % (line, ans[i]) print '[%d] %s' % (i, line) else: for i, line in enumerate(ans): print '[%d] %s' % (i, line)
def detect(wav_path, ans_path=None): sample_rate = 8000 block_size = 1024 step_size = block_size / 2 n_band = block_size / 2 freq_bound = [i * sample_rate / 2. / n_band for i in range(n_band + 1)] plan = FeaturePlan(sample_rate=sample_rate, resample=True) plan.addFeature( 'power_spectrum: PowerSpectrum blockSize=%d stepSize=%d' % ( block_size, step_size ) ) dataflow = plan.getDataFlow() afp = AudioFileProcessor() engine = Engine() engine.load(dataflow) afp.processFile(engine, wav_path) spectrogram = engine.readOutput('power_spectrum') seq = [] for spectrum in spectrogram: mean_mag = np.mean(spectrum) if mean_mag <= SILENT_MAG_THRESHOLD: seq.append(SILENT_KEY) continue lower_data = (-1, -1) upper_data = (-1, -1) for target_idx, target_freq in itertools.chain( enumerate(LOWER_FREQS), enumerate(UPPER_FREQS) ): idx = bisect.bisect(freq_bound, target_freq) assert idx > 0 freq1 = freq_bound[idx - 1] mag1 = spectrum[idx - 1] freq2 = freq_bound[idx] mag2 = spectrum[idx] w1 = 1. * (freq2 - target_freq) / (freq2 - freq1) w2 = 1. - w1 target_mag = (w1 * mag1 + w2 * mag2) if target_mag > mean_mag * 2: if target_freq < 1000: if target_mag > lower_data[1]: lower_data = (target_idx, target_mag) else: if target_mag > upper_data[1]: upper_data = (target_idx, target_mag) lower_idx = lower_data[0] upper_idx = upper_data[0] if lower_idx == -1 or upper_idx == -1: seq.append(UNKNOWN_KEY) else: seq.append(KEYS[lower_idx * len(LOWER_FREQS) + upper_idx]) ans = purge_seq(seq) if ans_path is not None: with open(ans_path) as fh: for i, line in enumerate(fh): line = line.strip() assert line == ans[i], "%s != %s" % (line, ans[i]) print '[%d] %s' % (i, line) else: for i, line in enumerate(ans): print '[%d] %s' % (i, line)