Programando con Love 2D – Reproducir archivos de sonido mod, it, xm, …

Lo primero de todo es bajarnos unos cuantos archivos mod. Podemos bajar unos pocos desde aquí comprimidos en zip: https://mierda.tv/wp-contenido/uploads/2018/01/mods.zip

Si disponemos de algún ogg o algún mp3 pues lo mismo también nos sirven.

La idea es que con el framework love2d vamos a poder reproducir los siguientes formatos de archivos:

  • Waveform Audio File Format (.wav)
  • MPEG-1 or MPEG-2 Audio Layer III (.mp3)
  • Ogg Vorbis (.ogg, .oga, .ogv)
  • Tracker module formats (.699, .amf, .ams, .dbm, .dmf, .dsm, .far, .it, .j2b, .mdl, .med, .mod, .mt2, .mtm, .okt, .psm, .s3m, .stm, .ult, .umx, .xm)
  • Other formats supported by libmodplug (.abc, .mid, .pat)

Veamos un ejemplo sencillo de como reproducir un archivo de los que hemos bajado en ese zip que he enlazado al principio del articulo.

El archivo main.lua podría ser simplemente esto para reproducir el audio:

function love.load()
        modulo = love.audio.newSource("lickit.mod")
        modulo:play()
end

Eso ya reproduce el archivo pero sin control alguno. Veamos como podemos hacer que suene al máximo inicialmente y que podamos bajar o subir el volumen con el cursor arriba y cursor abajo.

Veremos un chorro en consola que muestra la variable del sonido y escucharemos más flojo el tema si bajamos y más alto si subimos. Aquí ese código:

function love.load()
	modulo = love.audio.newSource("lickit.mod")
	modulo:setVolume(1)
	modulo:play()
	modulo:setLooping(true)
        volumen = modulo:getVolume()
	print("Volumen: " .. volumen)
end

function love.update(dt)
end

function love.keypressed(key)
	if ( key == "up" ) then
		volumen = modulo:getVolume()
                volumen = tonumber(string.format("%.1f", volumen))
		if volumen >= 0 and volumen < 1 then
			volumen = volumen + 0.1
			modulo:setVolume(volumen)
		end
		print("Volumen: " .. volumen)
	end
	
	if ( key == "down" ) then
                volumen = modulo:getVolume()
                volumen = tonumber(string.format("%.1f", volumen))
                if volumen > 0 and volumen <= 1 then
                        volumen = volumen - 0.1
                        modulo:setVolume(volumen)
                end
                print("Volumen: " .. volumen)
	end
end

Veremos algo como esto:

Volumen: 1
Volumen: 0.9
Volumen: 0.8
Volumen: 0.7
Volumen: 0.6
Volumen: 0.5
Volumen: 0.4
Volumen: 0.3
Volumen: 0.4
Volumen: 0.5
Volumen: 0.6
Volumen: 0.7
Volumen: 0.6
Volumen: 0.5
Volumen: 0.4
Volumen: 0.3
Volumen: 0.2
Volumen: 0.1
Volumen: 0
Volumen: 0
Volumen: 0.1
Volumen: 0.2
Volumen: 0.3
Volumen: 0.4
Volumen: 0.5
Volumen: 0.6
Volumen: 0.7
Volumen: 0.8
Volumen: 0.9

Otras cosejas a tener en cuenta para controlar con pause, stop, etc ...

channels = modulo:getChannels() -- 1 for mono, 2 for stereo.
duration = modulo:getDuration( )

love.audio.pause(modulo)
modulo:pause()
modulo:isPaused()

love.audio.play(modulo)
modulo:play()

love.audio.resume(modulo)
modulo:resume()

love.audio.rewind(modulo)
modulo:rewind()

modulo:getDirection()
modulo:setDirection()

modulo:getPitch()
modulo:setPitch()

modulo:getPosition()
modulo:setPosition()

modulo:getVelocity()
modulo:setVelocity()

modulo:getVolume()
modulo:setVolume()

modulo:isLooping()
modulo:setLooping(true)

Saludos cordiales.

próximo Publicación

Atrás Publicación

Dejar una contestacion

© 2018 [ MIERDA TV ]

Tema de Anders Norén