64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
import os
|
|
import wave
|
|
import struct
|
|
from datetime import datetime
|
|
|
|
import pvporcupine
|
|
from pvrecorder import PvRecorder
|
|
|
|
keyword_paths=['/home/dfr84/Python/Jarvis/Jarvis_en_linux_v4_0_0.ppn']
|
|
output_path = "/home/dfr84/Python/Jarvis/output.wav"
|
|
|
|
def main():
|
|
porcupine = pvporcupine.create(access_key='Iy02++yL2aOfXc9mmvSWAfdhVSR8PEtMjWMIWRbaC4bXno57SgoI8A==', keyword_paths=['/home/dfr84/Python/Jarvis/Jarvis_en_linux_v4_0_0.ppn'])
|
|
|
|
print('PORCUPINE VISION: %s' % porcupine.version)
|
|
|
|
for i, device in enumerate(PvRecorder.get_available_devices()):
|
|
print('DEVICE %d: %s' % (i, device))
|
|
|
|
keywords = list()
|
|
for x in keyword_paths:
|
|
keyword_phrase_part = os.path.basename(x).replace('.ppn', '').split('_')
|
|
if len(keyword_phrase_part) > 6:
|
|
keywords.append(' '.join(keyword_phrase_part[0:-6]))
|
|
else:
|
|
keywords.append(keyword_phrase_part[0])
|
|
|
|
recorder = PvRecorder(
|
|
frame_length=porcupine.frame_length,
|
|
device_index=1)
|
|
|
|
recorder.start()
|
|
|
|
wav_file = None
|
|
wav_file = wave.open(output_path, "w")
|
|
wav_file.setnchannels(1)
|
|
wav_file.setsampwidth(2)
|
|
wav_file.setframerate(16000)
|
|
|
|
print('LISTENING... (PRESS CTRL+C TO EXIT)')
|
|
|
|
try:
|
|
while True:
|
|
pcm = recorder.read()
|
|
result = porcupine.process(pcm)
|
|
|
|
if wav_file is not None:
|
|
wav_file.writeframes(struct.pack("h" * len(pcm), *pcm))
|
|
|
|
if result >= 0:
|
|
print('[%s] DETECTED %s' % (str(datetime.now()), keywords[result]))
|
|
|
|
except KeyboardInterrupt:
|
|
print('STOPPING...')
|
|
|
|
finally:
|
|
recorder.delete()
|
|
porcupine.delete()
|
|
|
|
if wav_file is not None:
|
|
wav_file.close()
|
|
|
|
if __name__ == '__main__':
|
|
main() |