annotate demos/audio_tokenize_demo.py @ 130:7c5f325dae7a

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