Я разрабатываю приложения C # .Net CF для устройства Win CE, и у меня возникают проблемы с изменением громкости динамика, чтобы повлиять на реальную громкость при воспроизведении звука.
Интерфейс, который я использую:
int waveOutSetVolume(IntPtr hMod, UInt32 dwVolume);
int PlaySound(string szSound, IntPtr hMod, int flags);
Код, который я использую, хорошо работал с нашим старым устройством, которое имело следующую настройку:
- AC'97 Аудиокодек, Windows CE 5, .Net CF 2.0.
Однако на новом устройстве звук воспроизводится, но я не могу изменить громкость. Установка выглядит следующим образом:
- Аудиокодек HDA, Windows CE 6, .Net CF 3.5.
Я не уверен, существует ли эта проблема в образе ОС Windows CE 6 (например, отсутствует / неверный аудиодрайвер), или я использую неверный интерфейс в своем коде C #.
Любая помощь и идеи приветствуются!
Спасибо
Karl
Дополнительные детали:
Код:
public unsafe int SetVolume(int newVolumeInPercent)
{
UInt32 newVol = (UInt32)((double)(newVolumeInPercent * ushort.MaxValue) / 100.0);
newVol = newVol + (newVol << 16);
int resultSetVolume = waveOutSetVolume(IntPtr.Zero, newVol);
return (int)Math.Round((double)resultSetVolume * 100 / ushort.MaxValue);
}
public void playSound(string soundFile)
{
PlaySound(soundFile, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_FILENAME));
}
[DllImport("CoreDll.dll")]
private extern static int waveOutSetVolume(IntPtr hMod, UInt32 dwVolume);
[DllImport("CoreDll.dll", EntryPoint = "PlaySound", SetLastError = true)]
private extern static int PlaySound(string szSound, IntPtr hMod, int flags);
private enum Flags
{
SND_ASYNC = 0x0001,
SND_FILENAME = 0x00020000,
}
Как вы видите в коде, я использую процент аргумента громкости для левого и правого канала.
Используя Windows CE Remote Process Viewer, я вижу, что загружен аудиодрайвер (то есть "jwavehda.dll"). Также загружается "waveapi.dll" (универсальный интерфейс Window wave api?).
Я получаю звук при нажатии на экран, и с помощью функции «PlaySound» я могу воспроизвести волновой файл. Единственная проблема в том, что я не могу повлиять на громкость.
Спасибо!