【发布时间】:2021-06-28 13:13:27
【问题描述】:
我正在研究文本到语音的算法,我终于成功了,这个算法所做的就是转成一个 html 文件
进入演讲,像这样:python record.py file.html
在这里一切都很好,但我想使用这个命令在多个文件上运行相同的命令:
python record.py file1.html & python record.py file2.html & python record.py file3.html
但不是单独录制每个音频,而是在输出上得到重叠。
PS1:我使用的是 ubuntu 服务器,我想在超过 6000 个文件上运行我的命令,每个文件大约需要 20 分钟,因为它们是一个大文件。
PS2:我正在使用 pyaudio 录制声音,这是我代码中的录制部分:
from seleniumwire import webdriver
import sys
from webdriver_manager.chrome import ChromeDriverManager
import time
import pyaudio
import wave
from selenium.webdriver.chrome.options import Options
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
chrome_options = Options()
chrome_options.add_argument("--headless")
browser = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=chrome_options)
#selenium part
browser.get('website')
search = browser.find_element_by_id("text-area")
search.clear()
data="this is a simple test"
search.send_keys(data)
time.sleep(2)
browser.find_element_by_id("btn").click()
print("waiting for audio")
size = len(data)/200
time.sleep(size*2)
print("audio detected")
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
#number = len(data)
RECORD_SECONDS = size*17
WAVE_OUTPUT_FILENAME = 'first.mp3'
open(WAVE_OUTPUT_FILENAME, "wb+")
frames = []
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE,input=True, frames_per_buffer=CHUNK)
print("started recording")
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
audio = stream.read(CHUNK)
frames.append(audio)
print("end of recording")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
有没有办法记录来自某个 PID 的音频。
我听说过 docker 容器,但我不知道它在这种情况下是否有帮助。
【问题讨论】:
-
您是否正在使用一个
&,因为您想并行执行它们?如果你改为使用&&会发生什么?那应该一次执行一个命令。可能会帮助您确定这是并行处理问题还是其他问题。 -
&& 会及时记录一次,它工作正常,但在我的情况下,完成工作需要 80 多天,所以根本不是一个可行的解决方案,我想并行运行它们
-
您可以编辑您的代码以包含最小的可重现示例吗?具体来说,您使用什么
imports,专门处理输入文件名的代码在哪里?我正在尝试运行您的代码,但如前所述,您似乎打开了与文件名无关的相同流。 -
我已经添加了我可以添加的信息,所以这个文件会运行多次,当然每次调用都会更改文件名。
-
我看到了几件事。我没有看到输入文件名变量在任何地方使用,只有输出文件
first.mp3。看起来也有一些不必要的代码(为什么要根据随机字符串的大小来休眠?,重现这个问题需要底部的硒部分还是波部分?)。
标签: python ubuntu pyaudio pulseaudio