Un po' di giorni fa' ero scarsamente disposto allo sforzo mentale e apatico a qualunque stimolo, senza alcuna voglia di aprire un terminale e ricordare il comando da lanciare per normalizzare un paio di tracce audio.
Poi penso che è arrivato il momento anche per l'utility mp3gain di essere inserita in uno script codato in python, un g-script, o gnome-script, o nautilus-script, insomma come vi pare!
Data la mia svogliatezza, la mente si rifiutava di concentrarsi. Dopo qualche minuto di tentennamento, piano piano riesco a stendere una bozza iniziale. Passano altri minuti e la bozza iniziale inizia a prendere la forma finale, fino a quando non inizia a fungere. Inizio a sistemare i dettagli e voilà lo script sembra essere terminato. Prende vita. È l'inizio della sua vita.
Purtroppo solo ad oggi ricevo il permesso dalla mia mente eccessivamente stressata di pubblicarlo. Ergo, non ho ricontrollato il codice, anche se brevissimo, sono di nuovo in stand by. Good night, good luck! ![]()
Lo battezzato GMP3gain: #! /usr/bin/env python # -*- coding: utf-8 -*- # # AUTHOR: Maurizio di NuvoleSparse # # License: GNU General Public version 2 or any later version. # This program comes with ABSOLUTELY NO WARRANTY; for details # see the COPYING file or visit "http://www.gnu.org/licenses/gpl.html". # This is free software, and you are welcome to redistribute it under # certain conditions. See the GPL license for details. # # Dependence: # mp3gain # python # zenity import os from sys import argv, exit from re import search, sub from commands import getstatusoutput if len(argv[1:]) == 0: os.system('zenity --title="Attenzione - gmp3gain" --error\ --text="Seleziona almeno un file."') exit(1) metodo = getstatusoutput('zenity --list --radiolist\ --width=450 --height=200 --title="gimageconvert"\ --text="Seleziona il metodo per normalizzare."\ --column=Selez. --column=metodo --column=descrizione\ false singoli "(applica automaticamente a tutti i file)"\ false album "(applica un unico livello a tutti i file)"\ false undo "(annulla la normalizzazione)"') if metodo[0] == 0 and metodo[1] == '': os.system('zenity --title="gmp3gain" --error\ --title="Attenzione" --text="Seleziona almeno un metodo."') count3 = count3 + 1 if count3 == 3: os.system('zenity --title="Errore - \ gmp3gain" --error --text="Odio girare in tondo! (Grrrrr)\nAddio! :-["') exit(1) elif metodo[0] == 256: exit(0) if metodo[1] == 'singoli': flags = '-r -k -p -q' elif metodo[1] == 'album': flags = '-a -k -p -q' elif metodo[1] == 'undo': flags = '-u -q' count = 1 while count < len(argv): if search(r"\.[mM][pP]3$", argv[count]): os.system("mp3gain "+flags+" \ '"+sub('\'', '\'\\\'\'', argv[count])+"' 2>>/tmp/gmp3gain.log") #QUOTING DEGLI APICI SINGOLI else: os.system('echo -e "Attenzione: \''+argv[count]+\ '\' non e\' un mp3." >>/tmp/gmp3gain.log') count = count + 1 if os.path.isfile("/tmp/gmp3gain.log") and \ os.path.getsize("/tmp/gmp3gain.log") != 0: os.system("cat /tmp/gmp3gain.log | zenity \ --title='Errore - gmp3gain' --text-info") os.remove("/tmp/gmp3gain.log") else: os.system('zenity --title="gmp3gain" --info\ --text="Lo script è terminato con successo."') exit(0)
Aggiornamento del 07 Agosto 2009
Nei giorni scorsi ho scovato una piccola-grande bega nei codice dello script in oggetto, ma non in diretto riferimento al codice python ma alla bash. La problematica si riferisce al quoting in singoli apici di nomi di file contententi la singola virgoletta. Il problema è stato risolto usando la backslash davanti alla singola virgoletta dopo averla estratta dal quoting, così facendo racchiudiamo solo, si fa' per dire, il resto dei caratteri tra i singoli apici. Ad esempio, il procedimento: “l” apostrofo “oggetto”, quindi “l'oggetto”, verrebbe quotato come 'l'\''oggetto'. Spero di essere stato abbastanza chiaro.