Я пытаюсь сделать экранный рекордер с 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()