Saltar al contenido
56K

56K

Slow IT Notes – Just 4 Fun

Menú
Menú

Brincando com a lua – 005 – Historias de Love, visualizando sonido

Publicada el 11/03/202106/02/2023 por fanta

En anteriores entradas se ha descrito el proceso de compilar Lua 5.x y como compilar Love2D 11.3 . Algo que tendría que facilitar a un posible lector replicar lo que por aquí se escriba.

«Historias de love» son pequeños posts en los que se muestra como hacer algo con Love2D.
Este es el primer post de esa serie.  Bienvenido pues a «Historias de love».

 

Visualizando sonido

 

La idea es cargar un archivo *.mod .  Una canción al final de cuentas que ha sido realizada con algún Tracker como por ejemplo protracker, noisetracker, ultimate soundtracker, …

Se carga el sonido y se van capturando muestras en cada posición de la longitud total del archivo.
Los valores de esas muestras nos servirán para poder ir mostrando barras que se mueven o círculos con un radio mayor o menor.

El volumen también puede modificarse si asignamos alguna tecla. En este caso no he realizado eso pero posiblemente en futuros posts si que muestre como se hace.

 

Descargar el código fuente

Aquí puedes descargar el código fuente: play_mods_circle.tar.gz

love.mouse.setVisible(false)
love.window.setFullscreen(true)
ScreenSizeW = love.graphics.getWidth()
ScreenSizeH = love.graphics.getHeight()
font = love.graphics.newFont("fonts/amiga4ever.ttf", 12)
songData = love.sound.newSoundData("mods/anilekt5.mod")
song = love.audio.newSource(songData)
song:play()

function love.load()
    songPos = song:tell("samples")
    songRate = songData:getSampleRate()
    songSize = songData:getSampleCount()
end

function love.update(dt)
    songPos = song:tell("samples")
    songSam = songData:getSample(songPos)
    love.draw()
end

function love.draw()
    love.graphics.setColor(255,0,0)
    love.graphics.circle("line", ScreenSizeW/2, ScreenSizeH/2, songSam * ScreenSizeW )
    love.graphics.setColor(0,255,0)
    love.graphics.circle("line", ScreenSizeW/2, ScreenSizeH/2, songSam * (ScreenSizeW/2) )
    love.graphics.setColor(0,0,255)
    love.graphics.circle("line", ScreenSizeW/2, ScreenSizeH/2, songSam * (ScreenSizeW/4) )

    love.graphics.setColor(255,255,255)
    love.graphics.setFont(font)
    love.graphics.printf("Sample Rate: " .. songRate, 10, 10, 400, left)
    love.graphics.printf("Position: " .. songPos .. "/" .. songSize, 10, 30, 400, left)
end

function love.keyreleased(key)
    if key == "escape" then
        love.event.quit()
    end
end

El código no es muy elegante pero creo que visualmente es entendible.
He ido sobre la marcha creándolo y luego me he dado cuenta de que sería interesante crear funciones para crear los círculos en vez de poner esas 3 líneas para dibujarlos.
Se puede crear una función para el cambio de color, etc…

Pero bueno. La idea es mostrar que con poquita cosa se pueden hacer cosas chulas con Love.

El archivo tar.gz contiene la tipografía que he empleado y algunos mods musicales de ejemplo.

 

Y eso es todo.

Saludos cordiales.


fanta

Escrito por Fanta

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

fanta de naranja
Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
💾 QEMU
💾 SOLARIS
💾 ESXi
💾 FREEBSD
💾 DEBIAN
💾 AMIGA
💾 SYSADMIN
💾 JUNOS
💾 IMPRIMIR
💾 MSDOS
💾 WINDOWS
💾 FAIRPHONE
💾 GAMING
💾 STREAMING
💾 REDHAT
💾 GRÁFICOS
💾 CACHARROS
💾 SONIDO
💾 NETWORKING
💾 ROCKY
💾 SUSE
💾 TMP
©2025 56K | Construido utilizando WordPress y Responsive Blogily tema por Superb