gpt4 book ai didi

c# - NAudio播放位置

转载 作者:行者123 更新时间:2023-11-30 14:35:36 25 4
gpt4 key购买 nike

我有一个显示音频波形的 GUI 组件。我也可以在此组件上显示光标。问题:如何从 NAudio 接收当前正在发送到声卡/驱动程序的样本?我唯一的想法是在发送样本后(在 Read 方法中)从 IWaveProvider 引发一个事件,但由于刷新率低,这种方法并不好。

最佳答案

您的问题来自 2012 年,有点老了,但我目前遇到了同样的问题。我找到了一个解决方案 - 问题是,WaveOutWaveOutEvent 只有一个 PlaybackStopped 事件。

但是您可以使用单独的Thread 来处理它。创建一个带有 LoopThread一秒Sleep-Interval;在这里您可以每秒跟踪当前播放时间。

this.Thread = new Thread(new ThreadStart(Run)); // Tracking the Audio-Data on `Run` Method
this.Thread.Start();

在您的Run 方法中,您可以像这样处理音频数据:

    private void Run() {
while(true) { // Create an infinite loop
System.Diagnostics.Debug.WriteLine("PlaybackState: " + this.Wrapper.PlaybackState);

if(this.Wrapper.PlaybackState == PlaybackState.Playing) {
System.Diagnostics.Debug.WriteLine("Bytes played: " + this.Wrapper.GetPosition());

double ms = this.Wrapper.GetPosition() * 1000.0 / this.Wrapper.OutputWaveFormat.BitsPerSample / this.Wrapper.OutputWaveFormat.Channels * 8 / this.Wrapper.OutputWaveFormat.SampleRate;

System.Diagnostics.Debug.WriteLine("Milliseconds Played: " + ms);
}

Thread.Sleep(1000); // Sleep for 1 second
}
}

关于c# - NAudio播放位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11846183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com