Как подготовить аудиофайлы (wav или mp3) для API распознавания речи Google в С#?

       String jsonRequest = "{\"config\": {\"languageCode\":\"en-US\"},\"audio\": {\"content\": \"" + base64Content+ "\"}}";
        String str = "";
        var speech = SpeechClient.Create();
        var response = 
        speech.Recognize(RecognizeRequest.Parser.ParseJson(jsonRequest));
        foreach (var result in response.Results)
        {
            foreach (var alternative in result.Alternatives)
            {
                Console.WriteLine(alternative.Transcript);
                str += alternative.Transcript;
            }
        }

Этот код отлично работает с монофайлами .wav, но выдает исключение для стереофайлов. Исключение говорит

Status(StatusCode=InvalidArgument, Detail="Должен использоваться одноканальный (моно) звук, но в заголовке WAV указано 2 канала.")

Итак, мой вопрос: как я могу добавить поддержку стереофайлов? Как преобразовать многоканальный звук в один канал в С#? Я уже пробовал этот ответ поэтому, пожалуйста, не ссылайтесь на него. Это не работает.


person Mean Coder    schedule 11.06.2018    source источник
comment
Я уже пробовал этот ответ, поэтому, пожалуйста, не ссылайтесь на него. Он не работает, но содержит ответ. Если вы не можете заставить его работать, создайте минимально воспроизводимый пример и попросите помощи, чтобы заставить его работать. Или выберите существующую аудиотеку и вызовите ее, чтобы получить одноканальный или микшированный звук.   -  person CodeCaster    schedule 11.06.2018
comment
Можете ли вы дать больше информации о том, чего вы пытаетесь достичь? Откуда берутся аудиофайлы? Лучший способ — подогнать аудиофайл под API, а не конвертировать. У вас есть возможность использовать моно файлы?   -  person M Stoerzel    schedule 11.06.2018
comment
Звук может исходить откуда угодно. Это может быть песня, разговор или лекция. Я могу свободно просматривать файл, и код преобразует его в текст для меня. Если какой-либо выбранный файл является монофоническим, приведенный выше код работает, в противном случае он не работает. Я надеюсь, что это имеет смысл.   -  person Mean Coder    schedule 11.06.2018


Ответы (1)


Вам следует обратить внимание на sox, который может преобразовывать практически любой формат в другой, включая преобразование частоты дискретизации, а в вашем случае интересно, конверсия канала. В документации вы найдете много примеров того, как его использовать.

В вашем случае я бы посоветовал не просто извлекать один канал из звука, потому что это может означать, что желаемый звук находится только на другом канале, который не выбран.

Если вы хотите иметь полный контроль над звуком, вы можете погрузиться в bass.dll в связь с bass.net.dll, которая позволяет смешивать каналы вместе или выбирать определенный канал.

person M Stoerzel    schedule 11.06.2018
comment
Спасибо за ваш ответ. Сокс сделал это. - person Mean Coder; 11.06.2018