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)