कैसे बीच में wav को बचाने के बिना कार्यों के बीच संपादित wav पारित करने के लिए?

Aug 18 2020

मेरे पास 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)

नीचे दिए गए फ़ंक्शन के ऊपर wav फ़ाइल के 10 सेकंड की कटौती होती है।

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 या अन्य प्रारूप के रूप में कैसे पारित किया जाए? इसका उपयोग बाकी एपीआई में किया जाना चाहिए, मुझे नहीं पता कि यह उस लहर को कहां बचाएगा, इसलिए अधिमानतः इसे किसी तरह पारित किया जाना चाहिए।

जवाब

1 ERJAN Aug 20 2020 at 04:02

मुझे यह समझ में आया - नीचे दिए गए फंक्शन में बस सेविंग, बफर आदि के बिना काम होता है। यह एक wav फाइल प्राप्त करता है और इसे एडिट करता है और बस सीधे गणित एम्बेडिंग फंक्शन भेजता है:

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)

ऑडियो सेगमेंट में कुंजी टोबाइट्स () है, यह सिर्फ 1 ट्रैक में फिर से सभी को एक साथ असेंबल करता है