Я разрабатываю приложения 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 #.
Любая помощь и идеи приветствуются!
Спасибо,
Карл
Дополнительные детали:
Код:
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" (общий API Window wave?).
Я слышу звук при нажатии на экран, и с помощью функции «PlaySound» я могу воспроизвести волновой файл. Проблема только в том, что я не могу повлиять на громкость.
Спасибо!