【问题标题】:Why is error shown when looping through .wav files in a directory but works OK when not looping?为什么循环浏览目录中的 .wav 文件时显示错误,但不循环时可以正常工作?
【发布时间】:2020-10-21 12:33:01
【问题描述】:

以下运行成功:

import speech_recognition as sr

filename = 'audiofiles/myaudiofile.wav'

# initiailse the recognizer
r = sr.Recognizer()

with sr.AudioFile(filename) as source:
    # listen for the data (load audio to memory)
    audio_data = r.record(source)
    # recognize (convert from speech to text)
    text = r.recognize_google(audio_data)
    print(text)

...并输出 .wav 文件中所说单词的文本。

当我运行以下代码时(检查它是否适用于我将很快添加到此目录的多个文件):

import os

directory = 'audiofiles'

for filename in os.listdir(directory):
    with sr.AudioFile(filename) as source:
        # listen for the data (load audio to memory)
        audio_data = r.record(source)
        # recognize (convert from speech to text)
        text = r.recognize_google(audio_data)
        print(text)
        print('---')

...文本输出正确,但随后出现以下错误。为什么?我该如何解决这个问题?

ValueError:音频文件无法读取为 PCM WAV、AIFF/AIFF-C 或 Native FLAC;检查文件是否损坏或其他格式

【问题讨论】:

  • 尝试添加 print(filename) 作为循环的第一行,您看到的第一个文件是什么?
  • 谢谢克里斯。打印的文件名是'myaudiofile.wav'
  • 我刚刚使用list_of_filenames = os.listdir(directory) 打印了目录中的文件列表,看起来有一个额外的隐藏文件不是.wav 文件。我怎样才能让它只查看 .wav 文件?
  • 解决了!已添加if filename.endswith('.wav'):

标签: python audio speech-recognition text-to-speech wav


【解决方案1】:

有一个不是 .wav 文件的隐藏文件。所以我像这样添加了if filename.endswith('.wav'):

for filename in os.listdir(directory):
    if filename.endswith('.wav'):
        with sr.AudioFile(filename) as source:
            # listen for the data (load audio to memory)
            audio_data = r.record(source)
            # recognize (convert from speech to text)
            text = r.recognize_google(audio_data)
            print(text)
            print('---')

...它成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2017-04-10
    相关资源
    最近更新 更多