จะส่ง wav ที่แก้ไขระหว่างฟังก์ชันโดยไม่บันทึก wav ได้อย่างไร?

Aug 18 2020

ฉันมีการสนทนา wav 2 คน (ลูกค้าและฝ่ายสนับสนุนด้านเทคนิค) ฉันมี 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 หรือรูปแบบอื่นโดยไม่บันทึกลงในไดเร็กทอรีได้อย่างไร มันจะใช้ใน rest api ฉันไม่รู้ว่ามันจะบันทึก 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)

ที่สำคัญคือ tobytes () ในส่วน Audio เพียงแค่รวบรวมทั้งหมดเข้าด้วยกันใน 1 แทร็กอีกครั้ง