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