разделить аудиофайл на части, но мне нужно использовать эти файлы в распознавании речи

Я столкнулся с проблемой распознавания речи Google из-за длинного аудиофайла ... поэтому я решил разделить свой аудиофайл на 15 секунд ... каждый раз, когда я отправляю первые 15 секунд на распознавание речи, затем вторые 15 секунд и так далее ...

но теперь, когда я использую pydub lib, он разделяет аудиофайл, возвращаемое значение после разделения не является расширением файла, поскольку API требуется расширение файла в качестве параметра (я отметил ошибку), он говорит, что данный аудиофайл должен быть строкой имени файла или файлом. как объект

import speech_recognition as sr
import numpy

from os import path
AUDIO_FILE = "OAF_back_happy.wav"

from pydub import AudioSegment
sound = AudioSegment.from_wav("OAF_back_happy.wav")

halfway_point = len(sound) // 2
split = []
split.append(sound[:halfway_point])
split.append(sound[halfway_point:])
r = sr.Recognizer()

words=1
for x in split:
  with sr.AudioFile(x) as source:     #<-----
      audio = r.record(source)  # read the entire audio file
  try:
      # for testing purposes, we're just using the default API key
      # to use another API key, use `r.recognize_google(audio, key="GOOGLE_SPEECH_RECOGNITION_API_KEY")`
      # instead of `r.recognize_google(audio)`
      ans = r.recognize_google(audio)
      print("Google Speech Recognition thinks you said " +ans)
      for x in ans:
        if (x.isspace()) == True: 
          words+=1
      print(words) 
  except sr.UnknownValueError:
      print("Google Speech Recognition could not understand audio")
  except sr.RequestError as e:
      print("Could not request results from Google Speech Recognition service; {0}".format(e))

Отредактировано: как описано в комментарии, я не хочу экспортировать файлы, потому что я использую сервер, и я не хочу помещать один и тот же файл дважды


person Zeyad Alaa Eldin    schedule 17.03.2021    source источник
comment
В документах pydub говорится, что вы можете сделать x.export(...), чтобы сохранить каждый фрагмент в файл, который затем можно передать sr.AudioFile(...). Например, x.export("slice.wav", format="wav"), затем with sr.AudioFile("slice.wav") as source:   -  person Justin Ezequiel    schedule 17.03.2021
comment
@JustinEzequiel да, я знаю об экспорте, но я работаю на сервере, поэтому я не могу просто экспортировать эти файлы на сервер, это слишком много ..   -  person Zeyad Alaa Eldin    schedule 17.03.2021
comment
Тогда вы должны были упомянуть об этом раньше.   -  person Justin Ezequiel    schedule 18.03.2021
comment
В документах также говорится, что экспорт также работает с дескриптором файла, например, с экземпляром BytesIO. В других документах также говорится, что sr.AudioFile также работает с экземпляром BytesIO, так что вот. Не могу предоставить ссылки на документы, так как я нахожусь вдали от компьютера и пишу с телефона.   -  person Justin Ezequiel    schedule 18.03.2021
comment
@JustinEzequiel спасибо за помощь, я не настолько профессионал в python, но вы имели в виду редактирование этой строки вот так with sr.AudioFile(io.BytesIO(x)) as source:? если да, это дает мне эту ошибку, требуется байтовый объект, а не список, если нет, когда вы свободны, не могли бы вы ввести его, введите его как код, чтобы я мог понять больше, я ценю вашу помощь   -  person Zeyad Alaa Eldin    schedule 18.03.2021
comment
Прочитайте еще раз первое предложение моего предыдущего комментария.   -  person Justin Ezequiel    schedule 18.03.2021


Ответы (1)


Не проверено, так как я не могу установить пакеты, которые я не использую, но вот что я имею в виду.

for x in split:
    b = io.BytesIO()
    x.export(b)
    b.seek(0)
    with sr.AudioFile(b) as source:
        audio = r.record(source)
person Justin Ezequiel    schedule 18.03.2021