Почему pyauto gui и pyaudio не работают синхронно, когда они по отдельности работают отлично? - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь сделать экранный рекордер с pyauto gui и pyaudio. Вот в чем проблема, когда я пытаюсь использовать их вместе, запись идет хорошо, но мой звук портится. Это просто не соответствует его фактическому времени, кажется, что он берет несколько выборок одновременно.

Я начал с сохранения одного заявления за другим, которое не работало вообще. После этого я попытался создать многопоточность в надежде запустить оба процесса параллельно, что также привело к порче звукового файла. Вот мой окончательный код, пожалуйста, помогите мне с чем-то, что я мог бы сделать дальше:

#Final Recorder
import pyaudio
import wave
import time
import pyautogui
import cv2
import numpy as np
from win32api import GetSystemMetrics
Width=GetSystemMetrics(0)
Height=GetSystemMetrics(1)
fourcc = cv2.VideoWriter_fourcc(*"XVID")
print(f"Width: {Width} and Height: {Height}")
from threading import Thread
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
CHUNK = 1024
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "file.wav"

audio = pyaudio.PyAudio()

# start Recording
stream = audio.open(format=FORMAT, channels=CHANNELS,
                rate=RATE, input=True,
                frames_per_buffer=CHUNK)
frames = []
audios=[]
def Record_Audio():
    data = stream.read(CHUNK)
    audios.append((data))
count=0
def getImage():
    frames.append((pyautogui.screenshot(region=(0,0,1920,1080))))
while count<=500:
    Thread(target = Record_Audio).start()
    Thread(target = getImage).start()
    print(count)
    count=count+1
stream.stop_stream()
stream.close()
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(audios))
waveFile.close()
audio.terminate()
...