Я написал код, который записывает mi c аудио, используя pyaudio режима обратного вызова.
#!/usr/bin/env python
import pyaudio, wave, sys, datetime, time
_idx = 0
_t0 = None
def main():
global _t0
print("* Press Enter to stop")
audio = pyaudio.PyAudio()
wavefile = wave.open("a.wav", 'wb')
wavefile.setnchannels(1)
wavefile.setsampwidth(2)
wavefile.setframerate(16000)
def callback(in_data, frame_count, time_info, status):
global _idx, _t0
now = datetime.datetime.now()
t1 = time.time()
print("%3d chunk[%d]:%s, %0.2fms" % (_idx + 1, len(in_data), now.strftime("%Y-%m-%d %H:%M:%S.%f"), (t1 - _t0) * 1000))
_t0 = t1
wavefile.writeframes(in_data)
_idx += 1
return (in_data, pyaudio.paContinue)
options = {
"format":pyaudio.paInt16,
"channels":1,
"rate":16000,
"input":True,
"frames_per_buffer":int(16000 / 10),
"stream_callback":callback,
}
stream = audio.open(**options)
stream.start_stream()
now = datetime.datetime.now()
_t0 = time.time()
print("stream started :%s" % (now.strftime("%Y-%m-%d %H:%M:%S.%f")))
_ = sys.stdin.readline()
stream.stop_stream()
stream.close()
audio.terminate()
wavefile.close()
print("finish")
if __name__ == '__main__':
main()
И в основном я получил задержку более 700 мс между вызовом start_stream()
и первым вызовом callback
на pyaudio.
Я использую Macbook Pro '17 и встроенный mi c. (Каталина 10.15.4)
python rec2.py
* Press Enter to stop
stream started :2020-04-11 20:50:50.802408
1 chunk[3200]:2020-04-11 20:50:51.567587, 765.18ms
2 chunk[3200]:2020-04-11 20:50:51.667351, 99.76ms
3 chunk[3200]:2020-04-11 20:50:51.767608, 100.26ms
4 chunk[3200]:2020-04-11 20:50:51.867568, 99.96ms
5 chunk[3200]:2020-04-11 20:50:51.967678, 100.11ms
6 chunk[3200]:2020-04-11 20:50:52.067258, 99.58ms
7 chunk[3200]:2020-04-11 20:50:52.167356, 100.10ms
8 chunk[3200]:2020-04-11 20:50:52.267597, 100.24ms
9 chunk[3200]:2020-04-11 20:50:52.367558, 99.96ms
finish
Повторные тесты показывают два аспекта: задержка около 150 мс или 750 мс.
Это нормально или в моем коде есть ошибки?
Я думаю, что задержка в 700 мс довольно велика.
Как я могу уменьшить эту задержку?
Пожалуйста, помогите мне и дайте мне любой комментарий по этому поводу.