@r1mple

Как избавиться от keyboard в pyaudio?

stream = self.p.open(format=self.FORMAT,
                            channels=self.CHANNELS,
                            rate=self.RATE,
                            input_device_index=2,
                            frames_per_buffer=self.CHUNK,
                            input=True)
                            
print('------- Recording... -------')

while not keyboard.is_pressed('s'):
       data = stream.read(self.CHUNK)
       self.frames.append(data)
        
print('------- Finished recording. -------')

stream.stop_stream()
stream.close()
self.p.terminate()

Вот есть такой вот у меня код, как мне изабвиться от keyboard тут? Чтоб запись останавливалась не по кнопке, а была функция остановки записи.
  • Вопрос задан
  • 41 просмотр
Пригласить эксперта
Ответы на вопрос 1
@r1mple Автор вопроса
в общем, написал решение, кому пригодится.
def start(self):   
        print('------- Recording... -------')

        while self.recordFlag:
            data = self.stream.read(self.CHUNK)
            self.frames.append(data)
            self.frame = np.array([data])

        print('------- Finished recording. -------')  
    
    def stop_and_save(self):
        print('Do you want to stop recording? (y/n)', end=' ')
        ans = input()
        if ans == 'y': 
            self.recordFlag = False
            self.stream.stop_stream()
            self.stream.close()
            self.p.terminate()  
            wf = wave.open(self.WAVE_OUTPUT_FILENAME, 'wb')
            wf.setnchannels(self.CHANNELS)
            wf.setsampwidth(self.p.get_sample_size(self.FORMAT))
            wf.setframerate(self.RATE)
            wf.writeframes(b''.join(self.frames))
            wf.close()

audioStartThread = threading.Thread(target=ac.start)
audioStopThread = threading.Thread(target=ac.stop_and_save)
audioStartThread.start() 
audioStopThread.start()

Вообще, по уму, можно было бы реализовать это не через потоки, а через ассинхронность.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы