将加载的变量作为参数而不是文件路径传递给python。

问题描述 投票:0回答:1

我对Python不太熟悉,如果这个问题太琐碎,请见谅

我有一个从Url获取音频文件的脚本,我需要将文件从ogg类型转换为wav。

然后我想把转换和加载的文件传给一个参数为filepath字符串的函数。

下面是我的代码。

import os
import pydub
import glob
import time

from io import BytesIO

import pandas as pd

from urllib.request import Request, urlopen
import urllib.error

import azure.cognitiveservices.speech as speechsdk
import time

#%%

audio_file = "https = url.whatever.com.co/audio_file.ogg"

req = Request(audio_file)

try: response = urlopen(req).read()
except urllib.error.URLError as e:
    print(e.reason)   

sound =  pydub.AudioSegment.from_ogg(BytesIO(response))
sound_wav = sound.export(format = "wav")

speech_key, service_region = "XXXXXXXXXXXXXXXX", "eastus"
speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)
speech_config.speech_recognition_language="es-ES"
audio_filename = r"C:\some_file_path\3AC3844337F7E5CEAE95.wav"

#audio_config = speechsdk.audio.AudioConfig(sound_wav)
audio_config = speechsdk.audio.AudioConfig(audio_filename = audio_filename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

done = False

def stop_cb(evt):
    """callback that stops continuous recognition upon receiving an event `evt`"""
    print('CLOSING on {}'.format(evt))
    speech_recognizer.stop_continuous_recognition()
    global done
    done = True

all_results = []
def handle_final_result(evt):
    all_results.append(evt.result.text)

speech_recognizer.recognized.connect(handle_final_result)
# Connect callbacks to the events fired by the speech recognizer
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
# stop continuous recognition on either session stopped or canceled events
speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)

# Start continuous speech recognition
speech_recognizer.start_continuous_recognition()
while not done:
    time.sleep(.5)

print("Printing all results:")
print(all_results)

当我用这行代码运行时

audio_config = speechsdk.audio.AudioConfig(audio_filename = audio_filename)

工作正常...

然而,当我用这一行运行它时,

audio_config = speechsdk.audio.AudioConfig(sound_wav)

我得到了这个错误:

ValueError: use_default_microphone must be a bool, is "tempfile._TemporaryFileWrapper object at 0x0000020EC4297668"

python speech-to-text azure-cognitive-services microsoft-speech-api
1个回答
0
投票

你得到的错误信息表明 sound_wav 是一个临时文件名。那么 见诸文献,它看起来像 audio_config = speechsdk.audio.AudioConfig(filename = sound_wav) 是你所需要的。

就像你以前 audio_filename 作为参数,可能会发生不同的版本使用不同的名称。你可以用它来代替。

© www.soinside.com 2019 - 2024. All rights reserved.