1
1
# voice process modules
2
2
# detect voice
3
- from speech_recognition import Recognizer , Microphone
3
+ from speech_recognition import Recognizer , Microphone , WavFile
4
+ from pyaudio import PyAudio , paInt16
5
+ import wave
4
6
# generate voice
5
7
from pygame import mixer
6
8
from tempfile import NamedTemporaryFile
@@ -51,7 +53,61 @@ def listener(self):
51
53
print (result )
52
54
return result
53
55
elif self .mode == 'voice2' :
54
- pass
56
+ result = None
57
+ while (result == None ):
58
+ sleep (1 )
59
+ # sample chunk size
60
+ chunk = 1024
61
+ # sample format: paFloat32, paInt32, paInt24, paInt16, paInt8, paUInt8, paCustomFormat
62
+ sample_format = paInt16
63
+ # sound channel
64
+ channels = 2
65
+ # sample frequency rate: 44100 ( CD ), 48000 ( DVD ), 22050, 24000, 12000 and 11025
66
+ fs = 44100
67
+ # recording seconds
68
+ seconds = 5
69
+ # init pyaudio object
70
+ p = PyAudio ()
71
+
72
+ print ("starting recording..." )
73
+
74
+ # active voice stream
75
+ stream = p .open (format = sample_format , channels = channels , rate = fs , frames_per_buffer = chunk , input = True )
76
+ frames = []
77
+ # voice list
78
+ for _ in range (0 , int (fs / chunk * seconds )):
79
+ # record voice into list
80
+ data = stream .read (chunk )
81
+ frames .append (data )
82
+ # stop recording
83
+ stream .stop_stream ()
84
+ # close stream
85
+ stream .close ()
86
+ p .terminate ()
87
+ print ('stop recording...' )
88
+
89
+
90
+ with NamedTemporaryFile (delete = True ) as fp :
91
+ # open voice file
92
+ wf = wave .open ("{}.wav" .format (fp .name ), 'wb' )
93
+ # set channel
94
+ wf .setnchannels (channels )
95
+ # set format
96
+ wf .setsampwidth (p .get_sample_size (sample_format ))
97
+ # set sampling frequency rate
98
+ wf .setframerate (fs )
99
+ # save
100
+ wf .writeframes (b'' .join (frames ))
101
+ wf .close ()
102
+
103
+ with WavFile ('{}.wav' .format (fp .name )) as source :
104
+ audio = self .recognizer .listen (source )
105
+ try :
106
+ result = self .recognizer .recognize_google (audio ,language = 'zh-tw' )
107
+ except :
108
+ continue
109
+ print (result )
110
+ return result
55
111
56
112
def order_manage (self ):
57
113
data_dict = load_xlsx (file_name = menu_xlsx_path )
@@ -130,5 +186,5 @@ def __call__(self):
130
186
131
187
if __name__ == '__main__' :
132
188
order_bot = Order_Bot ('text' )
133
- order_bot .mode = 'voice1 '
189
+ order_bot .mode = 'voice2 '
134
190
order_bot ()
0 commit comments