Mercurial > hg > auditok
annotate demos/echo.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@331 | 1 from auditok import ( |
amine@331 | 2 ADSFactory, |
amine@331 | 3 AudioEnergyValidator, |
amine@331 | 4 StreamTokenizer, |
amine@331 | 5 player_for, |
amine@331 | 6 ) |
amine@2 | 7 import pyaudio |
amine@2 | 8 import sys |
amine@2 | 9 |
amine@10 | 10 try: |
amine@2 | 11 |
amine@331 | 12 energy_threshold = 45 |
amine@331 | 13 duration = 10 # seconds |
amine@2 | 14 |
amine@331 | 15 if len(sys.argv) > 1: |
amine@331 | 16 energy_threshold = float(sys.argv[1]) |
amine@2 | 17 |
amine@331 | 18 if len(sys.argv) > 2: |
amine@331 | 19 duration = float(sys.argv[2]) |
amine@2 | 20 |
amine@331 | 21 # record = True so that we'll be able to rewind the source. |
amine@331 | 22 # max_time = 10: read 10 seconds from the microphone |
amine@331 | 23 asource = ADSFactory.ads(record=True, max_time=duration) |
amine@2 | 24 |
amine@331 | 25 validator = AudioEnergyValidator( |
amine@331 | 26 sample_width=asource.get_sample_width(), |
amine@331 | 27 energy_threshold=energy_threshold, |
amine@331 | 28 ) |
amine@331 | 29 tokenizer = StreamTokenizer( |
amine@331 | 30 validator=validator, |
amine@331 | 31 min_length=20, |
amine@331 | 32 max_length=250, |
amine@331 | 33 max_continuous_silence=30, |
amine@331 | 34 ) |
amine@2 | 35 |
amine@331 | 36 player = player_for(asource) |
amine@2 | 37 |
amine@331 | 38 def echo(data, start, end): |
amine@331 | 39 print("Acoustic activity at: {0}--{1}".format(start, end)) |
amine@331 | 40 player.play(b"".join(data)) |
amine@2 | 41 |
amine@331 | 42 asource.open() |
amine@2 | 43 |
amine@331 | 44 print( |
amine@331 | 45 "\n ** Make some noise (dur:{}, energy:{})...".format( |
amine@331 | 46 duration, energy_threshold |
amine@331 | 47 ) |
amine@331 | 48 ) |
amine@2 | 49 |
amine@331 | 50 tokenizer.tokenize(asource, callback=echo) |
amine@2 | 51 |
amine@331 | 52 asource.close() |
amine@331 | 53 player.stop() |
amine@10 | 54 |
amine@10 | 55 except KeyboardInterrupt: |
amine@10 | 56 |
amine@331 | 57 player.stop() |
amine@331 | 58 asource.close() |
amine@331 | 59 sys.exit(0) |
amine@10 | 60 |
amine@10 | 61 except Exception as e: |
amine@331 | 62 |
amine@331 | 63 sys.stderr.write(str(e) + "\n") |
amine@331 | 64 sys.exit(1) |