Som
O áudio de script do MTAX roda inteiramente do lado do jogador. Você toca um arquivo do próprio
resource ou uma URL de streaming, recebe de volta um elemento do tipo sound e usa esse elemento
em todas as outras funções desta página.
São dois modos de reprodução. O 2D toca sempre no mesmo volume, direto nos alto-falantes — é o que você quer para música de menu, avisos e efeitos de interface. O 3D ancora o som num ponto do mundo: o ouvinte é a câmera, e o volume cai conforme ela se afasta desse ponto.
Quase toda função desta página recebe um som como primeiro argumento. Se você passar algo que não é um
som vivo, ou um argumento do tipo errado, a função devolve false e registra um aviso no console de
debug — ela não interrompe o script. As exceções são setSoundLooped, isSoundLooped e showSound, que
levantam um erro Lua para um argumento inválido.
Muitas dessas funções também aceitam um jogador no lugar do som: elas passam a agir sobre o chat de
voz que você ouve desse jogador. O jogador local sempre tem voz; um jogador remoto, só enquanto o chat de
voz está ligado. Para um jogador sem voz a função devolve false.
Estas 42 funções existem somente no cliente. Chamá-las de um script de servidor resulta em erro de valor nulo.
O ciclo de vida de um som
Seção intitulada “O ciclo de vida de um som”Todo som segue o mesmo caminho: uma função play* cria, as funções set* controlam e stopSound
destrói. O arquivo precisa estar declarado em files no manifesto para chegar até o jogador.
-- criarlocal musica = playSound("sons/tema.mp3", true) -- em loop
if not musica then outputDebugString("nao consegui tocar o tema") returnend
-- controlarsetSoundVolume(musica, 0.4)
addCommandHandler("pausar", function() setSoundPaused(musica, not isSoundPaused(musica))end)
addCommandHandler("recomecar", function() setSoundPosition(musica, 0)end)
-- destruiraddCommandHandler("parar", function() stopSound(musica) musica = nilend)Reprodução em 2D
Seção intitulada “Reprodução em 2D”Reprodução em 3D
Seção intitulada “Reprodução em 3D”Num som 3D o ouvinte é sempre a câmera. Dentro da distância mínima o som toca no volume cheio; entre a
mínima e a máxima ele decai progressivamente; além da máxima fica em silêncio. A direção da câmera
também distribui o som entre os canais esquerdo e direito, a menos que você desligue isso com
setSoundPanningEnabled.
Controle de reprodução
Seção intitulada “Controle de reprodução”Volume, pan e pitch
Seção intitulada “Volume, pan e pitch”Efeitos
Seção intitulada “Efeitos”Cada som tem nove espaços de efeito, um por nome. Ligue o efeito com setSoundEffectEnabled e só
depois ajuste os parâmetros dele — ler ou escrever parâmetros de um efeito desligado devolve false.
Nomes de efeito
| Nome |
|---|
"chorus" |
"compressor" |
"distortion" |
"echo" |
"flanger" |
"gargle" |
"i3dl2reverb" |
"parameq" |
"reverb" |
Parâmetros dos efeitos
Seção intitulada “Parâmetros dos efeitos”Nas tabelas abaixo, decimal aceita qualquer número, inteiro aceita qualquer número e descarta a
parte fracionária, e bool aceita apenas true ou false. Passar um booleano para um parâmetro
numérico, ou um número para um booleano, devolve false.
chorus
| Parâmetro | Tipo |
|---|---|
wetDryMix | decimal |
depth | decimal |
feedback | decimal |
frequency | decimal |
waveform | inteiro |
delay | decimal |
phase | inteiro |
compressor
| Parâmetro | Tipo |
|---|---|
gain | decimal |
attack | decimal |
release | decimal |
threshold | decimal |
ratio | decimal |
predelay | decimal |
distortion
| Parâmetro | Tipo |
|---|---|
gain | decimal |
edge | decimal |
postEQCenterFrequency | decimal |
postEQBandwidth | decimal |
preLowpassCutoff | decimal |
echo
| Parâmetro | Tipo |
|---|---|
wetDryMix | decimal |
feedback | decimal |
leftDelay | decimal |
rightDelay | decimal |
panDelay | bool |
flanger
| Parâmetro | Tipo |
|---|---|
wetDryMix | decimal |
depth | decimal |
feedback | decimal |
frequency | decimal |
waveform | inteiro |
delay | decimal |
phase | inteiro |
gargle
| Parâmetro | Tipo |
|---|---|
rateHz | inteiro |
waveShape | inteiro |
i3dl2reverb
| Parâmetro | Tipo |
|---|---|
room | inteiro |
roomHF | inteiro |
roomRolloffFactor | decimal |
decayTime | decimal |
decayHFRatio | decimal |
reflections | inteiro |
reflectionsDelay | decimal |
reverb | inteiro |
reverbDelay | decimal |
diffusion | decimal |
density | decimal |
HFReference | decimal |
parameq
| Parâmetro | Tipo |
|---|---|
center | decimal |
bandwidth | decimal |
gain | decimal |
reverb
| Parâmetro | Tipo |
|---|---|
inGain | decimal |
reverbMix | decimal |
reverbTime | decimal |
highFreqRTRatio | decimal |
Streams
Seção intitulada “Streams”Um som criado a partir de uma URL é um stream. A conexão acontece em segundo plano, então logo após
playSound o som ainda pode não ter dados: getSoundLength devolve 0 por alguns instantes e o áudio
começa quando o buffer enche.
Streams têm algumas limitações próprias — não aceitam setSoundProperties, e um stream ao vivo sem
duração conhecida não pode ser posicionado com setSoundPosition. getSoundBPM só responde depois que
tocou o bastante do stream para medir.