【发布时间】:2020-12-07 13:31:07
【问题描述】:
我有 2 个人的 wav 对话(客户和技术支持) 我有 3 个独立的函数,可以提取 1 个语音,剪切 10 秒并将其转换为嵌入。
def get_customer_voice(file):
print('getting customer voice only')
wav = wf.read(file)
ch = wav[1].shape[1]#customer voice always in 1st track
sr = wav[0]
c1 = wav[1][:,1]
#print('c0 %i'%c0.size)
if ch==1:
exit()
vad = VoiceActivityDetection()
vad.process(c1)
voice_samples = vad.get_voice_samples()
#this is trouble - how to pass it without saving anywhere as wav?
wf.write('%s_customer.wav'%file,sr,voice_samples)
下面的函数从上面的函数中截取 10 秒的 wav 文件。
import sys
from pydub import AudioSegment
def get_customer_voice_10_seconds(file):
voice = AudioSegment.from_wav(file)
new_voice = voice[0:10000]
file = str(file) + '_10seconds.wav'
new_voice.export(file, format='wav')
if __name__ == '__main__':
if len(sys.argv) < 2:
print('give wav file to process!')
else:
print(sys.argv)
get_customer_voice_10_seconds(sys.argv[1])
如何将它作为 wav 或其他格式传递而不将其保存到某个目录?它是在rest api中使用的,我不知道它会在哪里保存那个wav,所以最好应该以某种方式传递。
【问题讨论】:
-
如果函数在同一个程序中并且它们可以处理类文件对象,那么你可以使用
io.BytesIO()在内存中创建文件。 -
我不知道
wf和VoiceActivityDetection是什么,但AudioSegment.from_wav()在wav中与wav一起使用 -
@furas,你能帮我解决这个问题吗?是缓冲读写吗?如何做到这一点?
-
我仍然不知道
wf和VoiceActivityDetection是什么 - 所以我无法检查它是否可以与类似文件的对象一起使用。有问题地描述什么是wf和VoiceActivityDetection- 您从哪个模块获得它。 -
@furas,我做到了,谢谢你,检查答案。 wf 是“将 scipy.io.wavfile 导入为 wf”
标签: python audio base64 wav converters