annotate demos/audio_tokenize_demo.py @ 2:edee860b9f61

First release on Github
author Amine Sehili <amine.sehili@gmail.com>
date Thu, 17 Sep 2015 22:01:30 +0200
parents
children 9be2d0ca4c00
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@2 6 from auditok import ADSFactory, AudioEnergyValidator, StreamTokenizer, player_for, dataset
amine@2 7
amine@2 8 # We set the `record` argument to True so that we can rewind the source
amine@2 9 asource = ADSFactory.ads(filename=dataset.one_to_six_arabic_16000_mono_bc_noise, record=True)
amine@2 10
amine@2 11 validator = AudioEnergyValidator(sample_width=asource.get_sample_width(), energy_threshold=65)
amine@2 12
amine@2 13 # Defalut analysis window is 10 ms (float(asource.get_block_size()) / asource.get_sampling_rate())
amine@2 14 # min_length=20 : minimum length of a valid audio activity is 20 * 10 == 200 ms
amine@2 15 # max_length=400 : maximum length of a valid audio activity is 400 * 10 == 4000 ms == 4 seconds
amine@2 16 # max_continuous_silence=30 : maximum length of a tolerated silence within a valid audio activity is 30 * 30 == 300 ms
amine@2 17 tokenizer = StreamTokenizer(validator=validator, min_length=20, max_length=400, max_continuous_silence=30)
amine@2 18
amine@2 19 asource.open()
amine@2 20 tokens = tokenizer.tokenize(asource)
amine@2 21
amine@2 22 # Play detected regions back
amine@2 23
amine@2 24 player = player_for(asource)
amine@2 25
amine@2 26 # Rewind and read the whole signal
amine@2 27 asource.rewind()
amine@2 28 original_signal = []
amine@2 29
amine@2 30 while True:
amine@2 31 w = asource.read()
amine@2 32 if w is None:
amine@2 33 break
amine@2 34 original_signal.append(w)
amine@2 35
amine@2 36 original_signal = ''.join(original_signal)
amine@2 37
amine@2 38 print("\n ** Playing original file...")
amine@2 39 player.play(original_signal)
amine@2 40
amine@2 41 print("\n ** playing detected regions...\n")
amine@2 42 for i,t in enumerate(tokens):
amine@2 43 print("Token [{0}] starts at {1} and ends at {2}".format(i+1, t[1], t[2]))
amine@2 44 data = ''.join(t[0])
amine@2 45 player.play(data)
amine@2 46
amine@2 47 assert len(tokens) == 8
amine@2 48
amine@2 49 asource.close()
amine@2 50 player.stop()