使用 NAudio 在 WPF 上创建音频播放器。绑定不起作用

Posted

技术标签:

【中文标题】使用 NAudio 在 WPF 上创建音频播放器。绑定不起作用【英文标题】:Creating audio player on WPF using NAudio. Binding doesn't work 【发布时间】:2019-12-27 15:45:25 【问题描述】:

我正在使用 NAudio 在 WPF 上创建我的音频播放器。 我正在添加一个slider,它将滚动歌曲。 XAML:

<Slider Height="30" 
                Value="Binding Path=MediaReader.Position, Mode=TwoWay" 
                Maximum="Binding Path=MediaReader.Length, Mode=OneWay"/>

注意。 MediaReader - 这是一个返回MediaFoundationReader类型对象的属性:

MediaFoundationReader mediaReader;
public MediaFoundationReader MediaReader => mediaReader;

问题:当歌曲播放时,滑块属性Value 没有改变!但是通过滚动滑块的拇指,MediaReader 的属性 Position 会发生变化。 为什么会这样,我该如何解决?

【问题讨论】:

媒体阅读器未发送更改通知,因此无法更新 UI。 @Alejandro,谢谢!也许我应该创建一个计时器,每个刻度都会更新滑块? 您需要将模型包装在实现 INotifyPropertyChanged 接口的视图模型中 @BorisMakhlin 这是一种选择,但是这会占用大量 CPU。在库的文档中查找通知您的内容,例如更新位置的事件或回调。 使用更新绑定的行为怎么样? ***.com/a/44253691/8454410 【参考方案1】:

看看这个教程:

https://www.pluralsight.com/guides/building-a-wpf-media-player-using-naudio

作者也使用了一个滑块控件,绑定了当前的轨道位置,例如:

<Slider Grid.Column="0" Minimum="0" Maximum="Binding CurrentTrackLenght, Mode=OneWay" Value="Binding CurrentTrackPosition, Mode=TwoWay" x:Name="SeekbarControl" VerticalAlignment="Center">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="PreviewMouseDown">
                        <i:InvokeCommandAction Command="Binding TrackControlMouseDownCommand"></i:InvokeCommandAction>
                    </i:EventTrigger>
                    <i:EventTrigger EventName="PreviewMouseUp">
                        <i:InvokeCommandAction Command="Binding TrackControlMouseUpCommand"></i:InvokeCommandAction>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Slider>

public double CurrentTrackPosition
    
        get  return _currentTrackPosition; 
        set
        
            if (value.Equals(_currentTrackPosition)) return;
            _currentTrackPosition = value;
            OnPropertyChanged(nameof(CurrentTrackPosition));
        
    

我想你可以理解这背后的想法......

【讨论】:

以上是关于使用 NAudio 在 WPF 上创建音频播放器。绑定不起作用的主要内容,如果未能解决你的问题,请参考以下文章

NAudio 获取音频样本

从 NAudio 访问 WPF MediaElement 声音流

我可以同时从音频流缓冲区写入和播放(在 NAudio 中)吗?

在 WPF C# 中使用 NAudio 录制音频

尝试在 ASIO 输出上使用 NAudio 播放音频时的空引用

NAudio - 通过终端服务器连接播放断断续续的音频