GetSoundWaveData: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(OOP)
(More senseble example)
Line 15: Line 15:


===Returns===
===Returns===
Returns a [[table]] of '''iSamples'''/2 floats representing the current audio frame waveform.
Returns a [[table]] of '''iSamples'''/2 ''floats'' representing the current audio frame waveform.
Returns ''false'' if the sound is not playing yet or hasn't buffered in the
Returns ''false'' if the sound is not playing yet or hasn't buffered in the
case of streams.
case of streams.


==Example==
==Example==
This code creates vertical waveform of sound in center of screen from top to bottom. [http://imageshack.com/a/img547/9052/xbrp.png] Key '''9''' - start, key '''0''' - stop.
<section name="Client" class="client" show="true">
<section name="Client" class="client" show="true">
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
local handl = nil
soundHandler = playSound ( "sound.wav" )
local sx,_ = guiGetScreenSize()
local colors = { tocolor(255,0,0),tocolor(0,255,0) }
function clientRenderFunc()
    if(handl) then
dxDrawRectangle(sx/2,0,1,256,tocolor(255,255,255,127))
        local bt = getSoundWaveData(handl,512)
if(not bt) then return end
for i=1,127 do
    dxDrawLine(sx/2+64*bt[2*i-1],i*2-2,sx/2+64*bt[2*(i+1)-1],(i+1)*2-2,colors[2])
    dxDrawLine(sx/2+64*bt[2*i],i*2-1,sx/2+64*bt[2*(i+1)],(i+1)*2-1,colors[1])
end
    end
end


function clientSoundStopFunc(_)
function onSoundPlayRender ( )
     if(source == handl) then
     if ( soundHandler ) then
removeEventHandler("onClientRender",root,clientRenderFunc)
        local waveData = getSoundWaveData ( soundHandler, 256 )
removeEventHandler("onClientSoundStopped",root,clientSoundStopFunc)
if ( waveData ) then
handl = nil
            for i=0,255 do
    end
                dxDrawRectangle ( i, 128, 1, waveData[i] * 256)
end
            end
        end
function musicStartFunc()
    if(not handl) then
        handl = playSound('btr.mp3')
        addEventHandler("onClientRender",root,clientRenderFunc)
addEventHandler("onClientSoundStopped",root,clientSoundStopFunc)
    end
end
function musicStopFunc()
    if(handl) then
        removeEventHandler("onClientRender",root,clientRenderFunc)
removeEventHandler("onClientSoundStopped",root,clientSoundStopFunc)
        stopSound(handl)
        handl = nil
     end
     end
end
end
addEventHandler ( "onClientRender", getRootElement(), onSoundPlayRender )
bindKey("9","down",musicStartFunc)
bindKey("0","down",musicStopFunc)
</syntaxhighlight>
</syntaxhighlight>
</section>
</section>

Revision as of 18:02, 10 July 2018

This function gets the wave form data for an audio stream which is a table of floats representing the current audio frame as a wave. This allows things like visualisations.

If the element is a player, this function will use the players voice.

Syntax

table getSoundWaveData ( element sound, int iSamples )

OOP Syntax Help! I don't understand this!

Method: sound:getWaveData(...)


Required Arguments

  • sound: a sound element that is created using playSound or playSound3D. Streams are also supported
  • iSamples: allowed samples are 256, 512, 1024, 2048, 4096, 8192 and 16384.

Returns

Returns a table of iSamples/2 floats representing the current audio frame waveform. Returns false if the sound is not playing yet or hasn't buffered in the case of streams.

Example

Click to collapse [-]
Client
soundHandler = playSound ( "sound.wav" )

function onSoundPlayRender ( )
    if ( soundHandler ) then
        local waveData = getSoundWaveData ( soundHandler, 256 )
	if ( waveData ) then
            for i=0,255 do
                dxDrawRectangle ( i, 128, 1, waveData[i] * 256)
            end
        end
    end
end
addEventHandler ( "onClientRender", getRootElement(), onSoundPlayRender )

Changelog

Version Description
1.3.2 Added player element to use a players voice

See Also