Tube que fucionar la aplicacion (unir la ventana de "lista de reproduccion" con la ventana principal porque me saltaba errores en las librerias Visual C.
Este reproductor te da 9 listas para agregar musica y cambiar de lista para escuchar una diferente xD

#USE IN PYTHON 2.5.0
#Requiere PyWin32
#Numpy
#PyAudiere
#mutagen-1.20
#eyeD3-0.6.17
# -*- coding: utf-8 -*-
#CUH-F1Sound By Sokoleonardo
from Tkinter import *
from tkFont import Font
from sys import argv
from glob import glob
from tkFileDialog import askopenfilenames, askopenfilename, askdirectory
from tkMessageBox import showwarning, showerror
from os.path import splitext, getsize, splitdrive, exists
from os import getcwd
from eyeD3 import Mp3AudioFile
from mutagen.mp3 import EasyMP3, MPEGInfo
from time import clock
from random import randrange
from re import split
from cPickle import dump, load
from platform import system as OperatingSystem
try: from audiere import open_device
except: from audiere import open_device #pyaudiere falla al ser compilado a *.exe
#USE IN PYTHON 2.5.0
#Requiere PyWin32
#Numpy
#PyAudiere
#mutagen-1.20
#eyeD3-0.6.17
OpenerAudio = open_device()
if not exists("SAVE.CUH-F1Sound"):
#Estos datos deben existir en un archivo (datos por defecto)
FILE = open("SAVE.CUH-F1Sound", "w")
dump([[40,100,0], [0,1,0], [[],[],[],[],[],[],[],[],[]], ["1",0], "600x375+230+230", 0], FILE)
FILE.close()
# ->> [volume, tone, balanc], [buttonCheck1,buttonCheck2, buttonCheck3], [listadosDirS], [listSeleccionada, trackActual], [geometryWindow], [intposttrack]
def EyeD3Data(filename):
tag = Mp3AudioFile(filename)
cifra1, cifra2 = str(getsize(filename) / 1024.0 / 1024.0).split(".")
MB = cifra1+"." + (cifra2[1] if len(cifra2) < 2 else cifra2[:2]) + "MB"
Freq = str(tag.getSampleFreq()/1000)+"KHz"
return tag.getPlayTime(), tag.getBitRateString(), Freq, MB, tag.getPlayTimeString()
def MutagenData(filename):
try:
tag = EasyMP3(filename)
artista = tag["artist"][0] if tag.has_key("artist") else "N/A" #0
titulo = tag["title"][0] if tag.has_key("title") else "N/A" #1
NameTrack = artista+" - "+titulo if artista!="N/A" and titulo!="N/A" else splitext(split("[\\\/]", filename)[-1])[0]#2
album = tag["album"][0] if tag.has_key("album") else "N/A" #3
genero = tag["genre"][0] if tag.has_key("genre") else "N/A" #4
anyo = tag["date"][0] if tag.has_key("date") else "N/A" #5
return artista, titulo, NameTrack, album, genero, anyo
except: return ("Error",) * 6
def GetTimeNormalTrack(inSegs):
"""enconvert segs 377 to 06:17
>>> GetTimeNormalTrack(3600) #1 HS
1:00:00"""
hours = 0
mins = 0
segs = 0
for i in range(int(inSegs)):
segs += 1
if segs > 59:
segs = 0
mins += 1
if mins > 59:
mins = 0
hours += 1
return (str(hours)+":" if hours != 0 else "")+(str(mins) if mins > 9 else "0"+str(mins))+":"+(str(segs) if segs > 9 else "0"+str(segs))
def LightButton(button, colorON, colorOFF):
def ON(*e):
button["bg"] = colorON
button.bind("<Enter>", ON)
def OFF(*e):
button["bg"] = colorOFF
button.bind("<Leave>", OFF)
def LauncherError(FileFail):
textError = '''
Se produjo un error dado las siguientes posibilidades:
1 - El archivo ya no existe.
2 - El nombre del archivo contiene caracteres como: Ññ´. etc.
3 - El archivo no puede ser leido por PyAudiere.
4 - El archivo es corrupto o vacio.
Porfavor abra otro *.mp3 y no el archivo:
"'''+FileFail+'"\n\nGracias.'
showwarning("Error en CUH-F1Sound", textError)
class ListReproductions:
"""Methods of List Right"""
def ActualizationSizeWin(self):
listaDir = eval("self.List"+self.ListSelectActual)
if listaDir:
cantidad = str(len(listaDir))
tamanyo = 0
for bytes in [getsize(mp3) for mp3 in listaDir]:
tamanyo += bytes
segundos = 0
for segs in [EyeD3Data(mp3)[0] for mp3 in listaDir]:
segundos += segs
duracion = GetTimeNormalTrack(segundos)
cifra1, cifra2 = str(tamanyo / 1024.0 / 1024.0).split(".")
TamanioMemoria = ("MB: " if int(cifra1) < 1000 else "GB: ")+(cifra1 if int(cifra1) < 1000 else str(int(cifra1)/1000))+"." + (cifra2[0] if len(cifra2) < 2 else cifra2[:2])
self.ResultSizeList["text"] = "Pistas: "+str(cantidad)+", "+TamanioMemoria+", Duracion: "+duracion
else:
self.ResultSizeList["text"] = "Pistas: 0, MB: 0.00, Duracion: 00:00"
def ActivateTrackInList(self, *e):
select = self.ListTracks.curselection()
if len(select) == 1:
if self.SelectActualTrack[1] == self.ListSelectActual:
self.ListTracks.itemconfig(self.SelectActualTrack[0], fg="red")
self.ListTracks.itemconfig(select, fg="#009600")
self.SelectActualTrack = [int(select[0]), self.ListSelectActual]
self.RenameSound(1)
def ActualizationTaggerReport(self, *e):
FileSelect = eval("self.List"+self.ListSelectActual)[int(self.SelectActualTrack[0])]
Dates = MutagenData(FileSelect)
DatesTamanyo = EyeD3Data(FileSelect)
self.TituloDeNombre["text"] = "Grupo: "+Dates[0]
self.TituloDeCancion["text"] = "Cancion: "+Dates[1]
self.TituloDeAlbum["text"] = "Album: "+Dates[3]
self.TituloDeGenero["text"] = "Genero: "+Dates[4]
self.TituloAnyo["text"] = "Edad: "+Dates[5]
self.TituloTamanyos["text"] = "Tamaños: "+str(DatesTamanyo[4])+", "+str(DatesTamanyo[1])+", "+DatesTamanyo[2]+", "+str(DatesTamanyo[3])
FILEOBJ = file(FileSelect)
self.ventana.title("CUH-F1Sound :: "+MPEGInfo(FILEOBJ).pprint())
FILEOBJ.close()
def Change(self, numL):
ColorListaDejada = eval("self.List"+self.ListSelectActual+"_Button")
ColorListaDejada["fg"] = "black"
self.ListTracks.delete(0, "end")
self.ListSelectActual = numL
numTrack = 1
for track in eval("self.List"+numL):
self.ListTracks.insert("end", str(numTrack)+" - "+MutagenData(track)[2])
numTrack+=1
ColorListaActual = eval("self.List"+numL+"_Button")
ColorListaActual["fg"] = "#009600"
if self.SelectActualTrack[1] == numL and self.ListTracks.size():
self.ListTracks.itemconfig(int(self.SelectActualTrack[0]), fg="#009600")
self.ActualizationSizeWin()
def ChangeL1(self):
self.Change("1")
def ChangeL2(self):
self.Change("2")
def ChangeL3(self):
self.Change("3")
def ChangeL4(self):
self.Change("4")
def ChangeL5(self):
self.Change("5")
def ChangeL6(self):
self.Change("6")
def ChangeL7(self):
self.Change("7")
def ChangeL8(self):
self.Change("8")
def ChangeL9(self):
self.Change("9")
def RemoveSoundSelect(self, *e):
"""Remove pistas de la lista (1 o mas dependiendo de la cantidad seleccionada)"""
select = list(self.ListTracks.curselection())
if select:
self.ListTracks.delete(select[0], select[-1])
select.reverse()
for index in select:
del eval("self.List"+self.ListSelectActual)[int(index)]
if int(index) < self.SelectActualTrack[0]:
self.SelectActualTrack[0] -= 1
self.Change(self.ListSelectActual)
self.ActualizationSizeWin()
def RemoveSoundDouble(self, *e):
"""Elimina los sonidos repetidos en la lista"""
List = list(set(eval("self.List"+self.ListSelectActual)))
diference = eval("self.List"+self.ListSelectActual).__len__() - List.__len__()
self.ListTracks.delete(0,"end")
del eval("self.List"+self.ListSelectActual)[0:]
for track in List:
eval("self.List"+self.ListSelectActual).append(track)
self.SelectActualTrack[0] -= diference
if self.SelectActualTrack[0] < 0: self.SelectActualTrack[0] = 0
self.Change(self.ListSelectActual)
self.ActualizationSizeWin()
def RemoveAllSounds(self):
self.ListTracks.delete(0,"end")
del eval("self.List"+self.ListSelectActual)[0:]
self.ActualizationSizeWin()
#####LOAD#####
FILE = open("SAVE.CUH-F1Sound", "r")
DATA_SAVE = load(FILE)
DATA_SCALES = DATA_SAVE[0]
DATA_BUTTONS = DATA_SAVE[1]
DATA_LISTS = DATA_SAVE[2]
DATA_SELECTS = DATA_SAVE[3]
DATA_GEOMETRY = DATA_SAVE[4]
DATA_POSITION_TRACK = DATA_SAVE[5]
FILE.close()
###END_LOAD###
class Body_Master(ListReproductions):
def __init__(self):
self.ventana = Tk()
self.ventana.geometry(DATA_GEOMETRY)
self.ventana.title("CUH-F1Sound :: Teclea F1 para informacion")
self.ventana.resizable(False, False)
fontSpecial = Font(size=8, weight="bold")
fontTitles = Font(size=10, weight="bold", underline=True)
icon = "iconHeavy"+(".ico" if OperatingSystem() == "Windows" else ".png")
try:
self.ventana.iconbitmap(icon)
ICON_ERROR = False
except: ICON_ERROR = True
self.GeometryWin = self.ventana.geometry()
self.Track = None
self.BoolMovePosition = False
self.fondo = Frame(self.ventana, bg="gray70", width=300, height=375)
self.fondo.place(x=0, y=0)
self.MarcoBotonesClip = Frame(self.fondo, bg="gray80", width=300, height=50)
self.MarcoBotonesClip.place(x=0,y=0)
self.BotonPlay = Button(self.MarcoBotonesClip, bg="gray40", activebackground="gray30", text="►", font=("Lucida","20"), command=self.PlayMP3)
self.BotonPlay.place(x=0,y=0, width=50, height=50)
self.BotonPausa = Button(self.MarcoBotonesClip, bg="gray40", activebackground="gray30", text="▌▐", font=("Lucida","20"), command=self.PauseMP3)
self.BotonPausa.place(x=50,y=0, width=50, height=50)
self.BotonDetener = Button(self.MarcoBotonesClip, bg="gray40", activebackground="gray30", text="██", font=("Lucida","14"), command=self.StopMP3)
self.BotonDetener.place(x=100,y=0, width=50, height=50)
self.BotonPistaArriba = Button(self.MarcoBotonesClip, bg="gray40", activebackground="gray30", text="|▐◄", font=("Lucida","14"), command=self.ChangeTrackUp)
self.BotonPistaArriba.place(x=150,y=0, width=50, height=50)
self.BotonPistaAbajo = Button(self.MarcoBotonesClip, bg="gray40", activebackground="gray30", text="►▌|", font=("Lucida","14"), command=self.ChangeTrackDown)
self.BotonPistaAbajo.place(x=200,y=0, width=50, height=50)
self.BotonAbrirPistaS = Button(self.MarcoBotonesClip, bg="gray40", activebackground="gray30", text="▲\n▬", font=("Lucida","14"), command=self.OpenSoundsFromDisk)
self.BotonAbrirPistaS.place(x=250,y=0, width=50, height=50)
self.ScalaVolumen = Scale(self.fondo, bg="gray50", length=89, highlightbackground="red", showvalue=False, orient="horizontal", repeatinterval=2, tickinterval=50, troughcolor="gray70", activebackground="gray20", sliderlength=15, font=fontSpecial, command=self.ControlVolumen)
self.ScalaVolumen.place(x=2, y=52, width=97, height=61)
self.ScalaVolumen.set(DATA_SCALES[0])
self.ScalaTone = Scale(self.fondo, bg="gray50", length=89, highlightbackground="red", showvalue=False, orient="horizontal", repeatinterval=2, tickinterval=50, troughcolor="gray70", activebackground="gray20", sliderlength=15, font=fontSpecial, command=self.ControlTone)
self.ScalaTone.place(x=101, y=52, width=97, height=61)
self.ScalaTone.set(DATA_SCALES[1])
self.ScalaBalance = Scale(self.fondo, bg="gray50", length=89, highlightbackground="red", showvalue=False, orient="horizontal", repeatinterval=2, tickinterval=100, troughcolor="gray70", activebackground="gray20", sliderlength=15, font=fontSpecial, command=self.ControlBalance)
self.ScalaBalance.place(x=200, y=52, width=97, height=61)
self.ScalaBalance["from"] = -100
self.ScalaBalance["to"] = 100
self.ScalaBalance.set(DATA_SCALES[2])
self.ScalaPosicion = Scale(self.fondo, bg="gray50", length=287, highlightbackground="red", showvalue=False, orient="horizontal", repeatinterval=2, troughcolor="gray70", activebackground="gray20", to=0, font=fontSpecial, command=self.ControlPosicion)
self.ScalaPosicion.place(x=2, y=115, width=295, height=62)
self.NombreAudio = Label(self.ScalaPosicion, bg="gray50", text=OpenerAudio.name, font=fontSpecial)
self.NombreAudio.place(x=170, y=38, height=15)
self.BordeInforme = Frame(self.fondo, bg="red")
self.BordeInforme.place(x=2, y=179, width=295, height=139)
self.Informe = Frame(self.fondo, bg="gray50")
self.Informe.place(x=4, y=181, width=291, height=135)
self.TituloInforme = Label(self.Informe, bg="gray50", text="Informe", font=fontTitles)
self.TituloInforme.place(x=110, y=-4, width=70)
self.TituloDeNombre = Label(self.Informe, bg="gray50", text="Grupo:", font=fontSpecial)
self.TituloDeNombre.place(x=6, y=15)
self.TituloDeCancion = Label(self.Informe, bg="gray50", text="Canción:", font=fontSpecial)
self.TituloDeCancion.place(x=6, y=35)
self.TituloDeAlbum = Label(self.Informe, bg="gray50", text="Album:", font=fontSpecial)
self.TituloDeAlbum.place(x=6, y=55)
self.TituloDeGenero = Label(self.Informe, bg="gray50", text="Genero:", font=fontSpecial)
self.TituloDeGenero.place(x=6, y=75)
self.TituloAnyo = Label(self.Informe, bg="gray50", text="Edad:", font=fontSpecial)
self.TituloAnyo.place(x=6, y=95)
self.TituloTamanyos = Label(self.Informe, bg="gray50", text="Tamaños:", font=fontSpecial)
self.TituloTamanyos.place(x=6, y=115)
self.BordeOpciones = Frame(self.fondo, bg="red", width=295, height=51)
self.BordeOpciones.place(x=2, y=321)
self.Opciones = Frame(self.fondo, bg="gray50", width=291, height=47)
self.Opciones.place(x=4, y=323)
self.TituloOpciones = Label(self.Opciones, bg="gray50", text="Opciones de pista", font=fontTitles)
self.TituloOpciones.place(x=85, y=-4, width=120)
self.IntRepetir = IntVar(value=DATA_BUTTONS[0])
self.BotonCheckRepeatTrack = Checkbutton(self.Opciones, text="Repetir Pista", bg="gray40", selectcolor="gray70", activebackground="gray60", fg="blue", relief="ridge", variable=self.IntRepetir, command=self.CheckRepeat)
self.BotonCheckRepeatTrack.place(x=4, y=25, width=85, height=20)
self.IntChangeAutoDown = IntVar(value=DATA_BUTTONS[1])
self.BotonCheckChangeAutoDown = Checkbutton(self.Opciones, text="Cambiar Debajo", bg="gray40", selectcolor="gray70", activebackground="gray60", fg="blue", relief="ridge", variable=self.IntChangeAutoDown, command=self.CheckChangeDown)
self.BotonCheckChangeAutoDown.place(x=91, y=25, width=115, height=20)
self.IntChangeRandom = IntVar(value=DATA_BUTTONS[2])
self.BotonCheckChangeRandom = Checkbutton(self.Opciones, text="Cambio rnd", bg="gray40", selectcolor="gray70", activebackground="gray60", fg="blue", relief="ridge", variable=self.IntChangeRandom, command=self.CheckChangeRandom)
self.BotonCheckChangeRandom.place(x=208, y=25, width=80, height=20)
for optbutton in (self.BotonCheckRepeatTrack, self.BotonCheckChangeAutoDown, self.BotonCheckChangeRandom):
LightButton(optbutton, "gray50", "gray40")
for button in (self.BotonPlay, self.BotonPausa, self.BotonDetener, self.BotonPistaArriba, self.BotonPistaAbajo, self.BotonAbrirPistaS):
LightButton(button, "gray50", "gray40")
#--------Lista a la derecha--------:
self.Dibujos = Canvas(self.ventana, bg="gray50", highlightbackground="gray70")
self.Dibujos.place(x=300,y=0, width=300, height=375)
for y in range(0, 375, 5):#dibuja lineas hasta el final de la ventana
self.Dibujos.create_line(0,y, 300,y, fill="gray", tags="ListLines")
self.List1 = DATA_LISTS[0]
self.List2 = DATA_LISTS[1]
self.List3 = DATA_LISTS[2]
self.List4 = DATA_LISTS[3]
self.List5 = DATA_LISTS[4]
self.List6 = DATA_LISTS[5]
self.List7 = DATA_LISTS[6]
self.List8 = DATA_LISTS[7]
self.List9 = DATA_LISTS[8]
self.ListSelectActual = DATA_SELECTS[0]
self.List1_Button = Button(self.ventana, text="L1", bg="gray80", relief="solid", activebackground="gray15", font="system", command=self.ChangeL1)
self.List1_Button.place(x=315, y=10, width=30, height=20)
self.List2_Button = Button(self.ventana, text="L2", bg="gray80", relief="solid", activebackground="gray15", font="system", command=self.ChangeL2)
self.List2_Button.place(x=345, y=10, width=30, height=20)
self.List3_Button = Button(self.ventana, text="L3", bg="gray80", relief="solid", activebackground="gray15", font="system", command=self.ChangeL3)
self.List3_Button.place(x=375, y=10, width=30, height=20)
self.List4_Button = Button(self.ventana, text="L4", bg="gray80", relief="solid", activebackground="gray15", font="system", command=self.ChangeL4)
self.List4_Button.place(x=405, y=10, width=30, height=20)
self.List5_Button = Button(self.ventana, text="L5", bg="gray80", relief="solid", activebackground="gray15", font="system", command=self.ChangeL5)
self.List5_Button.place(x=435, y=10, width=30, height=20)
self.List6_Button = Button(self.ventana, text="L6", bg="gray80", relief="solid", activebackground="gray15", font="system", command=self.ChangeL6)
self.List6_Button.place(x=465, y=10, width=30, height=20)
self.List7_Button = Button(self.ventana, text="L7", bg="gray80", relief="solid", activebackground="gray15", font="system", command=self.ChangeL7)
self.List7_Button.place(x=495, y=10, width=30, height=20)
self.List8_Button = Button(self.ventana, text="L8", bg="gray80", relief="solid", activebackground="gray15", font="system", command=self.ChangeL8)
self.List8_Button.place(x=525, y=10, width=30, height=20)
self.List9_Button = Button(self.ventana, text="L9", bg="gray80", relief="solid", activebackground="gray15", font="system", command=self.ChangeL9)
self.List9_Button.place(x=555, y=10, width=30, height=20)
self.ListTracks = Listbox(self.ventana, bg="gray10", fg="red", highlightbackground="red", font=fontSpecial, selectforeground="blue")
self.ListTracks.place(x=310, y=40, width=280, height=230)
self.scrollListY = Scrollbar(self.ListTracks, command=self.ListTracks.yview)
self.scrollListY.pack(side="right", fill="y")
self.ListTracks.configure(yscrollcommand=self.scrollListY.set)
self.BaseButtons = Canvas(self.ventana, bg="gray70", relief="ridge", highlightbackground="red")
self.BaseButtons.place(x=310, y=281, width=280, height=90)
self.ButtonOpenTracks = Button(self.ventana, text="+Abrir archivos", bg="gray50", fg="blue", activebackground="gray35", font=fontSpecial, overrelief="ridge", command=self.OpenSoundsFromDisk)
self.ButtonOpenTracks.place(x=314, y=285, width=89, height=20)
self.ButtonOpenTrack = Button(self.ventana, text="+Abrir archivo", bg="gray50", fg="blue", activebackground="gray35", font=fontSpecial, overrelief="ridge", command=self.OpenSoundFromDisk)
self.ButtonOpenTrack.place(x=405, y=285, width=89, height=20)
self.ButtonOpenPath = Button(self.ventana, text="+Abrir carpeta", bg="gray50", fg="blue", activebackground="gray35", font=fontSpecial, overrelief="ridge", command=self.OpenDirectory)
self.ButtonOpenPath.place(x=496, y=285, width=89, height=20)
self.ButtonDelSelectTrack = Button(self.ventana, text="- Eliminar", bg="gray50", fg="red", activebackground="gray35", font=fontSpecial, overrelief="ridge", command=self.RemoveSoundSelect)
self.ButtonDelSelectTrack.place(x=314, y=307, width=89, height=20)
self.ButtonDelRepetingsTracks = Button(self.ventana, text="- Repetido", bg="gray50", fg="red", activebackground="gray35", font=fontSpecial, overrelief="ridge", command=self.RemoveSoundDouble)
self.ButtonDelRepetingsTracks.place(x=405, y=307, width=89, height=20)
self.ButtonDelAllTracks = Button(self.ventana, text="- Todos", bg="gray50", fg="red", activebackground="gray35", font=fontSpecial, overrelief="ridge", command=self.RemoveAllSounds)
self.ButtonDelAllTracks.place(x=496, y=307, width=89, height=20)
self.ResultSizeList = Label(self.ventana, bg="gray40", fg="gold", relief="sunken", font=fontSpecial, text="Pistas: 0, MB: 0.00, Duracion: 00:00")
self.ResultSizeList.place(x=313, y=350, width=275)
for ButtonOpt in (self.ButtonOpenTracks, self.ButtonOpenTrack, self.ButtonOpenPath, self.ButtonDelSelectTrack, self.ButtonDelRepetingsTracks, self.ButtonDelAllTracks):
LightButton(ButtonOpt, "gray60", "gray50")
self.ListTracks.bind("<Double-Button-1>", self.ActivateTrackInList)
self.ventana.bind("<KeyPress-Return>", self.ActivateTrackInList)
for buttonL in range(1,10):
LightButton(eval("self.List"+str(buttonL)+"_Button"), "gray90", "gray80")
self.SelectActualTrack = [DATA_SELECTS[1], self.ListSelectActual]
self.Change(self.ListSelectActual)
#Elegir varius elementos de la lista pero con el boton "shift" apretado:
def Press(*e):
self.ListTracks["selectmode"] = "extended"
def DePress(*e):
self.ListTracks["selectmode"] = "single"
self.ventana.bind("<KeyPress-Shift_L>", Press)
self.ventana.bind("<KeyRelease-Shift_L>", DePress)
self.ventana.bind("<KeyPress-Shift_R>", Press)
self.ventana.bind("<KeyRelease-Shift_R>", DePress)
self.ventana.bind("<Destroy>", self.SaveAndExit)
#remover track en lista con la tecla suprimir:
self.ventana.bind("<KeyPress-Delete>", self.RemoveSoundSelect)
## System of Track UUuuuuuuuuuuuuuuu..
self.IntVolume = self.ScalaVolumen.get()
self.IntTone = self.ScalaTone.get()
self.IntBalance = self.ScalaBalance.get()
self.IntPosition = DATA_POSITION_TRACK
self.RelojContador = clock()
self.ventana.after(100, self.MovePosition)
self.ventana.after(100, self.ViewStateTrack)
self.ventana.bind("<Configure>", self.CaptureGeometryWin)
self.ventana.bind("<Up>", self.UpVolume)
self.ventana.bind("<Down>", self.DownVolume)
self.ventana.bind("<Right>", self.RightPosition)
self.ventana.bind("<Left>", self.LeftPosition)
#Revisar si el icono del programa se encuentra:
def CheckError():
if ICON_ERROR:
if exists(icon):
TextErrorIcon = '"'+getcwd()+'\\'+icon+'" es corrupto.'
else:
TextErrorIcon = '"'+getcwd()+'\\'+icon+'" no existe.'
showerror("CUH-F1Sound - error", TextErrorIcon)
self.ventana.after(2000, CheckError)
#Abrir ventana de informacion sobre el autor: Sokoleonardo
self.AboutON = True
self.ventana.bind("<F1>", self.AboutInfo)
self.LoadTrackPlaying(1)
def LoadTrackPlaying(self, play=True):
if self.ListTracks.size():
FileSelect = eval("self.List"+self.ListSelectActual)[int(self.SelectActualTrack[0])]
try:
self.Track = OpenerAudio.open_file(FileSelect, True)
self.CheckValsAudio(False)
self.ScalaPosicion["to"] = EyeD3Data(FileSelect)[0]
self.ScalaPosicion.set(DATA_POSITION_TRACK)
self.ActualizationTaggerReport()
if play: self.PlayMP3()
self.SetPosition()
except:
LauncherError(FileSelect)
self.ventana.mainloop()
def ViewStateTrack(self):#esta funcion revisa las opciones de track
self.ventana.after(1000, self.ViewStateTrack)
if self.Track:
if self.Track.position == 0 and not self.Track.playing:
if self.IntRepetir.get():
self.StopMP3("NotTitle")
self.PlayMP3()
elif self.IntChangeAutoDown.get():
self.ChangeTrackDown()
elif self.IntChangeRandom.get():
self.ChangeTrackRandom()
def CheckRepeat(self):
if self.IntRepetir.get():
(self.IntChangeAutoDown.set(0), self.IntChangeRandom.set(0))
def CheckChangeDown(self):
if self.IntChangeAutoDown.get():
(self.IntRepetir.set(0), self.IntChangeRandom.set(0))
def CheckChangeRandom(self):
if self.IntChangeRandom.get():
(self.IntRepetir.set(0), self.IntChangeAutoDown.set(0))
def PlayMP3(self, *e):
if self.Track:
self.CheckValsAudio(False)
if self.Track.playing:
self.ScalaPosicion.set(0)
self.Track.reset()
else:
self.Track.play()
else:
if self.ListTracks.size():
self.RenameSound(1)
def PauseMP3(self, *e):
if self.Track:
if self.Track.playing:
self.Track.pause()
else:
self.PlayMP3()
def StopMP3(self, *e):
if self.Track:
self.Track.stop()
self.Track = None
self.ScalaPosicion["to"] = 0
if not e:
self.ventana.title("CUH-F1Sound :: Teclea F1 para informacion")
elif e:
if e[0] != "NotTitle":
self.ventana.title("CUH-F1Sound :: Teclea F1 para informacion")
def ChangeTrackUp(self, *e):
if self.ListTracks.size():
ActualSelect = int(self.SelectActualTrack[0])
if self.SelectActualTrack[1] != self.ListSelectActual: ActualSelect = 0
select = ActualSelect-1 if ActualSelect > 0 else self.ListTracks.size()-1
self.ListTracks.itemconfig(ActualSelect, fg="red")
self.ListTracks.itemconfig(select, fg="#009600")
self.SelectActualTrack[0] = select
self.SelectActualTrack[1] = self.ListSelectActual
self.RenameSound(1)
def ChangeTrackDown(self, *e):
if self.ListTracks.size():
ActualSelect = int(self.SelectActualTrack[0])
if self.SelectActualTrack[1] != self.ListSelectActual: ActualSelect = 0
if ActualSelect == self.ListTracks.size()-1: ActualSelect = 0
select = ActualSelect+1 if self.ListTracks.size()-1 else 0
self.ListTracks.itemconfig(ActualSelect, fg="red")
self.ListTracks.itemconfig(select, fg="#009600")
self.SelectActualTrack[0] = select
self.SelectActualTrack[1] = self.ListSelectActual
self.RenameSound(1)
def ChangeTrackRandom(self, *e):
if self.ListTracks.size():
ActualSelect = int(self.SelectActualTrack[0])
if self.SelectActualTrack[1] != self.ListSelectActual: ActualSelect = 0
else:
self.ListTracks.itemconfig(ActualSelect, fg="red")
select = randrange(0, self.ListTracks.size())
while select == ActualSelect:
select = randrange(0, self.ListTracks.size())
if self.ListTracks.size() < 2:
break
self.ListTracks.itemconfig(select, fg="#009600")
self.SelectActualTrack[0] = select
self.SelectActualTrack[1] = self.ListSelectActual
self.RenameSound(1)
def RenameSound(self, play=True):
if self.ListTracks.size():
FileSelect = eval("self.List"+self.ListSelectActual)[int(self.SelectActualTrack[0])]
try:
self.Track = OpenerAudio.open_file(FileSelect, True)
self.CheckValsAudio(False)
self.ScalaPosicion["to"] = EyeD3Data(FileSelect)[0]
self.ScalaPosicion.set(0)
self.ControlPosicion()
self.ActualizationTaggerReport()
if play: self.PlayMP3()
except:
LauncherError(FileSelect)
self.ventana.mainloop()
def CheckValsAudio(self, position):
if self.Track:
self.IntVolume = self.ScalaVolumen.get()
self.IntTone = self.ScalaTone.get()
self.IntBalance = self.ScalaBalance.get()
self.IntPosition = self.ScalaPosicion.get()
self.Track.volume = self.IntVolume / 100.0
self.Track.pitchshift = self.IntTone / 100.0
self.Track.pan = self.IntBalance / 100.0
if position:
self.Track.position = self.IntPosition
def SetVolume(self, *e):
if self.Track:
self.IntVolume = self.ScalaVolumen.get()
self.Track.volume = self.IntVolume / 100.0
def SetTone(self, *e):
if self.Track:
self.IntTone = self.ScalaTone.get()
self.Track.pitchshift = self.IntTone / 100.0
def SetBalance(self, *e):
if self.Track:
self.IntBalance = self.ScalaBalance.get()
self.Track.pan = self.IntBalance / 100.0
def SetPosition(self):
if self.Track:
pos = self.Track.length / self.ScalaPosicion["to"]
self.Track.position = self.ScalaPosicion.get() * pos
def UpVolume(self, *e):
self.ScalaVolumen.set(self.ScalaVolumen.get()+2)
def DownVolume(self, *e):
self.ScalaVolumen.set(self.ScalaVolumen.get()-2)
def RightPosition(self, *e):
self.ScalaPosicion.set(self.ScalaPosicion.get()+2)
def LeftPosition(self, *e):
self.ScalaPosicion.set(self.ScalaPosicion.get()-2)
def OpenSoundsFromDisk(self):
RouteMP3 = askopenfilenames(title="Abrir mas de un archivo", initialdir=splitdrive(argv[0])[0]+"\\", filetypes = (("Sounds","*.mp3"),))
if RouteMP3:
for track in RouteMP3:
eval("self.List"+self.ListSelectActual).append(track)
self.Change(self.ListSelectActual)
def OpenSoundFromDisk(self):
RouteMP3 = askopenfilename(title="Abrir un solo archivo", initialdir = splitdrive(argv[0])[0]+"\\", filetypes = (("Sound","*.mp3"),))
if RouteMP3:
eval("self.List"+self.ListSelectActual).append(RouteMP3)
self.Change(self.ListSelectActual)
def OpenDirectory(self):
RoutePath = askdirectory(title = "Carpeta junto con sus subcarpetas", initialdir = splitdrive(argv[0])[0]+"\\")
if RoutePath:
def Searcher(path):
path = [path]
for nwpath in path:
for file in glob(nwpath+"*.mp3"):
yield file
for otherpath in glob(nwpath+"*\\"):
path.append(otherpath)
for Mp3 in Searcher(RoutePath):
eval("self.List"+self.ListSelectActual).append(Mp3)
self.Change(self.ListSelectActual)
def MovePosition(self, *e):
self.ventana.after(10, self.MovePosition)
if self.Track:
if self.Track.playing:
if clock() - 1 > self.RelojContador:
self.RelojContador = clock()
def Volver():
self.BoolMovePosition = True
self.BoolMovePosition = False
self.ScalaPosicion.set(self.ScalaPosicion.get()+1)
self.ventana.after(4, Volver)
def ControlVolumen(self, *e):
self.ScalaVolumen["label"] = "Volumen: "+str(self.ScalaVolumen.get())+"%"
self.SetVolume()
def ControlTone(self, *e):
self.ScalaTone["label"] = "Tono: "+str(self.ScalaTone.get())+"%"
self.SetTone()
def ControlBalance(self, *e):
Salida = self.ScalaBalance.get()
if Salida == 0:
Frase = "Cent"
elif Salida == -100:
Frase = "Izq"
elif Salida == 100:
Frase = "Der"
else:
Frase = self.ScalaBalance.get()
self.ScalaBalance["label"] = "Balance: "+str(Frase)
self.SetBalance()
def ControlPosicion(self, *e):
self.ScalaPosicion["label"] = "Tiempo: "+GetTimeNormalTrack(self.ScalaPosicion.get()) +" / "+ GetTimeNormalTrack(self.ScalaPosicion["to"])
self.IntPosition = self.ScalaPosicion.get()
if self.BoolMovePosition:
self.SetPosition()
def CaptureGeometryWin(self, *e):
self.GeometryWin = self.ventana.geometry()
def AboutInfo(self, *e):
if self.AboutON:
self.AboutON = False
def ExitAbout(*e):
self.AboutON = True
ventana.destroy()
ventana = Tk()
icon = "iconHeavy"+(".ico" if OperatingSystem() == "Windows" else ".png")
try: ventana.iconbitmap(icon)
except: pass
ventana.title("CUH-F1Sound :: Informacion...")
ventana.geometry("300x270+%d+%d" % (self.ventana.winfo_x()+150, self.ventana.winfo_y()+80))
ventana.resizable(False, False)
Frame(ventana, bg="gray").place(x=0, y=0, width=300, height=270)
Label(ventana, bg="gray", fg="red", text="v1.0.0", font="system").place(x=250, y=0)
Label(ventana, bg="gray", fg="blue", text=".::CUH-F1Sound::.", font=("small fonts", 19)).place(x=50, y=10, width=200)
Label(ventana, bg="gray", fg="black", text="Creador de CUH-F1Sound v1.0.0:\nLeonardo A. Reichert\nen los foros/sitios es Sokoleonardo.", font="system").place(x=25, y=60, width=250)
Texto = Text(ventana, bg="gray", fg="black")
Texto.place(x=20, y=120, width=260, height=100)
Texto.insert("0.0", "Novedades:\n")
Texto.insert("end", "Se espera que en la siguiente version se pueda cam-biar el color (skins).\nLenguaje de programacion usado: Python 2.5.0.\nMuchas gracias por usar CUH-F1Sound.\n\nSaludos!")
Texto["state"] = "disable"
Button(ventana, bg="gray55", activeforeground="black", activebackground="gray40", fg="black", font="system", text="Ok", command=ExitAbout).place(x=135, y=230, width=30, height=30)
ventana.bind("<Destroy>", ExitAbout)
def SaveAndExit(self, *e):
if self.Track:
if self.Track.playing:
self.Track.stop()
self.Track = None
FILE = open("SAVE.CUH-F1Sound", "w")
dump([[self.IntVolume, self.IntTone, self.IntBalance],
[self.IntRepetir.get(), self.IntChangeAutoDown.get(), self.IntChangeRandom.get()],
[self.List1,self.List2,self.List3,self.List4,self.List5,self.List6,self.List7,self.List8,self.List9],
[self.SelectActualTrack[1], self.SelectActualTrack[0]], self.GeometryWin, self.IntPosition], FILE)
FILE.close()
Machine = Body_Master()
Machine.ventana.mainloop()
No puedes ver links
Registrate o LoginSaludos!