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
|
amine@10
|
16 # Defalut 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@2
|
26
|
amine@10
|
27 player = player_for(asource)
|
amine@2
|
28
|
amine@10
|
29 # Rewind and read the whole signal
|
amine@10
|
30 asource.rewind()
|
amine@10
|
31 original_signal = []
|
amine@2
|
32
|
amine@10
|
33 while True:
|
amine@10
|
34 w = asource.read()
|
amine@10
|
35 if w is None:
|
amine@10
|
36 break
|
amine@10
|
37 original_signal.append(w)
|
amine@10
|
38
|
amine@2
|
39
|
amine@10
|
40 original_signal = b''.join(original_signal)
|
amine@10
|
41 player.play(original_signal)
|
amine@2
|
42
|
amine@10
|
43 print("\n ** playing detected regions...\n")
|
amine@10
|
44 for i,t in enumerate(tokens):
|
amine@10
|
45 print("Token [{0}] starts at {1} and ends at {2}".format(i+1, t[1], t[2]))
|
amine@10
|
46 data = b''.join(t[0])
|
amine@10
|
47 player.play(data)
|
amine@2
|
48
|
amine@10
|
49 assert len(tokens) == 8
|
amine@2
|
50
|
amine@10
|
51 asource.close()
|
amine@10
|
52 player.stop()
|
amine@10
|
53
|
amine@10
|
54 except KeyboardInterrupt:
|
amine@10
|
55
|
amine@10
|
56 player.stop()
|
amine@10
|
57 asource.close()
|
amine@10
|
58 sys.exit(0)
|
amine@10
|
59
|
amine@10
|
60 """
|
amine@10
|
61 except Exception as e:
|
amine@10
|
62
|
amine@10
|
63 sys.stderr.write(str(e) + "\n")
|
amine@10
|
64 sys.exit(1)
|
amine@10
|
65 """
|