C# 使用NAudio混合WaveProviders
我使用NAudio在运行时生成并播放声波 我已经通过本教程获得了一个正弦波: 然而,我真正需要的是能够在运行时向WaveMixerStream添加许多单独的Wave 我知道要做到这一点,我需要单独的WaveStreams,但我不知道如何将WaveProvider的输出转换为WaveStream,以添加到WaveMixerStream 我假设这是不可能的,所以修改了代码,给出了一个派生的WaveStream类 我补充说:C# 使用NAudio混合WaveProviders,c#,wav,naudio,C#,Wav,Naudio,我使用NAudio在运行时生成并播放声波 我已经通过本教程获得了一个正弦波: 然而,我真正需要的是能够在运行时向WaveMixerStream添加许多单独的Wave 我知道要做到这一点,我需要单独的WaveStreams,但我不知道如何将WaveProvider的输出转换为WaveStream,以添加到WaveMixerStream 我假设这是不可能的,所以修改了代码,给出了一个派生的WaveStream类 我补充说: public override long Length {
public override long Length
{
get { return long.MaxValue; }
}
但我不确定如何获得该职位:
public override long Position
{
get
{
return //What here?
}
set
{
// What here? = value;
}
}
所以问题是:1。这样行吗?2.如何获取/设置位置
提前感谢。IWaveProvider和
WaveStream
之间的区别在于WaveStream
支持报告长度和位置以及设置位置。但是,由于您要传入IWaveProvider
,因此您不知道长度,也无法设置位置。只需在Position
setter中不执行任何操作,对于Position
getter,返回迄今为止从Read
方法返回的字节总数(只需使用long类型的私有变量来存储)
另一种方法是简单地从WaveMixerStream
复制代码,并使其成为IWaveProvider
,而不是WaveStream
。这实际上将简化它相当多,WaveMixerStream的许多复杂性是在重新定位时正确地重新定位所有混频器输入
(顺便说一句,将来我会鼓励人们使用
ISampleProvider
界面,而且已经有了MixingSampleProvider
,它正是您想要的。我还没有时间写这方面的教程,但都在里面)感谢您快速而有用的帮助。我想我已经知道了,但如果它变得难看的话,我很可能会回到这个问题上来!再次感谢。事实上,我昨晚签入了一个(完全未经测试的)MixingWaveProvider32,因此如果您想使用IWaveProvider,可以查看它。@MarkHeath:您有关于使用ISampleProvider和MixingSampleProvider的教程吗?