bagaimana cara melewatkan wav yang diedit di antara fungsi tanpa menyimpan wav di antaranya?

Aug 18 2020

Saya memiliki percakapan wav 2 orang (dukungan pelanggan dan teknis) Saya memiliki 3 fungsi terpisah yang mengekstrak 1 suara, memotong 10 detik dan mengubahnya menjadi penyematan.

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)

Fungsi di bawah ini memotong 10 detik file wav dari fungsi di atas.

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])

bagaimana cara mengirimkannya sebagai wav atau format lain tanpa menyimpannya ke beberapa direktori? Ini akan digunakan dalam api istirahat, saya tidak tahu di mana itu akan menyimpan wav itu, jadi sebaiknya itu harus diteruskan entah bagaimana.

Jawaban

1 ERJAN Aug 20 2020 at 04:02

Saya mengetahuinya - fungsi di bawah ini hanya berfungsi tanpa menyimpan, buffer, dll. Ia menerima file wav dan mengeditnya dan langsung mengirimnya ke fungsi embedding matematika:

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)

kuncinya adalah tobytes () di segmen Audio, itu hanya mengumpulkan semuanya menjadi satu lagi dalam 1 track