Google Speech-to-text API, InvalidArgument: 400 Необходимо использовать одноканальный (моно)

Я продолжаю получать эту ошибку InvalidArgument: 400 в Google Speech-to-text, и проблема, похоже, в том, что я использую двухканальный звук (Stereo), а API ожидает wav в (Mono).

Если я конвертирую файл в аудиоредакторе, он может работать, но я не могу использовать аудиоредактор для преобразования пакета файлов. Есть ли способ изменить тип аудио в Python или Google Cloud.

Примечание. Я уже пробовал использовать «волновой модуль», но продолжал получать ошибку № 7 из-за того, что тип файла не распознается (я не мог прочитать wav-файл с модулем wave из Python)

-ERROR- InvalidArgument: 400 Должен использоваться одноканальный (моно) звук, но заголовок WAV указывает на 2 канала.


person Jose silvestre Rodriguez Ortiz    schedule 11.03.2019    source источник


Ответы (2)


Предполагая, что вы используете библиотеку google-cloud-speech, вы можете использовать свойство audio_channel_count в своем распознаваниеConfig и укажите количество каналов во входных аудиоданных (по умолчанию один канал (моно)). Вы можете сделать что-то вроде этого:

from google.cloud import speech
client = speech.SpeechClient()
results = client.recognize(
    audio=speech.types.RecognitionAudio(
        uri='gs://your-bucket/recording.wav',
    ),
    config=speech.types.RecognitionConfig(
        encoding='LINEAR16',
        language_code='en-US',
        sample_rate_hertz=44100,
        audio_channel_count=2,
    ),
)

Дополнительную информацию см. В документации по API.

person LundinCast    schedule 11.03.2019
comment
Я уже пробовал это и получаю эту ошибку. InvalidArgument: 400 Неверное распознавание "config": неверное количество каналов. - person Jose silvestre Rodriguez Ortiz; 12.03.2019
comment
config = Speech.types.RecognitionConfig (encoding = Speech.enums.RecognitionConfig.AudioEncoding.MULAW, sample_rate_hertz = 8000, language_code = first_lang, Alternative_language_codes = [second_lang], enable_speaker_diarization = True, audio_channel_diarization = True, audio_channel_diarization = True, audio_channel_diarization = True, audio_channel_diarization = True, audio_channel enable_word_time_offsets = True, max_alternatives = 2) - person Jose silvestre Rodriguez Ortiz; 12.03.2019

Вы должны использовать приведенную ниже функцию, чтобы динамически возвращать Audio Chanel и frame_rate, она берет путь к аудиофайлу и возвращает частоту кадров и количество Chanel.

def frame_rate_channel(audio_file_name): print(audio_file_name) with wave.open(audio_file_name, "rb") as wave_file: frame_rate = wave_file.getframerate() channels = wave_file.getnchannels() return frame_rate,channels

person syed irfan    schedule 11.09.2019