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