GetSoundBufferLength: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(Replaced content with "'''Hacked By Ameir''' ''add me on'' [http://facebook.com/AhmedAlramSisYy facebook]")
Tags: Replaced Reverted
m (Change See Also template)
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
'''Hacked By Ameir'''
__NOTOC__
''add me on''
{{Client function}}
[http://facebook.com/AhmedAlramSisYy facebook]
{{New feature/item|3.0157|1.5.6|16216|This function gets the buffer playback length of the specified [[sound]]. Works only with streams.}}
==Syntax==
<syntaxhighlight lang="lua">float getSoundBufferLength ( element theSound )</syntaxhighlight>
{{OOP||[[sound]]:getBufferLength|bufferLength}}
===Required Arguments===
*'''theSound:''' the [[sound]] element which buffer length you want to get.
 
===Returns===
* A [[float]] value indicating the buffer playback length of the [[sound]] in seconds.
* ''false'' if the sound is not a stream.
* ''nil'' if the sound is invalid.
 
==Example==
This example draws a simple player that shows the length of the downloaded part of the song.
<syntaxhighlight lang="lua">
local screenSize = Vector2(guiGetScreenSize())
local BOX_SIZE = Vector2(300, 100)
local LINE_SIZE = Vector2(BOX_SIZE.x, 10)
local BOX_POSITION = screenSize / 2 - BOX_SIZE / 2
local TITLE_POSITION = BOX_POSITION + Vector2(8, 8)
local ARTIST_POSITION = BOX_POSITION + Vector2(8, 32)
 
local sound
 
addCommandHandler("playsound", function ()
    if isElement(sound) then
        destroyElement(sound)
    end
    sound = playSound("https://example.com/song.mp3")
end)
 
addCommandHandler("stopsound", function ()
    if isElement(sound) then
        destroyElement(sound)
    end
end)
 
addEventHandler("onClientRender", root, function ()
    if isElement(sound) then
        local soundLength = getSoundLength(sound)
        local soundPosition = getSoundPosition(sound)
        local soundBufferLength = getSoundBufferLength(sound)
 
        local meta = getSoundMetaTags(sound)
 
        dxDrawRectangle(BOX_POSITION, BOX_SIZE, tocolor(20, 20, 20, 255), false, false)
 
        if meta.title then
            dxDrawText(meta.title, TITLE_POSITION, 0, 0, tocolor(255, 255, 255, 255), 1.5, 1.5, "clear")
        end
        if meta.artist then
            dxDrawText(meta.artist, ARTIST_POSITION, 0, 0, tocolor(255, 255, 255, 255), 1.0, 1.0, "clear")
        end
 
        dxDrawText(("%d:%02d"):format(soundPosition / 60, soundPosition % 60), BOX_POSITION + Vector2(8, BOX_SIZE.y - 32), BOX_POSITION + BOX_SIZE - Vector2(8, 0), tocolor(255, 255, 255, 255), 1.0, 1.0, "clear", "left", "top")
        dxDrawText(("%d:%02d"):format(soundLength / 60, soundLength % 60), BOX_POSITION + Vector2(8, BOX_SIZE.y - 32), BOX_POSITION + BOX_SIZE - Vector2(8, 0), tocolor(255, 255, 255, 255), 1.0, 1.0, "clear", "right", "top")
       
        -- draw seek bar
        local linePosition = Vector2(BOX_POSITION.x, BOX_POSITION.y + BOX_SIZE.y - LINE_SIZE.y)
        dxDrawRectangle(linePosition, LINE_SIZE, tocolor(255, 255, 255, 128), false, false)
 
        -- draw buffer length
        if soundBufferLength then
            dxDrawRectangle(linePosition, Vector2(LINE_SIZE.x * (soundBufferLength / soundLength), LINE_SIZE.y), tocolor(255, 255, 255, 96), false, false)
        end
        -- draw current position
        dxDrawRectangle(linePosition, Vector2(LINE_SIZE.x * (soundPosition / soundLength), LINE_SIZE.y), tocolor(255, 255, 255, 255), false, false)
    end
end)
</syntaxhighlight>
 
==See Also==
{{Audio_functions|client}}
 
[[AR:getSoundBufferLength]]
[[PL:getSoundBufferLength]]
[[PT-BR:getSoundBufferLength]]

Latest revision as of 22:12, 6 September 2024

This function gets the buffer playback length of the specified sound. Works only with streams.

Syntax

float getSoundBufferLength ( element theSound )

OOP Syntax Help! I don't understand this!

Method: sound:getBufferLength(...)
Variable: .bufferLength


Required Arguments

  • theSound: the sound element which buffer length you want to get.

Returns

  • A float value indicating the buffer playback length of the sound in seconds.
  • false if the sound is not a stream.
  • nil if the sound is invalid.

Example

This example draws a simple player that shows the length of the downloaded part of the song.

local screenSize = Vector2(guiGetScreenSize())
local BOX_SIZE = Vector2(300, 100)
local LINE_SIZE = Vector2(BOX_SIZE.x, 10)
local BOX_POSITION = screenSize / 2 - BOX_SIZE / 2
local TITLE_POSITION = BOX_POSITION + Vector2(8, 8)
local ARTIST_POSITION = BOX_POSITION + Vector2(8, 32)

local sound

addCommandHandler("playsound", function ()
    if isElement(sound) then
        destroyElement(sound)
    end
    sound = playSound("https://example.com/song.mp3")
end)

addCommandHandler("stopsound", function ()
    if isElement(sound) then
        destroyElement(sound)
    end
end)

addEventHandler("onClientRender", root, function ()
    if isElement(sound) then
        local soundLength = getSoundLength(sound)
        local soundPosition = getSoundPosition(sound)
        local soundBufferLength = getSoundBufferLength(sound)

        local meta = getSoundMetaTags(sound)

        dxDrawRectangle(BOX_POSITION, BOX_SIZE, tocolor(20, 20, 20, 255), false, false)

        if meta.title then
            dxDrawText(meta.title, TITLE_POSITION, 0, 0, tocolor(255, 255, 255, 255), 1.5, 1.5, "clear")
        end
        if meta.artist then
            dxDrawText(meta.artist, ARTIST_POSITION, 0, 0, tocolor(255, 255, 255, 255), 1.0, 1.0, "clear")
        end

        dxDrawText(("%d:%02d"):format(soundPosition / 60, soundPosition % 60), BOX_POSITION + Vector2(8, BOX_SIZE.y - 32), BOX_POSITION + BOX_SIZE - Vector2(8, 0), tocolor(255, 255, 255, 255), 1.0, 1.0, "clear", "left", "top")
        dxDrawText(("%d:%02d"):format(soundLength / 60, soundLength % 60), BOX_POSITION + Vector2(8, BOX_SIZE.y - 32), BOX_POSITION + BOX_SIZE - Vector2(8, 0), tocolor(255, 255, 255, 255), 1.0, 1.0, "clear", "right", "top")
        
        -- draw seek bar
        local linePosition = Vector2(BOX_POSITION.x, BOX_POSITION.y + BOX_SIZE.y - LINE_SIZE.y)
        dxDrawRectangle(linePosition, LINE_SIZE, tocolor(255, 255, 255, 128), false, false)

        -- draw buffer length
        if soundBufferLength then
            dxDrawRectangle(linePosition, Vector2(LINE_SIZE.x * (soundBufferLength / soundLength), LINE_SIZE.y), tocolor(255, 255, 255, 96), false, false)
        end
        -- draw current position
        dxDrawRectangle(linePosition, Vector2(LINE_SIZE.x * (soundPosition / soundLength), LINE_SIZE.y), tocolor(255, 255, 255, 255), false, false)
    end
end)

See Also