Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
CD Ripper - CDRipperForm.vb

CDRipperForm.vb

Caricato da: Totem
Scarica il programma completo

  1. Public Class CDRipperForm
  2.     Private CDDrive As Ripper.CDDrive
  3.     Private StopSaving As Boolean = False
  4.     Private WaveWriter As Yeti.MMedia.WaveWriter
  5.  
  6. #Region "Handler eventi CD/Wave"
  7.  
  8.     Private Sub CD_Inserted(ByVal sender As Object, ByVal e As EventArgs)
  9.         lblStatus.Text = "CD inserito: premere Analizza per iniziare il trasferimento"
  10.     End Sub
  11.  
  12.     Private Sub CD_Removed(ByVal sender As Object, ByVal e As EventArgs)
  13.         lstTracks.Items.Clear()
  14.         lblStatus.Text = "Cd rimosso: non è più possibile trasferire le tracce sull'hard disk"
  15.     End Sub
  16.  
  17.     Private Sub ReadTrack_ProgressChanged(ByVal sender As Object, ByVal e As Ripper.ReadProgressEventArgs)
  18.         prgRelative.Value = 100 * e.BytesRead / e.Bytes2Read
  19.         prgAbsolute.Value = (CInt(prgAbsolute.Tag) * 100) + prgRelative.Value
  20.         If StopSaving Then
  21.             e.CancelRead = True
  22.             btnSave.Enabled = True
  23.             btnStop.Enabled = False
  24.         End If
  25.         Application.DoEvents()
  26.     End Sub
  27.  
  28.     Private Sub ReadTrack_DataRead(ByVal sender As Object, ByVal e As Ripper.DataReadEventArgs)
  29.         If WaveWriter IsNot Nothing Then
  30.             WaveWriter.Write(e.Data, 0, e.DataSize)
  31.         End If
  32.     End Sub
  33. #End Region
  34.  
  35.     Private Sub CDRipperForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  36.         CDDrive = New Ripper.CDDrive()
  37.  
  38.         AddHandler CDDrive.CDInserted, AddressOf CD_Inserted
  39.         AddHandler CDDrive.CDRemoved, AddressOf CD_Removed
  40.  
  41.         Dim Drives() As Char = Ripper.CDDrive.GetCDDriveLetters()
  42.         For Each Drive As Char In Drives
  43.             cmbDrives.Items.Add(Drive)
  44.         Next
  45.  
  46.         If cmbDrives.Items.Count > 0 Then
  47.             cmbDrives.SelectedIndex = 0
  48.         End If
  49.     End Sub
  50.  
  51.     Private Sub imgOpenClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles imgOpen.Click
  52.         If CDDrive.EjectCD() Then
  53.             lstTracks.Items.Clear()
  54.             lblStatus.Text = "Cassetto del CD aperto"
  55.         Else
  56.             lblStatus.Text = "Impossibile aprire il cassetto del CD"
  57.         End If
  58.     End Sub
  59.  
  60.     Private Sub imgClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles imgClose.Click
  61.         If CDDrive.LoadCD() Then
  62.             lstTracks.Items.Clear()
  63.             lblStatus.Text = "Cassetto del CD chiuso"
  64.         Else
  65.             lblStatus.Text = "Impossibile chiudere il cassetto del CD"
  66.         End If
  67.     End Sub
  68.  
  69.     Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click
  70.         If CDDrive.Open(cmbDrives.SelectedItem) Then
  71.             If CDDrive.IsCDReady() Then
  72.                 If CDDrive.Refresh() Then
  73.                     Dim TrackNumber As Int32 = CDDrive.GetNumTracks()
  74.                     For I As Int32 = 1 To TrackNumber
  75.                         Dim Data() As UInt32 = {I, CDDrive.TrackSize(I)}
  76.                         Dim Item As New ListViewItem( _
  77.                             New String() {Data(0), String.Format("{0:N0} bytes", Data(1)), _
  78.                                           IIf(CDDrive.IsAudioTrack(I), "Audio", "Data")})
  79.                         Item.Tag = Data
  80.                         lstTracks.Items.Add(Item)
  81.                     Next
  82.                     lblStatus.Text = "Analisi completata: " & TrackNumber & " tracce trovate"
  83.                 End If
  84.             Else
  85.                 MessageBox.Show("Il CD non è ancora pronto per la lettura!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  86.             End If
  87.         Else
  88.             MessageBox.Show("Impossibile analizzare il CD!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  89.         End If
  90.     End Sub
  91.  
  92.     Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
  93.         If lstTracks.Items.Count = 0 Then
  94.             MessageBox.Show("Prima di iniziare il salvataggio, inserire e analizzare il CD!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  95.             Exit Sub
  96.         End If
  97.  
  98.         If lstTracks.CheckedIndices.Count = 0 Then
  99.             MessageBox.Show("Nessuna traccia selezionata!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  100.             Exit Sub
  101.         End If
  102.  
  103.         If FolderBrowserDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
  104.             btnSave.Enabled = False
  105.             btnStop.Enabled = True
  106.             Try
  107.                 CDDrive.LockCD()
  108.  
  109.                 Dim Format As New WaveLib.WaveFormat(44100, 16, 2)
  110.                 Dim WaveFile As IO.FileStream
  111.  
  112.                 prgAbsolute.Maximum = lstTracks.CheckedItems.Count * 100
  113.                 prgAbsolute.Tag = 0
  114.  
  115.                 Try
  116.                     For Each Item As ListViewItem In lstTracks.CheckedItems
  117.                         Dim Data() As UInt32 = Item.Tag
  118.                         WaveFile = New IO.FileStream(FolderBrowserDialog.SelectedPath & "\Traccia " & Data(0) & ".wav", IO.FileMode.Create, IO.FileAccess.Write)
  119.                         WaveWriter = New Yeti.MMedia.WaveWriter(WaveFile, Format)
  120.  
  121.                         If CDDrive.ReadTrack(Data(0), _
  122.                             New Ripper.CdDataReadEventHandler(AddressOf ReadTrack_DataRead), _
  123.                             New Ripper.CdReadProgressEventHandler(AddressOf ReadTrack_ProgressChanged)) Then
  124.                             WaveWriter.Close()
  125.                             WaveFile.Close()
  126.                             lblStatus.Text = "Traccia " & Data(0) & " copiata"
  127.                             prgAbsolute.Tag += 1
  128.                             Application.DoEvents()
  129.                         Else
  130.                             WaveWriter.Close()
  131.                             WaveFile.Close()
  132.                             lblStatus.Text = "Si è verificato un errore durante il salvataggio della traccia " & Data(0)
  133.                         End If
  134.                     Next
  135.                 Catch Ex As Exception
  136.  
  137.                 Finally
  138.                     If WaveFile IsNot Nothing Then
  139.                         WaveFile.Close()
  140.                         WaveFile = Nothing
  141.                     End If
  142.                     If WaveWriter IsNot Nothing Then
  143.                         WaveWriter.Close()
  144.                         WaveWriter = Nothing
  145.                     End If
  146.                 End Try
  147.  
  148.             Catch ex As Exception
  149.  
  150.             Finally
  151.                 CDDrive.UnLockCD()
  152.             End Try
  153.             btnSave.Enabled = True
  154.             btnStop.Enabled = False
  155.         End If
  156.     End Sub
  157.  
  158.     Private Sub rbtAllFiles_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbtAllFiles.CheckedChanged
  159.         If rbtAllFiles.Checked Then
  160.             If Not (lstTracks.CheckedItems.Count = lstTracks.Items.Count) Then
  161.                 For Each Item As ListViewItem In lstTracks.Items
  162.                     Item.Checked = True
  163.                 Next
  164.             End If
  165.         End If
  166.     End Sub
  167.  
  168.     Private Sub lstTracks_ItemChecked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemCheckedEventArgs) Handles lstTracks.ItemChecked
  169.         rbtAllFiles.Checked = (lstTracks.CheckedItems.Count = lstTracks.Items.Count)
  170.         rbtSelectedFiles.Checked = Not rbtAllFiles.Checked
  171.     End Sub
  172.  
  173.     Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
  174.         If MessageBox.Show("Si sta per terminare il salvataggio: continuare?", Me.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then
  175.             Exit Sub
  176.         End If
  177.         StopSaving = True
  178.     End Sub
  179. End Class