コード例 #1
0
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()
コード例 #2
0
    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)
コード例 #4
0
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()
コード例 #5
0
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)
コード例 #6
0
ファイル: misc.py プロジェクト: ryanbekabe/pyfft
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()