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()
|