Anuncios Google

Ayuda con reproducir formatos MP3 [LUA]

Bueno... Estuve ocupado haciendo un explorador de archivos y fue un éxito y tambien cuando lee ISOs y CSOs pero cuando tengo 2 MP3 en la carpeta MUSIC... Reproduzco una y se me traba, antes puse 1 de prueba y no se trababa, y ahora puse 2 por si habia error y se traba...

Acá les dejo el script de mi "explorador de archivos"

 

Salu2 y gracias de antemano... Espero que me puedan ayudar


 

 


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

El problema que veo, es que

El problema que veo, es que en la línea 12 la variable la nombras igual que el módulo de sonido (sound), cámbiale el nombre (sonido, snd, pista, etc, etc).
También, en lugar de poner variable:loop, usa variable:play.

Imagen de klozz

function RunMP3() if

function RunMP3()
        if controls.press("cross") and files.ext(workDir[position].name) == "mp3" then
                sonido = sound.load(workDir[position].name)
                sounido:loop()
 
--Asi deberia quedar amigo, lo que haces es hacer que lua no sepa que hace xD por la -- interferencia de variables 


TEAM MEX Homebrew y desarrollo PSP

Metal TrooperV.Pre-Alpha (15%)Lua , 10% C .

Ubunshell VProof. (45%)C

RPG Magues (35%)Lua , 5% C


Android development for Xperia X8 ^^ mis roms en XDA-Developers ya que en Scenebeta no las publican xD

Xperience  | MIUI Pikachu | Semc debrand engine | Froyexp | Xperience walkman mod | Android 4.0.4 CN9 Crema de nieve

-- KLOZZ

Si si

ya lo arregle ahora ya deje otra pregunta abajo de este coment

Imagen de klozz

jajaja si vi tarde xD pero ya

jajaja si vi tarde xD pero ya no puedo quitarlo deja leer tu pregunta.

 

Edito: ya te respondio RoberGalarga xD

Ok!

Ahora lo cambio y te digo

Edit: Bien... Se arreglo gracias :D Ahora sabes como hacer cuando preto L o R se cambie de musica sin tener que buscar la musica (por ej: abajo, X. Que es mas facil con el R o L)

Salu2!


 

 

La forma más fácil es poner

La forma más fácil es poner la opción de lista de reproducción. A grosso modo, sería:

  • Definir un botón para selección múltiple. Guardar las rutas de las pistas seleccionadas en una tabla.
  • Definir la función de cambio de pista. Sería algo como:
    function cambiar_pista()
      if controls.press("r") then
        --[[
          Paro la reproducción en curso
          Elimino la pista actual de la ram (sound.free)
          Tomo la siguiente pista, de la tabla donde guardé las pistas
          La cargo y la reproduzco
          ]]
      elseif controls.press("l") then
        --Lo mismo que arriba, pero con la pista anterior xD
      end
    end

Si quieres que al reproducir una pista cualquiera se puedan reproducir las demás que estén en la carpeta, también se puede. En ese caso, cuando el user inicia la reproducción, guarda el directorio actual en una variable aparte (dir_actual = files.list("dónde ando? xD")) y guarda también en qué posición está la pista actual ( es decir, la posición donde el user pinchó X). Cuando el user cambie de pista, toma el siguiente elemento y reprodúcelo (se puede hacer automático, algo como if not sonido:playing() then cambio_de_pista() end).

Algo así...?

function cambiar_pista()
  if controls.press("r") then
      if snd:playing(workDir[position].name) then
            snd:stop
            snd:free
      end
 
      if snd:load(workDir[position].name) then
            snd:play
      end
  elseif controls.press("l") then
    --acá no se me ocurre nada xD
  end
end

Algo así seria? Se me fue la imaginación xD

PD: Se me fueron los paréntesis pero se entiende xD


 

 

Imagen de barney77

Mmm.. mira, sería mejor que

Mmm.. mira, sería mejor que hagas un reproductor, aquí te dejo mas o menos como...

function reproducir_sonido()
 
	rutas = workDir; -- rutas es una tabla con las rutas del directorio actual
	sonido_actual = 1; -- Nos indica en que sonido estamos
	sonido = nil; -- Iniciamos el sonido en nil
 
	sonidos = {}; -- Creamos nuestra tabla, que almacenará las rutas de nuestros sonidos
 
	for i = 1, #rutas do 
		if string.lower(files.ext(rutas[i].name)) == "mp3" or string.lower(files.ext(rutas[i].name)) == "wav" then -- Esto es solo con los dos principales formatos, recuerda que lua dev soporta 4
			table.insert(sonidos,rutas[i].name); -- Introducimos las rutas en la tabla
		end
	end -- Ok, hasta ahora ya tenemos nuestras rutas.
 
	while true do
 
		controls.read();
 
		if controls.press("cross") and sonido:playing() == false then -- Si presionamos equis y no hay sonido reproduciondose
			sonido = sound.load(sonidos[sonido_actual].name); -- Cargamos el sonido actual
			sonido:play(); -- Reproducimos el sonido
		end
 
		if controls.press("r") then
			sonido:stop(); -- Paramos el sonido actual
			sonido:free(); -- Lo liberamos
			sonido_actual = sonido_actual + 1; -- Avanzamos de sonido
			sonido = sound.load(sonidos[sonido_actual].name); -- Cargamos el sonido
			sonido:play(); -- Lo reproducimos
		elseif controls.press("l") then
			sonido:stop(); -- Paramos el sonido actual
			sonido:free(); -- Lo liberamos
			sonido_actual = sonido_actual - 1; -- Decrementamos de sonido
			sonido = sound.load(sonidos[sonido_actual].name); -- Cargamos el sonido
			sonido:play(); -- Lo reproducimos
		end
 
	end
 
end
end

No tengo mucho tiempo para explicarlo, pero lo que hace es guardar las rutas de los sonidos de el directorio actual en una tabla, en este caso solo de dos formatos de sonido(wav y mp3).

Las condiciones estoy seguro que las entiendes.

Eso es mas o menos lo que quieres hacer, solo que es mejor a modo de reproductor, pero esto que te dejo te ayudará para poder hacerlo.

Si estoy mal, por favor corriganme

PD. Si el code se ve mal es por el copy/paste de notepad++.

Un saludo

Imagen de Mills

Ya que estamos

Hice un mini reproductor para mi juego, ya casi está terminado y estoy intentando corregir bugs.

Reproduce 9 pistas, pero como dije ya en otro tema, cuando usas mucho el comando sound.load, llega un momento en el que ya no quiere cargar más sonidos jeje.

Mi código es así:

cancion=1 --variable que representa en que canción de la lista estamos
Mplay=1 --variable que nos dice si una determinada canción se esta reproduciendo
 
function player() 
 
      if controls.press("up") then cancion=cancion - 1 end
      if controls.press("down") then cancion=cancion + 1 end
      if cancion < 1 then cancion=9 end
      if cancion > 9 then cancion=1 end
 
---esto va haciendo que la variable "cancion" vaya tomando valores del 1 al 9 al pulsar arriba o abajo
 
 
---1 CANCION-1
 
      if Mplay == 1 and cancion ~= 1 and controls.press("cross") then cancion1:free(); cancion = nil; collectgarbage("collect"); end -- Si la variable "Mplay" es 1, y la variable "cancion" es distinta de 1 y pulsamos x, entonces borramos la cancion 1 de ram.
 
      if cancion == 1 then screen.print(GFont,243,186,"cancion 1",0.8,blanco,negro,"center",480); end ---si la variable "cancion" es 1 entonces imprime "cancion 1" en pantalla
      if cancion == 1 and Mplay ~= 1 and controls.press("cross") then --si la variable cancion es 1 y se está reproduciendo otra cancion (Mplay distinto de 1) entonces...
       Mplay=1;   --la cancion 1 se está reproduciendo.
       dofile("load1.lua");   --script que carga la cancion 1
      end
 
--- y así para las 9 canciones. 
 
end

Cada canción tiene un script que simplemente la carga y empieza a reproducirla

No se si se entenderá jaja, además ya os digo que en cuanto cargo unas cuantas canciones se suele bloquear, o se bloquea aleatoriamente sin cargar muchas, pero son fallos del propio luadev.


Pobre PSP

Me parece mucho code para

Me parece mucho code para reproducir 9 canciones. Usando una tabla se simplifica muchísimo

pistas = {
"rutas",
"a las",
"canciones",
"que reproduciré",
"xD"
}
cancion,current = 1,0  --current me va decir q canción se está reproduciendo actualmente (la pongo a 0 para q se cargue al llamar a la función por primera vez).
 
function player() 
      if controls.press("up") then cancion=cancion - 1 end
      if controls.press("down") then cancion=cancion + 1 end
      if cancion < 1 then cancion=#pistas end
      if cancion > #pistas then cancion=1 end
--Va la parte mágica...
  if controls.press("cross") and cancion ~= current then
    if snd then --Por si se está reproduciendo la pista o ya estaba cargada...
      snd:stop() 
        snd:free() 
          collectgarbage("collect")
    end 
      snd = sound.load(pistas[cancion])
        snd:play()
      current = cancion
  end
end

Y bueno... en caso de funcionar (no, no lo probé xD) lo hace sin mucho code =)

Imagen de Mills

Claro

mucho mejor con tablas, a ver si las domino.

 

Imagen de Dioni0396

libera memoria

Cuando no uses la cancion libera la memoria, asi seguro que no se bloquea

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.