VB.net NAudio 混合两个 wav 文件的问题

问题描述 投票:0回答:1

我不是一个C#程序员,但我已经在我的VB项目中成功实现了几个NAudio功能。

我被困在如何设置信号链以将两个波形文件发送到混音器,然后发送到播放引擎,这是我从 PluralSight 上精彩的 NAudio Course Mark 获得的。

任何人都可以帮助我找到正确的属性组合来使其正常工作吗?

模块1'声明

Public myBackMSP As MixingSampleProvider
Public myLeadMSP As MixingSampleProvider
Public myBackWaveout As WaveOut
Public myLeadWaveout As WaveOut
Public mybackIWP As IWaveProvider
Public myleadIWP As IWaveProvider
Public mybackAFR As AudioFileReader
Public myleadAFR As AudioFileReader
Public myBackVolume As Double
Public myLeadVolume As Double
Public mymixer As MixingSampleProvider
Public myWaveout As WaveOut

' 模块1结束

Private Sub playbackengine()
    myWaveout = New WaveOut
    mymixer = New MixingSampleProvider(WaveFormat.CreateIeeeFloatWaveFormat(44100, 2))
    mymixer.ReadFully = True
    myWaveout.Init(mymixer)
    myWaveout.Play()
End Sub

Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click, btnStart.Click
    dim myBackFileName As String
    dim myLeadFileName As String

    mybackfilename = "c:\vb\back.wav"
    myleadfilename = "c:\vb\lead.wav"

    playbackengine()
    btnStart.Enabled = False    ' to prevent Start being pressed twice

    myleadAFR = New AudioFileReader(myLeadFileName)        
    mybackAFR = New AudioFileReader(myBackFileName)

    myleadIWP = New IWaveProvider(myLeadFileName)
    mybackIWP = New IWaveProvider(myBackFileName)

    myleadIWP = New IWaveProvider(myleadAFR.ToWaveProvider) ' <-- these throw a 'New' Cannot 
    mybackIWP = New IWaveProvider(mybackAFR.ToWaveProvider) ' <-- be used on an interface

    myLeadMSP = New MixingSampleProvider(myleadAFR)
    myBackMSP = New MixingSampleProvider(mybackAFR)

    myleadAFR.Volume = 0.5
    mybackAFR.Volume = 0.5

    mymixer.AddMixerInput(myLeadMSP)
    mymixer.AddMixerInput(myBackMSP)

End Sub

我一直在将这两个文件发送到 Waveout 的两个实例,但无法独立更改文件的音量。

vb.net wav naudio mixer
1个回答
0
投票

经过大量挖掘,并参考马克课程,我发现了我的错误。

这是更正后的代码。

Public mybackISP As ISampleProvider
Public myleadISP As ISampleProvider
Public mybackAFR As AudioFileReader
Public myleadAFR As AudioFileReader
Public myBackVolume As Double
Public myLeadVolume As Double

Public mymixer As MixingSampleProvider

Public myWaveout As WaveOut

Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click, btnStart.Click

    playbackengine()

    btnStart.Enabled = False

    mybackAFR = New AudioFileReader(myBackFileName)
    myleadAFR = New AudioFileReader(myLeadFileName)

    myleadISP = myleadAFR.ToSampleProvider  //cast to Sampleprovider !
    mybackISP = mybackAFR.ToSampleProvider  //cast to Sampleprovider !

    mymixer.AddMixerInput(mybackISP)
    mymixer.AddMixerInput(myleadISP)

End Sub
// playback engine unchangeed
Private Sub playbackengine()
    myWaveout = New WaveOut
    mymixer = New MixingSampleProvider(WaveFormat.CreateIeeeFloatWaveFormat(44100, 2))
    mymixer.ReadFully = True
    myWaveout.Init(mymixer)
    myWaveout.Play()
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.