Jump to content

Ideia de como fazer um fade em som


Recommended Posts

Fala rapaziada blz, estou tentando fazer um sistema que utiliza musicas, mas queria fazer um esquema de toda vez que uma musica acabar antes de entrar a outra rolar um fade out, tentei utilizar um setTimer ma snao deu certo apaguei procurei um pouco e achei uma função util, tentei fazer da maneira que esta ai, mas sem sucesso tbm, creio que terei que pegar o tamanho do som/musica e setar algum limite pra ele e quando isso acontecer setar = 0, na logica creio q é isso, mas n sei como aplicar, se alguem puder dar uma luz agradeço, segue o codigo atual 

local playlist = {
    "playlist/1.mp3",
    "playlist/2.mp3",
    "playlist/3.mp3",
    "playlist/4.mp3",
    "playlist/5.mp3",
    "playlist/6.mp3"
}

addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), function()
    local sound = playSound(playlist[math.random(#playlist)], false)
    addEventHandler("onClientSoundStopped", getRootElement(), function(reason)
        if sound and reason == "finished" then
            playSound(playlist[math.random(#playlist)], false)
        else
            local volume = getSoundVolume(sound)
            if volume == true then
                return
            else
                stopSoundSlowly(sound)
            end
        end
    end)
end)

-- ## Scripts Auxiliares ## --

function stopSoundSlowly( sound_element )
	if not isElement( sound_element ) then return false end

	local sound_timer_quant = getSoundVolume( sound_element )

	setTimer( function( )
		if not isElement( sound_element ) then return end
		local sound_volume = getSoundVolume( sound_element )
		sound_volume = ( ( sound_volume * 10 ) - ( 0.1 * 10 ) ) / 10
		setSoundVolume( sound_element, sound_volume - 0.1 )
		if sound_volume > 0 then return end
		stopSound( sound_element )
	end, 500, sound_timer_quant * 10 )
end

 

Link to comment
addEventHandler("onClientResourceStart", getResourceRootElement(), function()

end)

addEventHandler("onClientSoundBeat", getResourceRootElement(), function()

end)

addEventHandler("onClientSoundStopped", getResourceRootElement(), function()

end)

 

Link to comment
21 hours ago, WWW said:
addEventHandler("onClientResourceStart", getResourceRootElement(), function()
    local sound = playSound(playlist[math.random(#playlist)], false)
end)

addEventHandler("onClientSoundBeat", getResourceRootElement(), function(time)
	if time > getSoundLength(source) - 5 then
		stopSoundSlowly(source)
	end
end)

addEventHandler("onClientSoundStopped", getResourceRootElement(), function(reason)
	if reason == "finished" then
		playSound(playlist[math.random(#playlist)], false)
	end
end)

 

Tentei da forma como colocou e sem sucesso, ele nao executa o fade e quando executou a proxima musica nao foi tocada ou toca a mesma musica repetidamente, posso estar utilizando de maneira incorreta? tentei separadamente como mandou e tentei desse jeito, teria outro metodo, pois em um futuro irei colocar o nome da musica q esta sendo tocada, ent precisava q a proxima musica tocasse nao repetidamente mas de forma aleatoria e com precisao para colocar o nome, maneira q tentei:


local playlist = {
    {"playlist/1.mp3", "EDEN - Drugs"},
    {"playlist/2.mp3", "Fukkit - Kiwi"},
    {"playlist/3.mp3", "Lilbubblegum x Letoa - Guap"},
    {"playlist/4.mp3", "Luh Kel - How to love"},
    {"playlist/5.mp3", "Second Time - Style aomine"},
    {"playlist/6.mp3", "Thareapa - Bad spin"}
}

local random = math.random(1, #playlist)

addEventHandler("onClientResourceStart", getResourceRootElement(), function()
    local sound = playSound(playlist[random][1], false)
    addEventHandler("onClientSoundBeat", getResourceRootElement(), function(time)
        if time > getSoundLength(source) - 5 then
            stopSoundSlowly(source)
        end
        addEventHandler("onClientSoundStopped", getResourceRootElement(), function(reason)
            if ( reason == "finished" ) then
                playSound(playlist[random][1], false)
            end
        end)
    end)
end)

-- Login UI --

-- ## Scripts Auxiliares ## --

function stopSoundSlowly( sound_element )
	if not isElement( sound_element ) then return false end

	local sound_timer_quant = getSoundVolume( sound_element )

	setTimer( function( )
		if not isElement( sound_element ) then return end
		local sound_volume = getSoundVolume( sound_element )
		sound_volume = ( ( sound_volume * 10 ) - ( 0.1 * 10 ) ) / 10
		setSoundVolume( sound_element, sound_volume - 0.1 )
		if sound_volume > 0 then return end
		stopSound( sound_element )
	end, 500, sound_timer_quant * 10 )
end

 

Link to comment
local sound = playSound("https://upload.wikimedia.org/wikipedia/commons/0/0d/Hino-Nacional-Brasil-instrumental-mec.ogg", false)

addEventHandler("onClientRender", root, function()
	for i, v in pairs(getElementsByType("sound", resourceRoot)) do
		if getSoundPosition(v) >= getSoundLength(v) - 10 then
			setSoundVolume(v, getSoundVolume(v) - 0.005)
		end
	end
end)

 

  • Thanks 1
Link to comment
Posted (edited)
On 01/03/2024 at 08:04, WWW said:
local sound = playSound("https://upload.wikimedia.org/wikipedia/commons/0/0d/Hino-Nacional-Brasil-instrumental-mec.ogg", false)

addEventHandler("onClientRender", root, function()
	for i, v in pairs(getElementsByType("sound", resourceRoot)) do
		if getSoundPosition(v) >= getSoundLength(v) - 10 then
			setSoundVolume(v, getSoundVolume(v) - 0.005)
		end
	end
end)

 

Certo, perfeito até demais kakakaka muito obrigado de vdd, depois disso eu so estou tendo o ultimo problema pode me dar uma direção de onde estou errando? a musica esta aleatoria mas somente quando eu dou start ou restart no resource, mesmo eu colcocando uma função para quando a musica parar, nesse link tem um exemplo https://www.upload.ee/image/16342877/duvida.png

On 01/03/2024 at 08:04, WWW said:

local soundtrack = {
    {"soundtrack/1.mp3", "Gorillaz - DARE"},
    {"soundtrack/2.mp3", "Lilbubblegum - Thotties"},
    {"soundtrack/3.mp3", "Lh chucro - Pepp@"}
}

local random = math.random(1, #soundtrack)
addEventHandler("onClientResourceStart", getResourceRootElement(), function() 
    local music = playSound(soundtrack[random][1])
    outputChatBox("Você está escutando: " .. soundtrack[random][2])
    addEventHandler("onClientRender", root, function()
        for i, sound in pairs(getElementsByType("sound", resourceRoot)) do
            if getSoundPosition(sound) >= getSoundLength(sound) - 10 then
                setSoundVolume(sound, getSoundVolume(sound) - 0.005)
            end
        end
    end)
    addEventHandler("onClientSoundStopped", getRootElement(), function(reason)
        if reason == "finished" then
            if music == music then
                local music = playSound(soundtrack[random][1])
                outputChatBox("Agora você está escutando: " .. soundtrack[random][2])
            end    
        end
    end)
end)

 

 

Edited by +Sommer
Link to comment
addEventHandler("onClientSoundStopped", resourceRoot, function(reason)
	local soundtrack = playlist[math.random(#playlist)]
    if reason == "destroyed" then
        playSound(soundtrack[1], false)
    elseif reason == "finished" then
        playSound(soundtrack[1], false)
    elseif reason == "paused" then
        playSound(soundtrack[1], false)
    end
	outputChatBox("Agora você está escutando: " .. soundtrack[2])
end)

 

  • Thanks 1
Link to comment
20 hours ago, WWW said:
addEventHandler("onClientSoundStopped", resourceRoot, function(reason)
	local soundtrack = playlist[math.random(#playlist)]
    if reason == "destroyed" then
        playSound(soundtrack[1], false)
    elseif reason == "finished" then
        playSound(soundtrack[1], false)
    elseif reason == "paused" then
        playSound(soundtrack[1], false)
    end
	outputChatBox("Agora você está escutando: " .. soundtrack[2])
end)

 

Agora sim funcionou perfeitamente, muito obrigado mesmo principe, aprendi funções e ordens q nunca tinha usado com isso, obrigado mesmo de vdd ❤️

Link to comment
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...