在C#中播放声音(WMA)文件的一部分

我有一个包含许多不同audio段的WMA文件。 有什么办法可以播放声音stream的一部分吗?

就像是:

public static void Play(Stream soundStream, long start, long end); 

Solutions Collecting From Web of "在C#中播放声音(WMA)文件的一部分"

您可以使用NAudio来做到这一点 ,它是一个.Net的音频库。

使用这里的例子,我能够抛出一个快速的测试应用程序来尝试。 使用WaveSteam.Skip(int seconds)方法,您可以从文件中的特定位置开始。 尽管如此,我还没有能够弄清楚如何获得最终目标。 下面是修改后的示例,在30秒标记处启动一个wma文件:

  IWavePlayer waveOutDevice = new WaveOut(); WaveStream mainOutputStream; WaveChannel32 volumeStream; WaveStream wmaReader = new WMAFileReader(@"F:\My Music\The Prodigy\Music for the Jilted Generation\01 Intro.wma"); volumeStream = new WaveChannel32(wmaReader); mainOutputStream = volumeStream; mainOutputStream.Skip(30); //start 30 seconds into the file waveOutDevice.Init(mainOutputStream); waveOutDevice.Play(); 

上面的示例省略了清理代码,以停止播放并处理流。 希望有点帮助。

不像你想的那样,不。

我假设这是在一个WinForms或WPF的上下文。 解决方法是将WMP ActiveX控件托管到您的项目中,然后将WMA文件加载到其中,并设置位置/搜索属性,然后播放一段时间,并在定时器到达某个点时停止。 我不相信WMP ActiveX控件有一个计时器事件,所以你需要在另一个线程上观看它,并在到达时停止播放。

这是一个黑客,但应该工作。 如果您熟悉在.NET应用程序中托管ActiveX控件,那么您应该能够在几个小时内获得“有效”的内容。 请注意,由于与64位WMP ActiveX控件的兼容性问题,您只想使应用程序为x86。

更困难的是,可以在应用程序中使用DirectShow,并为WMA文件创建一个渲染图并进行操作,寻找和回放自己。 DS的学习曲线非常陡峭,如果你以前从未使用过COM,那么期望这个过程至少需要几天甚至几个星期。