Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '------------------------------------------------------------------------------
- ' Asignar el número de pista a los ficheros mp3 (25/Mar/13)
- '
- ' ©Guillermo 'guille' Som, 2013
- '------------------------------------------------------------------------------
- Option Strict On
- Option Infer On
- Imports Asignar_MP3_Track_Number.elGuille.MP3
- Class MainWindow
- Private Sub ButtonCerrar_Click(sender As Object, e As RoutedEventArgs)
- Me.Close()
- End Sub
- Private mp3Inf As MP3Info
- ' OJO con estos cuadros de diálogo,
- ' ya que ShowDialog devuelve Boolean
- Private oFD As New Microsoft.Win32.OpenFileDialog
- Dim fics() As String
- Private Sub ButtonExaminar_Click(sender As Object, e As RoutedEventArgs)
- ' Seleccionar el directorio con los mp3 a procesar
- With oFD
- .FileName = txtDir.Text
- .Filter = "Ficheros mp3|*.mp3"
- .Multiselect = False
- .Title = "Seleccionar directorio con los ficheros mp3 a procesar"
- If .ShowDialog = True Then
- txtDir.Text = System.IO.Path.GetDirectoryName(.FileName)
- fics = System.IO.Directory.GetFiles(System.IO.Path.GetDirectoryName(.FileName), "*.mp3")
- lblInfo.Text = "Directorio con " & fics.Length & " ficheros .mp3"
- lstFics.Items.Clear()
- asignarDatos(.FileName)
- End If
- End With
- End Sub
- Private Sub asignarDatos(fic As String)
- txtArtist.Text = ""
- txtAlbum.Text = ""
- Try
- mp3Inf.Filename = fic
- txtArtist.Text = ("" & mp3Inf.ID3v1Tag.Artist).Trim()
- txtAlbum.Text = ("" & mp3Inf.ID3v1Tag.Album).Trim()
- Dim sfile = System.IO.Path.GetFileNameWithoutExtension(fic)
- Dim i = sfile.IndexOf("-")
- If i > -1 Then
- Dim j = sfile.IndexOf("-", i + 1)
- If j > -1 Then
- Dim sTitle = sfile.Substring(j + 1)
- If String.IsNullOrWhiteSpace(sTitle) = False Then
- 'mp3Inf.ID3v1Tag.Title = sTitle
- txtTitle.Text = sTitle
- End If
- End If
- End If
- Catch ex As Exception
- End Try
- End Sub
- Private Sub ButtonProcesar_Click(sender As Object, e As RoutedEventArgs)
- ' Según parece en una vuelta no lo asigna bien...
- ' probemos con dos asignaciones a ver...
- ' Aunque a veces pierde los datos del artista, etc.
- ' (corregido en la clase MP3Info)
- lstFics.Items.Clear()
- 'For vez = 1 To 2
- For Each s In fics
- Dim sFic = System.IO.Path.GetFileName(s)
- lblInfo.Text = "Procesando: " & sFic '& " (" & vez & ")"
- If asignarTrack(s) Then
- lstFics.Items.Add(sFic)
- End If
- Next
- 'Next
- lblInfo.Text = "Procesados los ficheros .mp3"
- End Sub
- Private Function asignarTrack(ByVal fic As String) As Boolean
- ' Asignar el track number según el nombre del fichero
- Try
- mp3Inf.Filename = fic
- Dim asignado As Boolean = False
- Dim sfile = System.IO.Path.GetFileNameWithoutExtension(fic)
- Dim i = sfile.IndexOf("-")
- If i > -1 Then
- Dim j = sfile.IndexOf("-", i + 1)
- If j > -1 Then
- ' El número está entre los dos guiones
- Dim n As Integer = -1
- If Integer.TryParse(sfile.Substring(i + 1, j - i - 1), n) Then
- mp3Inf.ID3v1Tag.Track = CByte(n)
- asignado = True
- End If
- ' El título estará desde el último guión hasta el final
- If chkTitle.IsChecked Then
- Dim sTitle = sfile.Substring(j + 1)
- If String.IsNullOrWhiteSpace(sTitle) = False Then
- mp3Inf.ID3v1Tag.Title = sTitle
- asignado = True
- End If
- End If
- End If
- Else
- ' Si empieza con el número
- Dim n As Integer = -1
- Dim snum As String = ""
- For k = 0 To sfile.Length - 1
- If Char.IsDigit(sfile(k)) Then
- snum &= sfile(k)
- Else
- Exit For
- End If
- Next
- If String.IsNullOrEmpty(snum) = False Then
- If Integer.TryParse(snum, n) Then
- If n < 256 Then
- mp3Inf.ID3v1Tag.Track = CByte(n)
- asignado = True
- End If
- End If
- End If
- End If
- If String.IsNullOrWhiteSpace(txtAlbum.Text) = False Then
- mp3Inf.ID3v1Tag.Album = txtAlbum.Text
- asignado = True
- End If
- If String.IsNullOrWhiteSpace(txtArtist.Text) = False Then
- mp3Inf.ID3v1Tag.Artist = txtArtist.Text
- asignado = True
- End If
- If asignado Then
- mp3Inf.Update()
- Return True
- Else
- Return False
- End If
- Catch ex As Exception
- #If DEBUG Then
- MessageBox.Show(ex.Message)
- #End If
- Return False
- End Try
- End Function
- Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
- mp3Inf = New MP3Info
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement