Imports Microsoft.DirectX.AudioVideoPlayback
Public Class Form1
Private Wave As CWAVReader
Private StartTime As Date
Private Manager As WaveDataManager
Private Player As Audio
Private Visualizer1 As WaveFormVisualizer
Private Visualizer2 As RectangleVisualizer
Private Visualizer3 As LoudnessVisualizer
Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click
Dim Open As New OpenFileDialog
Open.Filter = "Wave|*.wav"
If Open.ShowDialog = Windows.Forms.DialogResult.OK Then
Wave = Nothing
Manager = Nothing
Visualizer1 = Nothing
Me.Enabled = False
lblStatus.Text = "Attendere, apertura in corso..."
Application.DoEvents()
Wave = New CWAVReader(Open.FileName)
Manager = New WaveDataManager(Wave.GetSoundDataValue(), Wave.ByteRate)
Manager.CompressData(tmrRefresh.Interval / 1000)
picWave.Image = Manager.GetWaveForm(picWave.Width, picWave.Height)
picWave.Refresh()
If Player Is Nothing Then
Else
End If
Me.Enabled = True
Application.DoEvents()
lblStatus.Text = "File aperto"
GroupBox1.Enabled = True
btnPlay.Enabled = True
btnPause.Enabled = True
btnStop.Enabled = True
End If
End Sub
Private Sub btnPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlay.Click
If Manager Is Nothing Then
MessageBox.Show("Caricare un file prima di procedere!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Exit Sub
End If
If rbtWaveForm.Checked Then
If Visualizer1 Is Nothing Then
Visualizer1 = New WaveFormVisualizer(Manager)
End If
Manager.Visualizer = Visualizer1
ElseIf rbtRectangles.Checked Then
If Visualizer2 Is Nothing Then
Visualizer2 = New RectangleVisualizer(Manager)
End If
Manager.Visualizer = Visualizer2
ElseIf rbtLoudness.Checked Then
If Visualizer3 Is Nothing Then
Visualizer3 = New LoudnessVisualizer(Manager)
End If
Manager.Visualizer = Visualizer3
End If
Manager.Visualizer.ForeColor = lnkWaveColor.LinkColor
Manager.Visualizer.BackgroundColor = lnkBackColor.LinkColor
Player.Play()
tmrRefresh.Start()
End Sub
Private Sub tmrRefresh_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrRefresh.Tick
Dim TotalSeconds As Double = Player.CurrentPosition
If Player.CurrentPosition = Player.Duration Then
tmrRefresh.Stop()
End If
If TotalSeconds = 0 Then
Exit Sub
End If
picWave.Image = Manager.Visualizer.Render(picWave.Width, picWave.Height, TotalSeconds - nudTimeWidth.Value / 1000, TotalSeconds)
End Sub
Private Sub btnPause_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPause.Click
If Player IsNot Nothing Then
tmrRefresh.Stop()
Player.Pause()
End If
End Sub
Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
If Player IsNot Nothing Then
tmrRefresh.Stop()
Player.Stop()
End If
End Sub
Private Sub lnkWaveColor_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles lnkWaveColor.LinkClicked
If ColorDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
lnkWaveColor.LinkColor = ColorDialog.Color
lnkWaveColor.BackColor = Color.FromArgb(255, Color.FromArgb(Not lnkWaveColor.LinkColor.ToArgb))
End If
End Sub
Private Sub lnkBackColor_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles lnkBackColor.LinkClicked
If ColorDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
lnkBackColor.LinkColor = ColorDialog.Color
lnkBackColor.BackColor = Color.FromArgb(255, Color.FromArgb(Not lnkBackColor.LinkColor.ToArgb))
End If
End Sub
Private Sub picWave_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picWave.Resize
nudTimeWidth.Maximum = tmrRefresh.Interval * picWave.Width
End Sub
Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
nudTimeWidth.Value = tmrRefresh.Interval * picWave.Width
End Sub
End Class