annotate 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
rev   line source
amine@2 1 """
amine@2 2 @author: Amine SEHILI <amine.sehili@gmail.com>
amine@2 3 September, 2015
amine@2 4 """
amine@2 5
amine@331 6 from auditok import (
amine@331 7 ADSFactory,
amine@331 8 AudioEnergyValidator,
amine@331 9 StreamTokenizer,
amine@331 10 player_for,
amine@331 11 dataset,
amine@331 12 )
amine@10 13 import sys
amine@2 14
amine@10 15 try:
amine@2 16
amine@331 17 # We set the `record` argument to True so that we can rewind the source
amine@331 18 asource = ADSFactory.ads(
amine@331 19 filename=dataset.one_to_six_arabic_16000_mono_bc_noise, record=True
amine@331 20 )
amine@2 21
amine@331 22 validator = AudioEnergyValidator(
amine@331 23 sample_width=asource.get_sample_width(), energy_threshold=65
amine@331 24 )
amine@2 25
amine@331 26 # Default analysis window is 10 ms (float(asource.get_block_size()) / asource.get_sampling_rate())
amine@331 27 # min_length=20 : minimum length of a valid audio activity is 20 * 10 == 200 ms
amine@331 28 # max_length=400 : maximum length of a valid audio activity is 400 * 10 == 4000 ms == 4 seconds
amine@331 29 # max_continuous_silence=30 : maximum length of a tolerated silence within a valid audio activity is 30 * 30 == 300 ms
amine@331 30 tokenizer = StreamTokenizer(
amine@331 31 validator=validator,
amine@331 32 min_length=20,
amine@331 33 max_length=400,
amine@331 34 max_continuous_silence=30,
amine@331 35 )
amine@2 36
amine@331 37 asource.open()
amine@331 38 tokens = tokenizer.tokenize(asource)
amine@2 39
amine@331 40 # Play detected regions back
amine@331 41 player = player_for(asource)
amine@2 42
amine@331 43 # Rewind and read the whole signal
amine@331 44 asource.rewind()
amine@331 45 original_signal = []
amine@2 46
amine@331 47 while True:
amine@331 48 w = asource.read()
amine@331 49 if w is None:
amine@331 50 break
amine@331 51 original_signal.append(w)
amine@2 52
amine@331 53 original_signal = b"".join(original_signal)
amine@331 54 player.play(original_signal)
amine@2 55
amine@331 56 print("\n ** playing detected regions...\n")
amine@331 57 for i, t in enumerate(tokens):
amine@331 58 print(
amine@331 59 "Token [{0}] starts at {1} and ends at {2}".format(
amine@331 60 i + 1, t[1], t[2]
amine@331 61 )
amine@331 62 )
amine@331 63 data = b"".join(t[0])
amine@331 64 player.play(data)
amine@2 65
amine@331 66 assert len(tokens) == 8
amine@2 67
amine@331 68 asource.close()
amine@331 69 player.stop()
amine@10 70
amine@10 71 except KeyboardInterrupt:
amine@10 72
amine@331 73 player.stop()
amine@331 74 asource.close()
amine@331 75 sys.exit(0)
amine@10 76
amine@10 77 except Exception as e:
amine@10 78
amine@331 79 sys.stderr.write(str(e) + "\n")
amine@331 80 sys.exit(1)