большая задержка между start_stream () и первым обратным вызовом на pyaudio - PullRequest
0 голосов
/ 11 апреля 2020

Я написал код, который записывает 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 мс довольно велика.

Как я могу уменьшить эту задержку?

Пожалуйста, помогите мне и дайте мне любой комментарий по этому поводу.

...