def main(file, bit_depth): f = wave.open(file, 'rb') signal = f.readframes(-1) data = np.fromstring(signal, bit_depth) rate = f.getframerate() channels = f.getnchannels() show = True if channels == 1: _len = len(data) x = np.linspace(0, rate, _len) # print('Length d:', len(data)) # print('Length x:', len(x)) yf = fft(data) # print('Length:', len(yf)) yf = np.abs(yf) half_y = yf[:int(_len / 2)] half_x = x[:int(_len / 2)] csvobj = fs.get_csv_writer('data_fft.csv', 'f', 'a') fft_writer = csvobj.writer [fft_writer.writerow([f, a]) for f, a in zip(half_x, half_y)] # plt.semilogx(half_x, half_y) elif channels == 2: _len = len(data) / channels x = np.linspace(0, rate, num=_len) # left channel ldata = data[::2] # right channel rdata = data[1::2] half_x = x[:int(_len / 2)] half_y = ldata[:int(_len / 2)] # plt.semilogx(x[:int(_len/2)], ldata[:int(_len/2)]) # plt.plot(x[:int(_len/2)], rdata[:int(_len/2)]) else: show = False if show: plt.semilogx(half_x, half_y) plt.title('FFT plot: %s' % file) plt.show()
def process_raw(count, raw, params, fname): data = np.fromstring(raw, bit_depth) data_length = len(data) max_freq_range = data_length if data_length > params.framerate else params.framerate x = np.linspace(0, params.framerate, data_length) y = np.abs(fft(data)) csvobj = fs.get_csv_writer( 'processed/data_fft_%s_%s.csv' % (fname, pad(count)), 'f', 'a') writer = csvobj.writer half = int(data_length / 2) [writer.writerow([f, a]) for f, a in zip(x[:half], y[:half])] csvobj.fd.close() wav_file = 'processed/audio_%s_%s.wav' % (fname, pad(count)) write_wav(wav_file, raw)
def main(bit_depth='Int16'): files = os.listdir('processed') s = 'audio_' for file in files: base_name, ext = os.path.splitext(file) actual_file_path = os.path.join('processed', file) if ext == '.wav': f = wave.open(actual_file_path, 'rb') params = f.getparams() rate = params.framerate if params.nchannels == 1: raw = f.readframes(-1) data = np.fromstring(raw, bit_depth) x = np.linspace(0, rate, len(data)) y = np.abs(fft(data)) csv_file_name = 'processed/data_fft_%s.csv' % base_name[len(s ):] o = fs.get_csv_writer(csv_file_name, 'f', 'a') writer = o.writer half = int(len(data) / 2) [writer.writerow((f, a)) for f, a in zip(x[:half], y[:half])] o.fd.close() print('Saved: ', csv_file_name)
def write_data_to_csv(file, data): x, y = data o = fs.get_csv_writer(file, 'f', 'a') w = o.writer [ w.writerow(rec) for rec in zip(x, y)] o.fd.close()
def main(file, bit_depth): f = wave.open(file, 'rb') signal = f.readframes(-1) data = np.fromstring(signal, bit_depth) _len = len(data) rate = f.getframerate() channels = f.getnchannels() compute = True if channels == 1: x = np.linspace(0, rate, _len) yf = fft(data) yf = np.abs(yf) half_y = yf[:int(_len / 2)] half_x = x[:int(_len / 2)] elif channels == 2: x = np.linspace(0, rate, _len / channels) # considering only left data l_data = data[::2] assert (len(l_data) == _len / channels) yf = np.abs(fft(l_data)) assert len(x) == len(yf) half_x = x[:int(_len / channels / 2)] half_y = yf[:int(_len / channels / 2)] else: compute = False print('nothing done') if compute: csv_obj = fs.get_csv_writer('samples/data_fft.csv', 'f', 'a') fft_writer = csv_obj.writer [fft_writer.writerow([f, a]) for f, a in zip(half_x, half_y)] file_base = path.basename(file) file_without_ext, ext = path.splitext(file_base) unique_file_csv = 'samples/data_fft_%s%s' % (file_without_ext, EXT_CSV) csv_obj.fd.close() fs.copy('samples/data_fft.csv', unique_file_csv) print('Saved fft:', unique_file_csv) max_y = max(half_y) csv_obj = fs.get_csv_writer('samples/fundamental_frequencies.csv', 'f', 'a', 'na') writer = csv_obj.writer fft_set = [(f, a, a / max_y) for f, a, in zip(half_x, half_y)] result = [(f, a, na) for f, a, na in fft_set if f < 20000 and na > 0.5] for row in result: writer.writerow(row) freq_unique_file = 'samples/fundamental_frequencies_%s%s' % ( file_without_ext, EXT_CSV) csv_obj.fd.close() fs.copy('samples/fundamental_frequencies.csv', freq_unique_file) print('Saved fundamentals:', freq_unique_file)
def write_data_to_csv(file, data, *headers): o = fs.get_csv_writer(file, *headers) w = o.writer [w.writerow(a) for a in data] o.fd.close()