Advertisement
elGuille

Asignar Track Number (mp3) - MainWindows.vb

Mar 27th, 2013
435
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 5.75 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement