Выходные аудиоданные IStream, маршрутизируемые из ISpVoice, работают с ошибкамиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Выходные аудиоданные IStream, маршрутизируемые из ISpVoice, работают с ошибками

Сообщение Anonymous »

Мне удалось передать необработанные аудиоданные в формате PCM из системы преобразования текста в речь Microsoft. Основная реализация находится здесь: https://gitlab.com/bgc-nz/windows-com-p ... type=heads. Концептуально поток данных выглядит следующим образом:

ISpVoice -> ISpStream -> IStream -> char*

Как и обычный прямой метод ISpVoice::Speak, он завершается успешно, но необработанные аудиоданные содержат ошибки. Я не уверен, почему это происходит, потому что, похоже, я использую тот же формат волны, который использует SpMMAudioOut, и я предполагаю, что ISpVoice использует внутренне:
  • Частота дискретизации 44,1 кГц
  • 16 бит на выборку
  • 2 канала
Для проверки в Audacity, я использовал те же значения, которые указаны в моей переменной WAVEFORMATEX wvfx:
  • Кодировка: 16-битный PCM со знаком
  • Порядок байтов: прямой порядок байтов
  • Каналы: 2 канала
  • Частота дискретизации: 44100
Указываю ли я последнему значению в вызове ISpVoice::SetOutput (https://gitlab.com/bgc-nz/windows-com-p ... =heads#L88) значение TRUE или FALSE, это, похоже, не влияет на результирующие данные.
На этом снимке экрана ниже вы можете видеть, что для выбранных 10 486 сэмплов по всему сегменту разбросаны пики, из-за чего он звучит «царапливо». Однако между произнесенными предложениями в паузах нет всплесков (я использовал строки из стихотворения Шекспира).
Изображение

Я неправильно выполняю преобразование формата, или это внутренняя ошибка в механизме преобразования текста в речь Microsoft?
В настоящее время я тестирую и отлаживаю это внутри VirtualBox, при этом виртуальная машина работает под управлением Windows 11 (версия 25H2, сборка 26200.7840), а на хосте работает EndeavourOS (где я использую Audacity для импорта необработанных данных). Для компиляции программы я использовал MSVC 2022.

Подробнее здесь: https://stackoverflow.com/questions/798 ... is-glitchy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»