Поделиться через


Изменение тона и скорости воспроизведения

[Функция, связанная с этой страницей, Waveform Audio, является устаревшей функцией. Он был заменен WASAPI и Audio Graphs. WasAPI и Audio Graphs оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде WASAPI и Звуковые графы вместо Waveform Audio, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Некоторые устройства вывода waveform-audio могут изменять шаг и скорость воспроизведения данных waveform-audio. Не все устройства waveform-audio поддерживают изменение тона и скорости воспроизведения. Сведения о том, как определить, поддерживает ли конкретное устройство waveform-audio изменение тона и частоты воспроизведения, см. в разделе Устройства и типы данных.

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

  • Изменение скорости воспроизведения выполняется драйвером устройства и не требует специализированного оборудования. Частота выборки не изменяется, но драйвер интерполируется путем пропуска или синтезирования выборок. Например, если скорость воспроизведения изменяется в два фактора, драйвер пропускает все остальные выборки.
  • Для изменения тона требуется специализированное оборудование. Скорость воспроизведения и частота дискретизации не изменяются.

Windows предоставляет следующие функции для запроса и настройки частоты тона и воспроизведения в формате waveform-audio.

Функция Описание
waveOutGetPitch Извлекает шаг для указанного устройства вывода waveform-audio.
waveOutGetPlaybackRate Извлекает скорость воспроизведения для указанного устройства вывода waveform-audio.
waveOutSetPitch Задает шаг для указанного устройства вывода waveform-audio.
waveOutSetPlaybackRate Задает скорость воспроизведения для указанного устройства вывода waveform-audio.

 

Скорость тона и воспроизведения изменяется с помощью коэффициента, указанного с числом с фиксированной запятой, упакованным в значение двойного слова. Верхние 16 бит указывают целочисленную часть числа; в нижних 16 битах указывается дробная часть. Например, значение 1.5 представлено как 0x00018000L. Значение 0,75 представлено как 0x0000C000L. Значение 1,0 (0x00010000) означает, что шаг или скорость воспроизведения не изменяется.