Волновой формат запроса для дескриптора HWAVEOUT

Контекст: у меня есть фрагмент кода, который знает значение дескриптора waveOut (HWAVEOUT). Однако код не создал дескриптор, поэтому WAVEFORMATEX, который был передан в waveOutOpen при создании дескриптора, неизвестен.

Я хочу узнать содержимое той структуры WAVEFORMATEX, которая была передана в вызов waveOutOpen.

Еще некоторые подробности, где это используется: Код запускается в функции ловушки, которая вызывается вместо waveOutWrite. Таким образом, код знает значение дескриптора, но не знает деталей создания дескриптора.

Просто чтобы людям не нужно было искать это
Подпись waveOutOpen есть

MMRESULT waveOutOpen(
  LPHWAVEOUT phwo,
  UINT uDeviceID,
  LPWAVEFORMATEX pwfx,
  DWORD dwCallback,
  DWORD dwInstance,
  DWORD fdwOpen
);

Подпись waveOutWrite:

MMRESULT waveOutWrite(
  HWAVEOUT hwo,
  LPWAVEHDR pwh, 
  UINT cbwh
); 

Примечание: я также перехватываю waveOutOpen, но он уже может быть вызван до того, как у меня будет хук.

2 ответа

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

Вы можете получить скорость воспроизведения, используя waveOutGetPlaybackRate()и, зная это, вы можете (теоретически) узнать размер ячейки, рассчитав время, необходимое для воспроизведения буфера известного размера. (0 - это всегда тишина) Но 8-битное стерео будет заканчиваться тем же количеством времени, что и 16-битное моно. то же самое с поплавком /32-битным моно и 16-битным стерео.

Я бы сказал, что в 99% случаев 16-битное стерео будет правильным ответом, но если вы угадаете неправильно, результат звучит очень плохо (и громко!), Поэтому предположение не может быть хорошей идеей.

Вы также можете использовать waveOutMessage() отправлять пользовательские сообщения в волновой драйвер. Возможно, что есть какое-то сообщение custom_query_wave_format, но в стандарте такого сообщения нет. Предполагается, что тот, кто открыл волновое устройство, будет следить за тем, в каком формате (ах) он его открыл.

Вы получаете доступ к pwfx предмет из waveOutOpen struct, как вы бы получили доступ к любой другой структуре.

myWaveOutOpen.pwfx.wFormatTag

Или эквивалентный формат на вашем языке.

Ваш вопрос трудно понять. Я не уверен, что ты хочешь...?

Другие вопросы по тегам