Examples

Below is a short selection of examples using the aubio module.

Read a sound file

Here is a simple script, demo_source_simple.py that reads all the samples from a media file using source:

#! /usr/bin/env python

"""A simple example using aubio.source."""

import sys
import aubio

samplerate = 0  # use original source samplerate
hop_size = 256  # number of frames to read in one block
src = aubio.source(sys.argv[1], samplerate, hop_size)
total_frames = 0

while True:
    samples, read = src()  # read hop_size new samples from source
    total_frames += read   # increment total number of frames
    if read < hop_size:    # end of file reached
        break

fmt_string = "read {:d} frames at {:d}Hz from {:s}"
print(fmt_string.format(total_frames, src.samplerate, src.uri))

Filter a sound file

Here is another example, demo_filter.py, which applies a filter to a sound file and writes the filtered signal in another file:

#! /usr/bin/env python

import sys
import os.path
import aubio


def apply_filter(path, target):
    # open input file, get its samplerate
    s = aubio.source(path)
    samplerate = s.samplerate

    # create an A-weighting filter
    f = aubio.digital_filter(7)
    f.set_a_weighting(samplerate)

    # create output file
    o = aubio.sink(target, samplerate)

    total_frames = 0
    while True:
        # read from source
        samples, read = s()
        # filter samples
        filtered_samples = f(samples)
        # write to sink
        o(filtered_samples, read)
        # count frames read
        total_frames += read
        # end of file reached
        if read < s.hop_size:
            break

    # print some info
    duration = total_frames / float(samplerate)
    input_str = "input: {:s} ({:.2f} s, {:d} Hz)"
    output_str = "output: {:s}, A-weighting filtered ({:d} frames total)"
    print(input_str.format(s.uri, duration, samplerate))
    print(output_str.format(o.uri, total_frames))

if __name__ == '__main__':
    usage = "{:s} <input_file> [output_file]".format(sys.argv[0])
    if not 1 < len(sys.argv) < 4:
        print(usage)
        sys.exit(1)
    if len(sys.argv) < 3:
        input_path = sys.argv[1]
        basename = os.path.splitext(os.path.basename(input_path))[0] + ".wav"
        output_path = "filtered_" + basename
    else:
        input_path, output_path = sys.argv[1:]
    # run function
    apply_filter(input_path, output_path)

More examples

For more examples showing how to use other components of the module, see the python demos folder.