view demos/audio_tokenize_demo.py @ 331:9741b52f194a

Reformat code and documentation
author Amine Sehili <amine.sehili@gmail.com>
date Thu, 24 Oct 2019 20:49:51 +0200
parents 384e2d9b43ba
children
line wrap: on
line source
"""
@author: Amine SEHILI <amine.sehili@gmail.com>
September, 2015
"""

from auditok import (
    ADSFactory,
    AudioEnergyValidator,
    StreamTokenizer,
    player_for,
    dataset,
)
import sys

try:

    # We set the `record` argument to True so that we can rewind the source
    asource = ADSFactory.ads(
        filename=dataset.one_to_six_arabic_16000_mono_bc_noise, record=True
    )

    validator = AudioEnergyValidator(
        sample_width=asource.get_sample_width(), energy_threshold=65
    )

    # Default analysis window is 10 ms (float(asource.get_block_size()) / asource.get_sampling_rate())
    # min_length=20 : minimum length of a valid audio activity is 20 * 10 == 200 ms
    # max_length=400 :  maximum length of a valid audio activity is 400 * 10 == 4000 ms == 4 seconds
    # max_continuous_silence=30 : maximum length of a tolerated  silence within a valid audio activity is 30 * 30 == 300 ms
    tokenizer = StreamTokenizer(
        validator=validator,
        min_length=20,
        max_length=400,
        max_continuous_silence=30,
    )

    asource.open()
    tokens = tokenizer.tokenize(asource)

    # Play detected regions back
    player = player_for(asource)

    # Rewind and read the whole signal
    asource.rewind()
    original_signal = []

    while True:
        w = asource.read()
        if w is None:
            break
        original_signal.append(w)

    original_signal = b"".join(original_signal)
    player.play(original_signal)

    print("\n ** playing detected regions...\n")
    for i, t in enumerate(tokens):
        print(
            "Token [{0}] starts at {1} and ends at {2}".format(
                i + 1, t[1], t[2]
            )
        )
        data = b"".join(t[0])
        player.play(data)

    assert len(tokens) == 8

    asource.close()
    player.stop()

except KeyboardInterrupt:

    player.stop()
    asource.close()
    sys.exit(0)

except Exception as e:

    sys.stderr.write(str(e) + "\n")
    sys.exit(1)