当前位置: 首页 > 面试题库 >

如何在函数之间传递已编辑的WAV而不在两者之间保存WAV?

邓丰
2023-03-14
问题内容

我有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,因此最好以某种方式传递它。


问题答案:

我想通了-下面的函数可以正常工作,而无需保存,缓冲等。它接收一个wav文件并对其进行编辑,然后直接发送给get math embedding函数:

def get_customer_voice_and_cutting_10_seconds_embedding(file):

    print('getting customer voice only')
    wav = read(file)
    ch = wav[1].shape[1]
    sr = wav[0]

    c1 = wav[1][:,1]

    vad = VoiceActivityDetection()
    vad.process(c1)
    voice_samples = vad.get_voice_samples()
    audio_segment = AudioSegment(voice_samples.tobytes(), frame_rate=sr,sample_width=voice_samples.dtype.itemsize, channels=1)
    audio_segment = audio_segment[0:10000]
    file = str(file) + '_10seconds.wav'

    return get_embedding(file)

关键是音频段中的tobytes(),它将它们全部重新组合到1个轨道中



 类似资料:
  • 订单列表 对于Product.class(string,double,int,int)和Order.class(string,double,int)我有一个单独的类。我还有一个用于productlist的arrayAdapter,它有增加/减少产品数量的按钮。

  • 问题内容: 我花了过去的几个小时在这里和其他地方进行阅读和实验,但是我并没有真正理解我确信这是一个非常基本的概念:在不同的函数之间传递值(作为变量)。 例如,我将一堆值分配给一个函数中的列表,然后想稍后在另一个函数中使用该列表: 基于对函数参数的作用的理解,我希望这样做如下: 将“列表”初始化为空列表;打电话给main(至少,我知道我没事…) 在defineAList()中,将某些值分配给列表;然

  • 问题内容: 好的,我是React的新手,需要阅读/引用HTML元素数据属性甚至HTML标记中的内容方面的帮助- 通常使用普通JS(这就是我在React应用程序中所做的事情),我这样读: 我有一个叫做Table的功能组件,我这样使用: 其中rows属性是我要检索的数据。我的表生成了具有几行的查找。单击后,我为每一行都有一个“编辑” CTA,我打开了一个模态,在其中传递要为每一行编辑的数据。CTA的O

  • 我正在创建一个用户设置帐户使用故事板的5个步骤。每个步骤都有一个ViewController:1:)输入姓名、联系人等,2:)导入照片,3:)输入等4:)更多输入5:)确认页面,如果用户点击“确认”->获取所有输入并上传解析。 我在网上搜索时得到的唯一解决方案是创建一个函数“Prepare for Segue”并传递信息...但对我来说,这没有任何意义: 如果我有1000个viewcontroll

  • 问题内容: 有没有一种好方法可以在不使用磁盘的情况下在两个python子进程之间传递大量数据?这是我希望完成的动画片示例: 这将创建一个子进程,该子进程生成一个numpy数组并将该数组保存到磁盘。然后,父进程从磁盘加载阵列。有用! 问题是,我们的硬件生成数据的速度比磁盘读写速度快10倍。有没有一种方法可以将数据从一个python进程传输到另一个纯粹的内存中,甚至可能不复制数据?我可以做类似参考传递

  • 我想把我的数据传递给其他的viewcontroller,但我做不到。我的密码在下面。ViewControllers的屏幕截图在这里。当用户写出他们的名字和密码时,我想传递另一个用户的数据,但他们之间还有一个viewcontroller。我认为这是一个问题,但我可以移除这个额外的视图控制器,所以我想了解如何才能把这些数据传递给其他的一个? 第一个viewcontroller的代码 第二个viewco