3

我的表单中有一个滑块和一个 webbrowser 对象,滑动它应该会改变音量,但是它确实会移动滑块,如下所示:滑块确实移动,但声音输出没有改变

但它不会改变音量的实际输出。这可能是因为我集成了 WebBrowser 对象并使用 Windows 7。当我手动滑动滑块(在屏幕截图中看到的那个)时,音量输出确实发生了变化。播放 .wav 文件时,音量的输出发生变化,但 WebBrowser 对象不会发生变化。

我正在使用以下代码:

Xaml

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Slider Minimum="0" Maximum="10" ValueChanged="ValueChanged"/>
    </Grid>
</Window>

C#

public partial class MainWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        // Calculate the volume that's being set
        double newVolume = ushort.MaxValue * e.NewValue / 10.0;

        uint v = ((uint) newVolume) & 0xffff;
        uint vAll = v | (v << 16);

        // Set the volume
        int retVal = NativeMethods.WaveOutSetVolume(IntPtr.Zero, vAll);

        Debug.WriteLine(retVal);
    }
}

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

}
4

2 回答 2

2

尝试使用MediaElement

然后你可以像这样播放你的广播电台:

<MediaElement LoadedBehavior="Manual" x:Name="media" />

media.Source = new Uri(@"http://shoutcastinfo.radiostaddenhaag.com/stad.wax");
media.Play();

并改变音量

<Slider Minimum="0" Maximum="1" ValueChanged="ValueChanged"/>

private void ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    media.Volume = e.NewValue;
}

Windows Mixer 和 WPF 滑块现在都可以适当地更改音量,但两者的值是独立的,不反映彼此的更改。

于 2012-05-01T16:58:16.257 回答
1

首先这uint v = ((uint)newVolume) & 0xffff有点多余,uint v = (uint)newVolume会返回相同的结果。

其次,根据waveOutSetVolume 方法的 MSDN 文档

大多数设备不支持完整的 16 位音量级别控制,并且不会使用请求音量设置的最低有效位。例如,如果设备支持 4 位音量控制,则值 0x4000、0x4FFF 和 0x43BE 都将被截断为 0x4000。waveOutGetVolume 函数返回使用 waveOutSetVolume 设置的完整 16 位设置。

你尝试过大的改变吗?

于 2012-05-06T17:32:31.320 回答