Я новичок в использовании библиотеки pyAudio. У меня есть класс, который обрабатывает неблокирующую запись для моего проекта. Я объявил переменную для потока в функции инициализации с типом данных None. Короче говоря, я сделал 2 функции, start_recording и stop_recording, для обработки потоковой переменной тоже. start_recording работает хорошо, но функция stop_recording обнаружила ошибку и сказала:
«AttributeError: объект« NoneType »не имеет атрибута« stop_stream »».
Я знаю, что проблема вызвана типом данных None, который я дал в переменной self._stream функции init, но я не знаю, как исправить эту ошибку, кто-нибудь может мне помочь? Спасибо:)
ps вот мой класс, который я сделал
class Recorder(object):
def __init__(self, channels=1, rate=44100, frames_per_buffer=1024):
self.channels = channels
self.rate = rate
self.frames_per_buffer = frames_per_buffer
self._p = pyaudio.PyAudio()
self.filewave = None
self._stream = None
def start_recording(self, filename, audio_format):
self.filewave = self.prepare_file(filename, audio_format)
self._stream = self._p.open(
format=pyaudio.paInt16,
channels=self.channels,
rate=self.rate,
input=True,
frames_per_buffer=self.frames_per_buffer,
stream_callback=self.get_callback())
self._stream.start_stream()
return self
def get_callback(self):
def callback(data, frame_count, time_info, status):
self.filewave.writeframes(data)
return data, pyaudio.paContinue
return callback
def prepare_file(self, filename, audio_format="wb"):
filewave = wave.open(filename, audio_format)
filewave.setnchannels(self.channels)
filewave.setsampwidth(self._p.get_sample_size(pyaudio.paInt16))
filewave.setframerate(self.rate)
return filewave
def stop_recording(self):
self._stream.stop_stream()
return self
def close_recording(self):
self._stream.close()
self._p.terminate()
self.filewave.close()
Также обратите внимание, что мой код используется с интерфейсом ajax.
И моя новая проблема заключается всобытие нажатия кнопки в ajax, и теперь я понятия не имею, как бросить объект Recorder на остановку URL в моей фляге, вот мой код url ajax в моей фляге маршрутов, можете ли вы дать мне идею? спасибо, прежде чем
@app.route('/start_recording', methods=['POST'])
def start_recording():
rfile = Recorder(channels=2)
rfile.start_recording('output.wav','wb')
@app.route('/stop_recording/<rfile>', methods=['POST'])
def stop_recording(rfile):
rfile.stop_recording()