Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • python/demos/demo_filter.py

    r01f7598 r8ebcd3d  
    11#! /usr/bin/env python
    22
     3import sys
     4import os.path
     5import aubio
    36
    4 def apply_filter(path):
    5     from aubio import source, sink, digital_filter
    6     from os.path import basename, splitext
    77
     8def apply_filter(path, target):
    89    # open input file, get its samplerate
    9     s = source(path)
     10    s = aubio.source(path)
    1011    samplerate = s.samplerate
    1112
    1213    # create an A-weighting filter
    13     f = digital_filter(7)
     14    f = aubio.digital_filter(7)
    1415    f.set_a_weighting(samplerate)
    15     # alternatively, apply another filter
    1616
    1717    # create output file
    18     o = sink("filtered_" + splitext(basename(path))[0] + ".wav", samplerate)
     18    o = aubio.sink(target, samplerate)
    1919
    2020    total_frames = 0
    2121    while True:
     22        # read from source
    2223        samples, read = s()
     24        # filter samples
    2325        filtered_samples = f(samples)
     26        # write to sink
    2427        o(filtered_samples, read)
     28        # count frames read
    2529        total_frames += read
    26         if read < s.hop_size: break
     30        # end of file reached
     31        if read < s.hop_size:
     32            break
    2733
     34    # print some info
    2835    duration = total_frames / float(samplerate)
    29     print ("read {:s}".format(s.uri))
    30     print ("applied A-weighting filtered ({:d} Hz)".format(samplerate))
    31     print ("wrote {:s} ({:.2f} s)".format(o.uri, duration))
     36    input_str = "input: {:s} ({:.2f} s, {:d} Hz)"
     37    output_str = "output: {:s}, A-weighting filtered ({:d} frames total)"
     38    print(input_str.format(s.uri, duration, samplerate))
     39    print(output_str.format(o.uri, total_frames))
    3240
    3341if __name__ == '__main__':
    34     import sys
    35     for f in sys.argv[1:]:
    36         apply_filter(f)
     42    usage = "{:s} <input_file> [output_file]".format(sys.argv[0])
     43    if not 1 < len(sys.argv) < 4:
     44        print(usage)
     45        sys.exit(1)
     46    if len(sys.argv) < 3:
     47        input_path = sys.argv[1]
     48        basename = os.path.splitext(os.path.basename(input_path))[0] + ".wav"
     49        output_path = "filtered_" + basename
     50    else:
     51        input_path, output_path = sys.argv[1:]
     52    # run function
     53    apply_filter(input_path, output_path)
Note: See TracChangeset for help on using the changeset viewer.