c# - Windows CE 6.0下HDA Audio设备音量调节和播放声音的接口(interface)?

标签 c# audio windows-ce volume .net-cf-3.5

我为 Win CE 设备开发 C# .Net CF 应用程序,但在播放声音时改变扬声器音量以影响实际音量时遇到问题。

我使用的界面是:

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# 代码中使用了不正确的接口(interface)。

    欢迎任何帮助和想法!

    谢谢,

    卡尔

    额外细节:

    代码:
        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 远程进程查看器,我可以看到音频驱动程序(即“jwavehda.dll”)已加载。还加载了“waveapi.dll”(通用 Window wave api?)。

    点击屏幕时确实会听到声音,并且使用“PlaySound”功能可以播放波形文件。唯一的问题是我无法影响音量。

    谢谢!

    最佳答案

    我需要查看您的调用代码(并且您在此处的 p/invoke 声明也不完整)才能确定。你知道waveOutSetVolume dwVolume 被分成两个词,上面的工作是左声道音量,下面的工作是右声道音量?您发送的值可能会影响行为(您没有显示代码的那部分)。

    代码在一个平台上运行但在另一个平台上失败的事实向我表明,这可能是一个操作系统/平台问题。您是否收到屏幕点击或其他系统事件等事件的音频?你有音频控制面板小程序吗?您是否在注册表中查找了音频驱动程序以确保它既存在于操作系统中并且也已加载?

    关于c# - Windows CE 6.0下HDA Audio设备音量调节和播放声音的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6504457/

    相关文章:

    c# - 通用结构的大小

    c# - Window.Resources 中的 WPF DataTemplate 绑定(bind)参数

    c# - 在不使用容器的情况下从配置中统一拦截

    JavaScript : How to split an audio blob into 1 second chunks and export to wav files using recorder. js?

    visual-studio-2005 - VS2005和Windows CE 6.0调试

    c# - 使用 Interop.MODI 引发 0x80040154 异常

    ios - AVComposition 中的轨道在暂停时会丢失时间

    Android 文件选择器将音频文件重定向到/外部

    windows-ce - ARM 目标上 WinCE 6.0 的典型中断延迟是多少?

    c# - 通过命令行在 Windows CE 和 Windows Mobile 设备上导入根证书