Public Class CDRipperForm
Private CDDrive As Ripper.CDDrive
Private StopSaving As Boolean = False
Private WaveWriter As Yeti.MMedia.WaveWriter
#Region "Handler eventi CD/Wave"
Private Sub CD_Inserted(ByVal sender As Object, ByVal e As EventArgs)
lblStatus.Text = "CD inserito: premere Analizza per iniziare il trasferimento"
End Sub
Private Sub CD_Removed(ByVal sender As Object, ByVal e As EventArgs)
lstTracks.Items.Clear()
lblStatus.Text = "Cd rimosso: non è più possibile trasferire le tracce sull'hard disk"
End Sub
Private Sub ReadTrack_ProgressChanged(ByVal sender As Object, ByVal e As Ripper.ReadProgressEventArgs)
prgRelative.Value = 100 * e.BytesRead / e.Bytes2Read
prgAbsolute.Value = (CInt(prgAbsolute.Tag) * 100) + prgRelative.Value
If StopSaving Then
e.CancelRead = True
btnSave.Enabled = True
btnStop.Enabled = False
End If
Application.DoEvents()
End Sub
Private Sub ReadTrack_DataRead(ByVal sender As Object, ByVal e As Ripper.DataReadEventArgs)
If WaveWriter IsNot Nothing Then
WaveWriter.Write(e.Data, 0, e.DataSize)
End If
End Sub
#End Region
Private Sub CDRipperForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CDDrive = New Ripper.CDDrive()
AddHandler CDDrive.CDInserted, AddressOf CD_Inserted
AddHandler CDDrive.CDRemoved, AddressOf CD_Removed
Dim Drives() As Char
= Ripper.
CDDrive.
GetCDDriveLetters()
cmbDrives.
Items.
Add(Drive)
Next
If cmbDrives.Items.Count > 0 Then
cmbDrives.SelectedIndex = 0
End If
End Sub
Private Sub imgOpenClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles imgOpen.Click
If CDDrive.EjectCD() Then
lstTracks.Items.Clear()
lblStatus.Text = "Cassetto del CD aperto"
Else
lblStatus.Text = "Impossibile aprire il cassetto del CD"
End If
End Sub
Private Sub imgClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles imgClose.Click
If CDDrive.LoadCD() Then
lstTracks.Items.Clear()
lblStatus.Text = "Cassetto del CD chiuso"
Else
lblStatus.Text = "Impossibile chiudere il cassetto del CD"
End If
End Sub
Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click
If CDDrive.Open(cmbDrives.SelectedItem) Then
If CDDrive.IsCDReady() Then
If CDDrive.Refresh() Then
Dim TrackNumber As Int32 = CDDrive.GetNumTracks()
For I As Int32 = 1 To TrackNumber
Dim Data() As UInt32 = {I, CDDrive.TrackSize(I)}
Dim Item As New ListViewItem( _
New String() {Data(0), String.Format("{0:N0} bytes", Data(1)), _
IIf(CDDrive.IsAudioTrack(I), "Audio", "Data")})
Item.Tag = Data
lstTracks.Items.Add(Item)
Next
lblStatus.Text = "Analisi completata: " & TrackNumber & " tracce trovate"
End If
Else
MessageBox.Show("Il CD non è ancora pronto per la lettura!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
Else
MessageBox.Show("Impossibile analizzare il CD!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
End Sub
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
If lstTracks.Items.Count = 0 Then
MessageBox.Show("Prima di iniziare il salvataggio, inserire e analizzare il CD!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Exit Sub
End If
If lstTracks.CheckedIndices.Count = 0 Then
MessageBox.Show("Nessuna traccia selezionata!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Exit Sub
End If
If FolderBrowserDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
btnSave.Enabled = False
btnStop.Enabled = True
Try
CDDrive.LockCD()
Dim Format As New WaveLib.WaveFormat(44100, 16, 2)
Dim WaveFile As IO.FileStream
prgAbsolute.Maximum = lstTracks.CheckedItems.Count * 100
prgAbsolute.Tag = 0
Try
For Each Item As ListViewItem In lstTracks.CheckedItems
Dim Data() As UInt32 = Item.Tag
WaveFile = New IO.FileStream(FolderBrowserDialog.SelectedPath & "\Traccia " & Data(0) & ".wav", IO.FileMode.Create, IO.FileAccess.Write)
WaveWriter = New Yeti.MMedia.WaveWriter(WaveFile, Format)
If CDDrive.ReadTrack(Data(0), _
New Ripper.CdDataReadEventHandler(AddressOf ReadTrack_DataRead), _
New Ripper.CdReadProgressEventHandler(AddressOf ReadTrack_ProgressChanged)) Then
WaveWriter.Close()
WaveFile.Close()
lblStatus.Text = "Traccia " & Data(0) & " copiata"
prgAbsolute.Tag += 1
Application.DoEvents()
Else
WaveWriter.Close()
WaveFile.Close()
lblStatus.Text = "Si è verificato un errore durante il salvataggio della traccia " & Data(0)
End If
Next
Catch Ex As Exception
Finally
If WaveFile IsNot Nothing Then
WaveFile.Close()
WaveFile = Nothing
End If
If WaveWriter IsNot Nothing Then
WaveWriter.Close()
WaveWriter = Nothing
End If
End Try
Catch ex As Exception
Finally
CDDrive.UnLockCD()
End Try
btnSave.Enabled = True
btnStop.Enabled = False
End If
End Sub
Private Sub rbtAllFiles_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbtAllFiles.CheckedChanged
If rbtAllFiles.Checked Then
If Not (lstTracks.CheckedItems.Count = lstTracks.Items.Count) Then
For Each Item As ListViewItem In lstTracks.Items
Item.Checked = True
Next
End If
End If
End Sub
Private Sub lstTracks_ItemChecked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemCheckedEventArgs) Handles lstTracks.ItemChecked
rbtAllFiles.Checked = (lstTracks.CheckedItems.Count = lstTracks.Items.Count)
rbtSelectedFiles.Checked = Not rbtAllFiles.Checked
End Sub
Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
If MessageBox.Show("Si sta per terminare il salvataggio: continuare?", Me.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then
Exit Sub
End If
StopSaving = True
End Sub
End Class