VU表像Windows Volume Mixer

时间:2015-12-11 20:08:06

标签: c# wpf visual-studio audio

我正在开发一种屏幕录制软件,它具有音量控制功能。我下面粘贴的代码就是我如何控制音量。

static class NativeMethods
    {
        [DllImport("winmm.dll")]
        public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);

        [DllImport("winmm.dll", EntryPoint = "waveOutSetVolume")]
        public static extern int WaveOutSetVolume(IntPtr hwo, uint dwVolume);

        [DllImport("winmm.dll", SetLastError = true)]
        public static extern bool PlaySound(string pszSound, IntPtr hmod, uint fdwSound);
    }


//Event for handling volume control
    private void VolumeSlider(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        // Calculate the volume that's being set
     int NewVolume = ((ushort.MaxValue / 10) * (int)slider.Value);
        // Set the same volume for both the left and the right channels
        uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
        // Set the volume
        NativeMethods.WaveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
    }

通过在Windows上查看音量混合器,我可以看到这会设置应用程序的音量,而不是设备。这很棒,因为只更改应用程序的音量会改变它录制的视频的音量。

enter image description here

现在我想知道是否可以为应用程序的卷创建VU Meter,就像Windows Volume Mixer中的那样。我试图使用NAudio实现这种效果,但我不确定它是如何或是否可以。我对其他API持开放态度。

编辑:我不是在问如何更改音量...我只需要像混音器中的on一样有效VU Meter

1 个答案:

答案 0 :(得分:1)

如果其他人偶然发现这个问题,我不想留下这个问题。基本上@RickLiddle评论有答案。我将从所述答案发布修改后的代码并尝试解释。试着学习这个我已经非常熟悉NAudio&amp; CSCore如果你需要进一步的帮助,请不要犹豫。

{{1}}