daily pastebin goal
49%
SHARE
TWEET

Asignar Track Number (mp3) - MainWindows.vb

elGuille Mar 27th, 2013 152 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '------------------------------------------------------------------------------
  2. ' Asignar el número de pista a los ficheros mp3                     (25/Mar/13)
  3. '
  4. ' ©Guillermo 'guille' Som, 2013
  5. '------------------------------------------------------------------------------
  6. Option Strict On
  7. Option Infer On
  8.  
  9. Imports Asignar_MP3_Track_Number.elGuille.MP3
  10.  
  11. Class MainWindow
  12.  
  13.     Private Sub ButtonCerrar_Click(sender As Object, e As RoutedEventArgs)
  14.         Me.Close()
  15.     End Sub
  16.  
  17.     Private mp3Inf As MP3Info
  18.  
  19.     ' OJO con estos cuadros de diálogo,
  20.     ' ya que ShowDialog devuelve Boolean
  21.     Private oFD As New Microsoft.Win32.OpenFileDialog
  22.     Dim fics() As String
  23.  
  24.     Private Sub ButtonExaminar_Click(sender As Object, e As RoutedEventArgs)
  25.         ' Seleccionar el directorio con los mp3 a procesar
  26.         With oFD
  27.             .FileName = txtDir.Text
  28.             .Filter = "Ficheros mp3|*.mp3"
  29.             .Multiselect = False
  30.             .Title = "Seleccionar directorio con los ficheros mp3 a procesar"
  31.             If .ShowDialog = True Then
  32.                 txtDir.Text = System.IO.Path.GetDirectoryName(.FileName)
  33.                 fics = System.IO.Directory.GetFiles(System.IO.Path.GetDirectoryName(.FileName), "*.mp3")
  34.                 lblInfo.Text = "Directorio con " & fics.Length & " ficheros .mp3"
  35.                 lstFics.Items.Clear()
  36.  
  37.                 asignarDatos(.FileName)
  38.             End If
  39.         End With
  40.  
  41.     End Sub
  42.  
  43.     Private Sub asignarDatos(fic As String)
  44.         txtArtist.Text = ""
  45.         txtAlbum.Text = ""
  46.         Try
  47.             mp3Inf.Filename = fic
  48.  
  49.             txtArtist.Text = ("" & mp3Inf.ID3v1Tag.Artist).Trim()
  50.             txtAlbum.Text = ("" & mp3Inf.ID3v1Tag.Album).Trim()
  51.  
  52.             Dim sfile = System.IO.Path.GetFileNameWithoutExtension(fic)
  53.             Dim i = sfile.IndexOf("-")
  54.             If i > -1 Then
  55.                 Dim j = sfile.IndexOf("-", i + 1)
  56.                 If j > -1 Then
  57.                     Dim sTitle = sfile.Substring(j + 1)
  58.                     If String.IsNullOrWhiteSpace(sTitle) = False Then
  59.                         'mp3Inf.ID3v1Tag.Title = sTitle
  60.                         txtTitle.Text = sTitle
  61.                     End If
  62.                 End If
  63.             End If
  64.  
  65.         Catch ex As Exception
  66.  
  67.         End Try
  68.     End Sub
  69.  
  70.     Private Sub ButtonProcesar_Click(sender As Object, e As RoutedEventArgs)
  71.         ' Según parece en una vuelta no lo asigna bien...
  72.         ' probemos con dos asignaciones a ver...
  73.         ' Aunque a veces pierde los datos del artista, etc.
  74.         ' (corregido en la clase MP3Info)
  75.  
  76.         lstFics.Items.Clear()
  77.         'For vez = 1 To 2
  78.         For Each s In fics
  79.             Dim sFic = System.IO.Path.GetFileName(s)
  80.             lblInfo.Text = "Procesando: " & sFic '& " (" & vez & ")"
  81.             If asignarTrack(s) Then
  82.                 lstFics.Items.Add(sFic)
  83.             End If
  84.         Next
  85.         'Next
  86.  
  87.         lblInfo.Text = "Procesados los ficheros .mp3"
  88.     End Sub
  89.  
  90.     Private Function asignarTrack(ByVal fic As String) As Boolean
  91.         ' Asignar el track number según el nombre del fichero
  92.         Try
  93.             mp3Inf.Filename = fic
  94.  
  95.             Dim asignado As Boolean = False
  96.             Dim sfile = System.IO.Path.GetFileNameWithoutExtension(fic)
  97.  
  98.             Dim i = sfile.IndexOf("-")
  99.             If i > -1 Then
  100.                 Dim j = sfile.IndexOf("-", i + 1)
  101.                 If j > -1 Then
  102.                     ' El número está entre los dos guiones
  103.                     Dim n As Integer = -1
  104.                     If Integer.TryParse(sfile.Substring(i + 1, j - i - 1), n) Then
  105.                         mp3Inf.ID3v1Tag.Track = CByte(n)
  106.                         asignado = True
  107.                     End If
  108.  
  109.                     ' El título estará desde el último guión hasta el final
  110.                     If chkTitle.IsChecked Then
  111.                         Dim sTitle = sfile.Substring(j + 1)
  112.                         If String.IsNullOrWhiteSpace(sTitle) = False Then
  113.                             mp3Inf.ID3v1Tag.Title = sTitle
  114.                             asignado = True
  115.                         End If
  116.                     End If
  117.                 End If
  118.             Else
  119.                 ' Si empieza con el número
  120.                 Dim n As Integer = -1
  121.                 Dim snum As String = ""
  122.                 For k = 0 To sfile.Length - 1
  123.                     If Char.IsDigit(sfile(k)) Then
  124.                         snum &= sfile(k)
  125.                     Else
  126.                         Exit For
  127.                     End If
  128.                 Next
  129.                 If String.IsNullOrEmpty(snum) = False Then
  130.                     If Integer.TryParse(snum, n) Then
  131.                         If n < 256 Then
  132.                             mp3Inf.ID3v1Tag.Track = CByte(n)
  133.                             asignado = True
  134.                         End If
  135.                     End If
  136.                 End If
  137.             End If
  138.  
  139.             If String.IsNullOrWhiteSpace(txtAlbum.Text) = False Then
  140.                 mp3Inf.ID3v1Tag.Album = txtAlbum.Text
  141.                 asignado = True
  142.             End If
  143.             If String.IsNullOrWhiteSpace(txtArtist.Text) = False Then
  144.                 mp3Inf.ID3v1Tag.Artist = txtArtist.Text
  145.                 asignado = True
  146.             End If
  147.  
  148.             If asignado Then
  149.                 mp3Inf.Update()
  150.                 Return True
  151.             Else
  152.                 Return False
  153.             End If
  154.  
  155.         Catch ex As Exception
  156. #If DEBUG Then
  157.             MessageBox.Show(ex.Message)
  158. #End If
  159.             Return False
  160.         End Try
  161.     End Function
  162.  
  163.     Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  164.         mp3Inf = New MP3Info
  165.     End Sub
  166. End Class
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top