我正在开发一种屏幕录制软件,它具有音量控制功能。我下面粘贴的代码就是我如何控制音量。
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上查看音量混合器,我可以看到这会设置应用程序的音量,而不是设备。这很棒,因为只更改应用程序的音量会改变它录制的视频的音量。
现在我想知道是否可以为应用程序的卷创建VU Meter,就像Windows Volume Mixer中的那样。我试图使用NAudio实现这种效果,但我不确定它是如何或是否可以。我对其他API持开放态度。
编辑:我不是在问如何更改音量...我只需要像混音器中的on一样有效VU Meter。
答案 0 :(得分:1)
如果其他人偶然发现这个问题,我不想留下这个问题。基本上@RickLiddle评论有答案。我将从所述答案发布修改后的代码并尝试解释。试着学习这个我已经非常熟悉NAudio&amp; CSCore如果你需要进一步的帮助,请不要犹豫。
{{1}}