|
@@ -1,4 +1,8 @@
|
|
|
import logging
|
|
|
+import os
|
|
|
+from cffi import FFI as _FFI
|
|
|
+import sys
|
|
|
+
|
|
|
from core import ConfigurationManager
|
|
|
|
|
|
logging.basicConfig()
|
|
@@ -16,6 +20,9 @@ class OrderListener:
|
|
|
:param stt: Speech to text plugin name to load. If not provided,
|
|
|
we will load the default one set in settings
|
|
|
"""
|
|
|
+ # this is a trick to ignore ALSA output error
|
|
|
+ # see http://stackoverflow.com/questions/7088672/pyaudio-working-but-spits-out-error-messages-each-time
|
|
|
+ self._ignore_stderr()
|
|
|
self.stt = stt
|
|
|
self.callback = callback
|
|
|
# self.settings = main_controller.conf.settingLoader.get_config()
|
|
@@ -52,4 +59,25 @@ class OrderListener:
|
|
|
else:
|
|
|
klass(self.callback, parameters)
|
|
|
|
|
|
+ @staticmethod
|
|
|
+ def _ignore_stderr():
|
|
|
+ """Try to forward PortAudio messages from stderr to /dev/null."""
|
|
|
+ ffi = _FFI()
|
|
|
+ ffi.cdef("""
|
|
|
+ /* from stdio.h */
|
|
|
+ FILE* fopen(const char* path, const char* mode);
|
|
|
+ int fclose(FILE* fp);
|
|
|
+ FILE* stderr; /* GNU C library */
|
|
|
+ FILE* __stderrp; /* Mac OS X */
|
|
|
+ """)
|
|
|
+ stdio = ffi.dlopen(None)
|
|
|
+ devnull = stdio.fopen(os.devnull.encode(), b'w')
|
|
|
+ try:
|
|
|
+ stdio.stderr = devnull
|
|
|
+ except KeyError:
|
|
|
+ try:
|
|
|
+ stdio.__stderrp = devnull
|
|
|
+ except KeyError:
|
|
|
+ stdio.fclose(devnull)
|
|
|
+
|
|
|
|