Skip to content

Commit 196ce94

Browse files
committed
removed ALSA errors for the Python demo, thanks to moham96
1 parent 4a529d8 commit 196ce94

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

examples/Python/snowboydecoder.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import wave
88
import os
99
import logging
10+
from ctypes import *
11+
from contextlib import contextmanager
1012

1113
logging.basicConfig()
1214
logger = logging.getLogger("snowboy")
@@ -17,6 +19,19 @@
1719
DETECT_DING = os.path.join(TOP_DIR, "resources/ding.wav")
1820
DETECT_DONG = os.path.join(TOP_DIR, "resources/dong.wav")
1921

22+
ERROR_HANDLER_FUNC = CFUNCTYPE(None, c_char_p, c_int, c_char_p, c_int, c_char_p)
23+
24+
def py_error_handler(filename, line, function, err, fmt):
25+
pass
26+
27+
c_error_handler = ERROR_HANDLER_FUNC(py_error_handler)
28+
29+
@contextmanager
30+
def no_alsa_error():
31+
asound = cdll.LoadLibrary('libasound.so')
32+
asound.snd_lib_error_set_handler(c_error_handler)
33+
yield
34+
asound.snd_lib_error_set_handler(None)
2035

2136
class RingBuffer(object):
2237
"""Ring buffer to hold audio from PortAudio"""
@@ -43,7 +58,8 @@ def play_audio_file(fname=DETECT_DING):
4358
"""
4459
ding_wav = wave.open(fname, 'rb')
4560
ding_data = ding_wav.readframes(ding_wav.getnframes())
46-
audio = pyaudio.PyAudio()
61+
with no_alsa_error():
62+
audio = pyaudio.PyAudio()
4763
stream_out = audio.open(
4864
format=audio.get_format_from_width(ding_wav.getsampwidth()),
4965
channels=ding_wav.getnchannels(),
@@ -104,7 +120,8 @@ def audio_callback(in_data, frame_count, time_info, status):
104120

105121
self.ring_buffer = RingBuffer(
106122
self.detector.NumChannels() * self.detector.SampleRate() * 5)
107-
self.audio = pyaudio.PyAudio()
123+
with no_alsa_error():
124+
self.audio = pyaudio.PyAudio()
108125
self.stream_in = self.audio.open(
109126
input=True, output=False,
110127
format=self.audio.get_format_from_width(

examples/Python3/snowboydecoder.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import wave
88
import os
99
import logging
10+
from ctypes import *
11+
from contextlib import contextmanager
1012

1113
logging.basicConfig()
1214
logger = logging.getLogger("snowboy")
@@ -17,6 +19,19 @@
1719
DETECT_DING = os.path.join(TOP_DIR, "resources/ding.wav")
1820
DETECT_DONG = os.path.join(TOP_DIR, "resources/dong.wav")
1921

22+
ERROR_HANDLER_FUNC = CFUNCTYPE(None, c_char_p, c_int, c_char_p, c_int, c_char_p)
23+
24+
def py_error_handler(filename, line, function, err, fmt):
25+
pass
26+
27+
c_error_handler = ERROR_HANDLER_FUNC(py_error_handler)
28+
29+
@contextmanager
30+
def no_alsa_error():
31+
asound = cdll.LoadLibrary('libasound.so')
32+
asound.snd_lib_error_set_handler(c_error_handler)
33+
yield
34+
asound.snd_lib_error_set_handler(None)
2035

2136
class RingBuffer(object):
2237
"""Ring buffer to hold audio from PortAudio"""
@@ -44,7 +59,8 @@ def play_audio_file(fname=DETECT_DING):
4459
"""
4560
ding_wav = wave.open(fname, 'rb')
4661
ding_data = ding_wav.readframes(ding_wav.getnframes())
47-
audio = pyaudio.PyAudio()
62+
with no_alsa_error():
63+
audio = pyaudio.PyAudio()
4864
stream_out = audio.open(
4965
format=audio.get_format_from_width(ding_wav.getsampwidth()),
5066
channels=ding_wav.getnchannels(),
@@ -141,7 +157,8 @@ def audio_callback(in_data, frame_count, time_info, status):
141157
play_data = chr(0) * len(in_data)
142158
return play_data, pyaudio.paContinue
143159

144-
self.audio = pyaudio.PyAudio()
160+
with no_alsa_error():
161+
self.audio = pyaudio.PyAudio()
145162
self.stream_in = self.audio.open(
146163
input=True, output=False,
147164
format=self.audio.get_format_from_width(

0 commit comments

Comments
 (0)