Workaround for crash of voice fetch, sox audiodev in config, client waits a sec to allow mics to come up

This commit is contained in:
Ruben van de Ven 2019-04-08 12:16:41 +02:00
parent 929b7cb4d1
commit c4f55c01c7
4 changed files with 21 additions and 8 deletions

View File

@ -247,6 +247,10 @@ class CentralCommand(object):
isVariable = bool(r['variable'])
text = r['text']
fn = await self.voiceStorage.requestFile(text, isVariable)
if fn is None:
eventLogger.getChild(f"{hugvey_id}").critical("error: No voice file fetched, check logs.")
fn = 'local/crash.wav'
# TODO: trigger a repeat/crash event.
await s.send_string(fn)
except Exception as e:
logger.critical(f"Exception while running voice loop:")

View File

@ -11,6 +11,7 @@ import zmq
from zmq.asyncio import Context
import sys
from hugvey.communication import LOG_BS
import os
try:
import alsaaudio
@ -85,6 +86,9 @@ class VoiceServer(object):
self.p = pyaudio.PyAudio()
self.stopped = False
# wait a sec for the input devices to come up
await asyncio.sleep(2)
stream = self.p.open(
format=FORMAT,
@ -127,7 +131,7 @@ class VoiceServer(object):
class CommandHandler(object):
def __init__(self, hugvey_id, cmd_address, publish_address, file_address):
def __init__(self, hugvey_id, cmd_address, publish_address, file_address, play_audiodev = None):
self.eventQueue = []
self.ctx = Context.instance()
self.hugvey_id = hugvey_id
@ -136,6 +140,7 @@ class CommandHandler(object):
self.playPopen = None
self.file_address = file_address
self.playingMsgId = None
self.play_audiodev = play_audiodev
# self.showMyself() # queue message for connection request
def handle(self, cmd):
@ -178,10 +183,12 @@ class CommandHandler(object):
if value is True:
continue
playCmd.append(str(value))
environment_vars = dict(os.environ)
if self.play_audiodev is not None:
environment_vars['AUDIODEV'] = self.play_audiodev
logger.debug(playCmd)
self.playPopen = subprocess.Popen(
playCmd, stdout=subprocess.PIPE)
playCmd, stdout=subprocess.PIPE, env=environment_vars)
returnCode = self.playPopen.wait()
logger.debug('finished')
@ -308,7 +315,8 @@ class Hugvey(object):
hugvey_id=self.id,
cmd_address=self.config['events']['cmd_address'],
publish_address=self.config['events']['publish_address'],
file_address=self.config['voice']['file_address']
file_address=self.config['voice']['file_address'],
play_audiodev=self.config['voice']['play_audiodev']
)
self.voice_server = VoiceServer(
loop=loop,

View File

@ -889,10 +889,10 @@ class Story(object):
self.hugvey.eventLogger.info(f"message: {message.id} {message.uuid} start \"{message.text}\"")
# TODO: prep events & timer etc.
# TODO: preload file paths if no variables are set, or once these are loaded
fn = await message.getAudioFilePath()
self.hugvey.sendCommand({
'action': 'play',
'file': await message.getAudioFilePath(),
'file': fn,
'id': message.id,
'params': message.getParams()
})

View File

@ -70,6 +70,7 @@ class VoiceStorage(object):
response = await http_client.fetch(request)
except Exception as e:
logger.exception(e)
logger.critical(request)
self.pendingRequests[id].set()
http_client.close()
return None
@ -80,10 +81,10 @@ class VoiceStorage(object):
http_client.close()
return None
logger.debug(f"Wrote body: {response.code}")
# logger.debug(f"Wrote body: {response.code}")
with open(fn, "wb") as f:
f.write(response.body)
self.pendingRequests[id].set()
print(type(fn), fn)
# print(type(fn), fn)
http_client.close()
return fn