Quantcast
Channel: NAudio
Viewing all articles
Browse latest Browse all 5831

New Post: Using VolumeMeter while using WaveMixerStream32

$
0
0
Ok I got it working after much trial and error and demo referencing. The working code is below if anyone needs a VB example.
Dim asioOut As AsioOut

    Dim reader As AudioFileReader
    Dim waveChannel As WaveChannel32
    Dim waveToSample As WaveToSampleProvider
    Dim meterSampleProvider As MeteringSampleProvider
    Dim mixer As MixingSampleProvider
    Dim sampleToWave As SampleToWaveProvider
    Dim waveFormat As WaveFormat

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        For Each device In AsioOut.GetDriverNames()
            comboBoxAsioDevice.Items.Add(device)
        Next
        If comboBoxAsioDevice.Items.Count > 0 Then
            comboBoxAsioDevice.SelectedIndex = 0
        End If

        waveFormat = NAudio.Wave.WaveFormat.CreateIeeeFloatWaveFormat(44100, 2)
      
        mixer = New MixingSampleProvider(waveFormat)

        reader = New AudioFileReader("C:\samples\snare.wav")
        waveChannel = New WaveChannel32(reader)
        waveToSample = New WaveToSampleProvider(waveChannel)
        meterSampleProvider = New MeteringSampleProvider(waveToSample)
        AddHandler meterSampleProvider.StreamVolume, AddressOf OnPostVolumeMeter
        mixer.AddMixerInput(meterSampleProvider)

        sampleToWave = New SampleToWaveProvider(mixer)

        asioOut = New AsioOut(comboBoxAsioDevice.Text)
        asioOut.ChannelOffset = GetUserSpecifiedChannelOffset()
        asioOut.Init(sampleToWave)

        asioOut.Play()
    End Sub

    Private Function GetUserSpecifiedChannelOffset() As Integer
        Dim channelOffset As Integer = 0
        Integer.TryParse(textBoxChannelOffset.Text, channelOffset)
        Return channelOffset
    End Function

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
      'play the sample
        waveChannel.Position = 0
      
    End Sub

    Public Sub OnPostVolumeMeter(sender As Object, e As StreamVolumeEventArgs)
        VolumeMeter1.Amplitude = e.MaxSampleValues(0)
    End Sub

Viewing all articles
Browse latest Browse all 5831

Latest Images

Trending Articles



Latest Images