amine@2: """ amine@2: @author: Amine SEHILI amine@2: September, 2015 amine@2: """ amine@2: amine@2: from auditok import ADSFactory, AudioEnergyValidator, StreamTokenizer, player_for, dataset amine@10: import sys amine@2: amine@10: try: amine@2: amine@10: # We set the `record` argument to True so that we can rewind the source amine@10: asource = ADSFactory.ads(filename=dataset.one_to_six_arabic_16000_mono_bc_noise, record=True) amine@2: amine@10: validator = AudioEnergyValidator(sample_width=asource.get_sample_width(), energy_threshold=65) amine@2: hoelzl@63: # Default analysis window is 10 ms (float(asource.get_block_size()) / asource.get_sampling_rate()) amine@10: # min_length=20 : minimum length of a valid audio activity is 20 * 10 == 200 ms amine@10: # max_length=400 : maximum length of a valid audio activity is 400 * 10 == 4000 ms == 4 seconds amine@10: # max_continuous_silence=30 : maximum length of a tolerated silence within a valid audio activity is 30 * 30 == 300 ms amine@10: tokenizer = StreamTokenizer(validator=validator, min_length=20, max_length=400, max_continuous_silence=30) amine@2: amine@10: asource.open() amine@10: tokens = tokenizer.tokenize(asource) amine@2: amine@10: # Play detected regions back amine@10: player = player_for(asource) amine@2: amine@10: # Rewind and read the whole signal amine@10: asource.rewind() amine@10: original_signal = [] amine@2: amine@10: while True: amine@10: w = asource.read() amine@10: if w is None: amine@10: break amine@10: original_signal.append(w) amine@10: amine@2: amine@10: original_signal = b''.join(original_signal) amine@10: player.play(original_signal) amine@2: amine@10: print("\n ** playing detected regions...\n") amine@10: for i,t in enumerate(tokens): amine@10: print("Token [{0}] starts at {1} and ends at {2}".format(i+1, t[1], t[2])) amine@10: data = b''.join(t[0]) amine@10: player.play(data) amine@2: amine@10: assert len(tokens) == 8 amine@2: amine@10: asource.close() amine@10: player.stop() amine@10: amine@10: except KeyboardInterrupt: amine@10: amine@10: player.stop() amine@10: asource.close() amine@10: sys.exit(0) amine@10: amine@10: except Exception as e: amine@10: amine@10: sys.stderr.write(str(e) + "\n") amine@10: sys.exit(1)