joombla Posted April 4, 2012 at 04:43 PM Report #447531 Posted April 4, 2012 at 04:43 PM Boas. Estou a fazer uma aplicação em VB.net para organizar músicas de karaoke (.mp3 + .cdg). Abre uma pasta com 1000 músicas e move-as para outra pasta com um ID. Ficando: 1.mp3, 1.cdg, 2.mp3, 2.cdg, ... (para depois, numa base de dados, ao pesquisar pela música aparecer o ID e abrir directamente no programa de KARAOKE) Mas, antes de alterar o nome para um ID, tenho que corrigir o título das músicas para gravar na base de dados o Cantor e o nome da Música, para mais tarde a localizar. Já meti a detectar as músicas de uma pasta e a mover para outra. O problema é que as músicas não têm todas o mesmo formato de nome. Exemplo: 56-Banda Eva - Arerê.mp3 56-Banda Eva - Arerê (1).cdg 240 - Timbaland, Keri Hilson & Nicole Scherzinger - Scream.cdg 240 - Timbaland, Keri Hilson & Nicole Scherzinger - Scream.mp3 U2 - I Still Haven't Found What I'm Looking For.cdg U2 - I Still Haven't Found What I'm Looking For (1).mp3 Algumas têm ID - ARTISTA - MUSICA - NUMERO outras não têm ID, outras não têm NUMERO, etc... Há uma maneira de brincar com a string do nome das mesmas, apagar o que vem antes do - e o que vem depois? Por exemplo: 56-Banda Eva - Arerê (1).cdg Detectar se a música tem {(1)}, se sim apagar. detectar de tem ID {56-} se sim apagar. E no resultado final ficar {Banda Eva - Arerê.cdg} Depois com esse resultado final já podia gravar o Cantor e o nome da música na base de dados, e então alterar o nome da música para o ID final. Bem, sei que é algo confuso, tentei explicar da melhor maneira. 😛
thoga31 Posted April 4, 2012 at 06:09 PM Report #447567 Posted April 4, 2012 at 06:09 PM É muito complicado controlar todas as situações possíveis. Podes criar um método de selecção e correcção automático para os casos mais comuns. Os restantes colocas à parte e crias um método em que o utilizador trata de corrigir manualmente. Sugestão: para um caso dito "normal", faz um Split da informação (nome do ficheiro) pelo caracter "-" e depois trata a informação que tens. Se é só número e foi o 1º, eliminas a informação. E por aí em diante. Neste caso tens de ser muito criativo para prever certas situações e padronizá-las, tratando as que estão conforme o previsto e dando as outras ao utilizador. Automatizar tudo é algo utópico - os nomes dos ficheiros podem aparecer de qualquer forma e feitio, é um pandemónio. Knowledge is free!
joombla Posted April 4, 2012 at 06:38 PM Author Report #447582 Posted April 4, 2012 at 06:38 PM Pois, já tinha pensado em algo do género: Ao fim de cada selecção ele pergunta ao utilizador se o Artista / Música estão correctos. Se não estiverem para editar manualmente. Vou criar uma espécie de filtro onde os títulos dos ficheiros vão passar e são modificados. Género: Se começar com {integer-}.... Se acabar em {(integer).cdg)}... O resultado final é mostrado para confirmação dos que passarem pelos filtros. Os que não passarem não altero nada, ficam na pasta sem serem movidas as músicas. O problema aqui vai ser que vou perder o .mp3 do .cdg porque um deles pode ficar para trás (não passa pelo filtro), mas isso depois penso numa alternativa. Até agora consegui filtrar o (1) final, mas mesmo assim isto não está em condições. Dim teste as string = "56-Banda Eva - Arerê (1).cdg" If teste.EndsWith("(1).cdg") Then teste = teste.Replace("(1).cdg", String.Empty).Trim msgbox (teste) '56-Banda Eva - Arerê End If O problema aqui é que pode ser (1) ou (2).cdg Já tentei algo como: teste = teste.Replace("(*).cdg", String.Empty).Trim Mas o * não funciona porque pensa que faz parte da string. Então tentei: teste = teste.Replace("("+*+").cdg", String.Empty).Trim Mas também não dá. Já não pegava em vb há algum tempo e de alterar strings nunca percebi muito. Quem me pode ajudar em strings? Obrigado. Só preciso algo do género: teste.Replace("(*).cdg", String.Empty).Trim
Andrepereira9 Posted April 4, 2012 at 07:38 PM Report #447588 Posted April 4, 2012 at 07:38 PM Boas Se o formato se mantiver conforme indicaste Banda Eva - Arerê.mp3 56-Banda Eva - Arerê.mp3Banda Eva - Arerê (1).cdg 56-Banda Eva - Arerê (1).cdg E se as repetidas variarem entre 1 e 2 tens aqui um exemplo que está a funcionar. Caso hajam mais numeros 3,4,5,... podes sempre utilizar um ciclo. O problema aqui é que pode ser (1) ou (2).cdg Dim inicial As String = "56 - Banda Eva - Arerê(1).cdg" Dim final As String Dim aux As Object = inicial.ToCharArray Dim num_tracos As Integer = 0 For Each item In aux If item = "-" Then num_tracos += 1 End If Next aux = inicial.Split("-") If num_tracos = 2 Then final = aux(1) & " - " & aux(2) Else final = aux(0) & " - " & aux(1) End If If final.EndsWith("(1).cdg") Then final = final.Replace("(1).cdg", String.Empty).Trim final &= inicial.Substring(inicial.Length - 4) ElseIf inicial.EndsWith("(2).cdg") Then final = final.Replace("(2).cdg", String.Empty).Trim final &= inicial.Substring(inicial.Length - 4) End If MsgBox(final) A informática chegou para resolver problemas que antes não existiam Quem ri por último é porque está conectado a 52 Kbs.
joombla Posted April 4, 2012 at 08:49 PM Author Report #447604 Posted April 4, 2012 at 08:49 PM Estive a testar com uns títulos que fui tirando e parece funcionar. Ainda não meti isto no código que já tinha, logo começo a trabalhar e quando estiver pronto venho aqui deixar feedback. Obrigado por me terem ajudado, não conseguia fazer isto, pelo menos assim. 😛
ribeiro55 Posted April 4, 2012 at 11:01 PM Report #447648 Posted April 4, 2012 at 11:01 PM Para os padrões que apresentas, deixo-te mais uma sugestão: Dim inicial As String = "56 - Banda Eva - Arerê(yeye)(2).cdg" Dim final As String = String.Empty Dim ext As String = inicial.Substring(inicial.LastIndexOf(".")) inicial = inicial.Replace(ext, "") inicial = inicial.Replace(" - ", "-").Replace("- ", "-").Replace(" -", "-") inicial = inicial.Replace("(", "-(").Replace(")", ")-") For Each P As String In inicial.Split("-") If P.Trim = String.Empty Then Continue For If P Like "(*)" And IsNumeric(P.Replace("(", "").Replace(")", "")) Then Continue For If IsNumeric(P) Then Continue For If final = String.Empty Then final &= P.Trim Else final &= " - " & P.Trim Next final = final.Replace(" - (", "(").Replace(") - ", ")") final &= ext Assenta muito na normalização. Depois de normalizar, actua. Limpa o sebo a qualquer ID e (numero), mas deixa intactos "outros tipos de parentesis", como o yeye ali no meu exemplo. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
joombla Posted April 5, 2012 at 12:43 AM Author Report #447658 Posted April 5, 2012 at 12:43 AM Com o código do Andrepereira9 de 1000 ficheiros, consegui mover uns 500 correctamente. Outros ficaram com erros estranhos género: 123-artista.mp3 em vez de artista-faixa.mp3 Acho que é porque algumas músicas na faixa têm mais um -, algo do género: 15 - artista - nome-da-musica.mp3 Ou seja, o nome da faixa já tem o -. Amanhã testo esse novo método. O mais provável é ter de pedir para confirmar cada uma das músicas manualmente (mostrando algumas informações como o artista e a faixa e pedir para confirmar ou alterar), porque como são muitos ficheiros diferentes o programa não consegue ter um padrão para todos. Mas como disse, não testei o ultimo código ainda. Desde já obrigado pela ajuda, amanhã já digo algo. 😛
HQuintas Posted April 5, 2012 at 10:11 AM Report #447685 Posted April 5, 2012 at 10:11 AM Não consegues arranjar uma base de dados com nomes de artistas? Assim conseguias fazer uma comparação e extrair da string o nome do artista.
joombla Posted April 5, 2012 at 11:18 AM Author Report #447709 Posted April 5, 2012 at 11:18 AM Não tenho nenhuma base de dados, mas também acho que não se justifica aqui. O objectivo era um programa simples que reparasse rapidamente as músicas. Ter de ir pesquisar cada uma delas a uma base de dados ia ser demorado e a base de dados podia nem ter todos os cantores e/ou músicas. Quanto ao código do ribeiro55 já implementei no programa e até agora parece funcionar. Ainda não testei com as 1000 músicas porque não tenho aqui a pasta, mas com os 10 exemplos que tenho aqui no computador não tive problemas. O código já é um bocado avançado para eu perceber e modificar, mas também não me parece que seja preciso. Vou criar o programa com 2 métodos: -um método automático que converte o título do mp3 e procura o respectivo cdg. Se não encontrar deixa os ficheiros na pasta sem os mover. -um método manual, que pergunta ao utilizador se as informações estão correctas e para ir buscar a localização do cdg. (para as músicas que não passarem no primeiro método) Bem, mais uma vez obrigado pelo código. Nunca estudei strings em visual basic e só sei as funções básicas. Penso que posso dar este tópico como resolvido. 😛 Editado: Programa acabado. Corrige o nome do cdg e do mp3, depois compara se o mp3 tem o cdg com o mesmo nome, se sim move para uma pasta e cria um ID, apontando também num txt. Com este método, de umas 1000 músicas ficam umas 20 para trás, o que não é nada mau. É só editar manualmente e inserir no txt.
mateusb Posted April 8, 2012 at 02:22 AM Report #448090 Posted April 8, 2012 at 02:22 AM não sei como detectar se há id na string, mas sei como facilmente retirar o que você quer. visite http://visualbandeira.blogspot.com.br/2012/02/como-editar-um-texto-da-textbox-extra.html
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now