Soundboard para StreamElements

Este widget ainda está em desenvolvimento!

Este código ainda não está documentado e está em fase de testes. Use por sua conta e risco.

Este é um widget que aciona um áudio quando um espectador chama um comando. Criei ele na intenção de ser um tipo de "SoundAlerts" que funciona em lives no YouTube.

Te ajudei? Me manda um cafézinho ^^

[email protected]

A fazer:

  • Bolar algum meio do comando retornar algum feedback no chat;
  • Documentar o widget.

HTML

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family={{alert_googleFont}}" rel="stylesheet">

<div id="alert_container" data-fade="{{alert_fade}}" data-globaltimeout="{{alert_globaltimeout}}" data-usertimeout="{{alert_usertimeout}}">
    <img id="image" src="{{alert_image}}">
    <p id="alert_text" data-value="{{alert_text}}" data-shadow="{{alert_shadow}}" style="--text-color: {{alert_textcolor}}; --shoutout-text-color: {{alert_shoutouttextcolor}}"></p>
</div>

<div id="audios">
    <audio id="audio-{{audio01_name}}" data-active="{{audio01_active}}" src="{{audio01_file}}"></audio>
    <audio id="audio-{{audio02_name}}" data-active="{{audio02_active}}" src="{{audio02_file}}"></audio>
    <audio id="audio-{{audio03_name}}" data-active="{{audio03_active}}" src="{{audio03_file}}"></audio>
    <audio id="audio-{{audio04_name}}" data-active="{{audio04_active}}" src="{{audio04_file}}"></audio>
    <audio id="audio-{{audio05_name}}" data-active="{{audio05_active}}" src="{{audio05_file}}"></audio>
    <audio id="audio-{{audio06_name}}" data-active="{{audio06_active}}" src="{{audio06_file}}"></audio>
    <audio id="audio-{{audio07_name}}" data-active="{{audio07_active}}" src="{{audio07_file}}"></audio>
    <audio id="audio-{{audio08_name}}" data-active="{{audio08_active}}" src="{{audio08_file}}"></audio>
    <audio id="audio-{{audio09_name}}" data-active="{{audio09_active}}" src="{{audio09_file}}"></audio>
    <audio id="audio-{{audio10_name}}" data-active="{{audio10_active}}" src="{{audio10_file}}"></audio>
    <audio id="audio-{{audio11_name}}" data-active="{{audio11_active}}" src="{{audio11_file}}"></audio>
    <audio id="audio-{{audio12_name}}" data-active="{{audio12_active}}" src="{{audio12_file}}"></audio>
    <audio id="audio-{{audio13_name}}" data-active="{{audio13_active}}" src="{{audio13_file}}"></audio>
    <audio id="audio-{{audio14_name}}" data-active="{{audio14_active}}" src="{{audio14_file}}"></audio>
    <audio id="audio-{{audio15_name}}" data-active="{{audio15_active}}" src="{{audio15_file}}"></audio>
    <audio id="audio-{{audio16_name}}" data-active="{{audio16_active}}" src="{{audio16_file}}"></audio>
    <audio id="audio-{{audio17_name}}" data-active="{{audio17_active}}" src="{{audio17_file}}"></audio>
    <audio id="audio-{{audio18_name}}" data-active="{{audio18_active}}" src="{{audio18_file}}"></audio>
    <audio id="audio-{{audio19_name}}" data-active="{{audio19_active}}" src="{{audio19_file}}"></audio>
    <audio id="audio-{{audio20_name}}" data-active="{{audio20_active}}" src="{{audio20_file}}"></audio>
    <audio id="audio-{{audio21_name}}" data-active="{{audio21_active}}" src="{{audio21_file}}"></audio>
    <audio id="audio-{{audio22_name}}" data-active="{{audio22_active}}" src="{{audio22_file}}"></audio>
    <audio id="audio-{{audio23_name}}" data-active="{{audio23_active}}" src="{{audio23_file}}"></audio>
    <audio id="audio-{{audio24_name}}" data-active="{{audio24_active}}" src="{{audio24_file}}"></audio>
    <audio id="audio-{{audio25_name}}" data-active="{{audio25_active}}" src="{{audio25_file}}"></audio>
    <audio id="audio-{{audio26_name}}" data-active="{{audio26_active}}" src="{{audio26_file}}"></audio>
    <audio id="audio-{{audio27_name}}" data-active="{{audio27_active}}" src="{{audio27_file}}"></audio>
    <audio id="audio-{{audio28_name}}" data-active="{{audio28_active}}" src="{{audio28_file}}"></audio>
    <audio id="audio-{{audio29_name}}" data-active="{{audio29_active}}" src="{{audio29_file}}"></audio>
    <audio id="audio-{{audio30_name}}" data-active="{{audio30_active}}" src="{{audio30_file}}"></audio>
    <audio id="audio-{{audio31_name}}" data-active="{{audio31_active}}" src="{{audio31_file}}"></audio>
    <audio id="audio-{{audio32_name}}" data-active="{{audio32_active}}" src="{{audio32_file}}"></audio>
    <audio id="audio-{{audio33_name}}" data-active="{{audio33_active}}" src="{{audio33_file}}"></audio>
    <audio id="audio-{{audio34_name}}" data-active="{{audio34_active}}" src="{{audio34_file}}"></audio>
    <audio id="audio-{{audio35_name}}" data-active="{{audio35_active}}" src="{{audio35_file}}"></audio>
    <audio id="audio-{{audio36_name}}" data-active="{{audio36_active}}" src="{{audio36_file}}"></audio>
    <audio id="audio-{{audio37_name}}" data-active="{{audio37_active}}" src="{{audio37_file}}"></audio>
    <audio id="audio-{{audio38_name}}" data-active="{{audio38_active}}" src="{{audio38_file}}"></audio>
    <audio id="audio-{{audio39_name}}" data-active="{{audio39_active}}" src="{{audio39_file}}"></audio>
    <audio id="audio-{{audio40_name}}" data-active="{{audio40_active}}" src="{{audio40_file}}"></audio>
    <audio id="audio-{{audio41_name}}" data-active="{{audio41_active}}" src="{{audio41_file}}"></audio>
    <audio id="audio-{{audio42_name}}" data-active="{{audio42_active}}" src="{{audio42_file}}"></audio>
    <audio id="audio-{{audio43_name}}" data-active="{{audio43_active}}" src="{{audio43_file}}"></audio>
    <audio id="audio-{{audio44_name}}" data-active="{{audio44_active}}" src="{{audio44_file}}"></audio>
    <audio id="audio-{{audio45_name}}" data-active="{{audio45_active}}" src="{{audio45_file}}"></audio>
    <audio id="audio-{{audio46_name}}" data-active="{{audio46_active}}" src="{{audio46_file}}"></audio>
    <audio id="audio-{{audio47_name}}" data-active="{{audio47_active}}" src="{{audio47_file}}"></audio>
    <audio id="audio-{{audio48_name}}" data-active="{{audio48_active}}" src="{{audio48_file}}"></audio>
    <audio id="audio-{{audio49_name}}" data-active="{{audio49_active}}" src="{{audio49_file}}"></audio>
    <audio id="audio-{{audio50_name}}" data-active="{{audio50_active}}" src="{{audio50_file}}"></audio>
</div>

CSS

body,
#alert_container {
    display: flex;
    align-items: center;
    flex-direction: column;

    margin: 0;
    padding: 0;
    overflow: hidden;
    font-family: "{{alert_googleFont}}", sans-serif;
}

#alert_container {
    opacity: 0%;
    transition: 500ms ease;

    &[data-show="true"] {
        opacity: 100%;
    }
}

#image {
    height: 66vh;
}

#alert_text {
    margin: 0;
    margin-top: 3vh;
    font-size: 10vh;
    font-weight: 800;
    text-align: center;
    color: var(--text-color);

    span {
        color: var(--shoutout-text-color);
    }

    &[data-shadow="true"] {
        filter: drop-shadow(0 0 1vh #00000050);
    }
}

#audios {
    display: none;
}

Javascript

// Executar assim que iniciar

let await_start = true
window.onload = () => {

    let alertHTML = document.querySelector(`#alert_container`)
    let alert_textHTML = document.querySelector(`#alert_text`)

    // Insere os elementos de texto na descrição do alerta
    alert_textHTML.innerHTML = alert_textHTML.dataset.value
        .replaceAll("{username}", '<span id="username">USER</span>')
        .replaceAll("{audioname}", '<span id="audioname">AUDIO</span>')

    // Define o timeout global no objeto de timeout
    timeout.globalTimeout = parseInt(alertHTML.dataset.fade) + parseInt(alertHTML.dataset.globaltimeout)
    timeout.userTimeout = parseInt(alertHTML.dataset.fade) + parseInt(alertHTML.dataset.usertimeout)

    // Aguardar 5seg antes de disparar alertas
    setTimeout(() => {
        await_start = false;
        console.log("Soundboard inicializado.")
    }, 5000)
}



// Guarda os comandos dos áudios

let audioCmds = {
    audio01: "{{audio01_name}}", 
    audio02: "{{audio02_name}}",
    audio03: "{{audio03_name}}",
    audio04: "{{audio04_name}}",
    audio05: "{{audio05_name}}",
    audio06: "{{audio06_name}}",
    audio07: "{{audio07_name}}",
    audio08: "{{audio08_name}}",
    audio09: "{{audio09_name}}",
    audio10: "{{audio10_name}}",
    audio11: "{{audio11_name}}",
    audio12: "{{audio12_name}}",
    audio13: "{{audio13_name}}",
    audio14: "{{audio14_name}}",
    audio15: "{{audio15_name}}",
    audio16: "{{audio16_name}}",
    audio17: "{{audio17_name}}",
    audio18: "{{audio18_name}}",
    audio19: "{{audio19_name}}",
    audio20: "{{audio20_name}}",
    audio21: "{{audio21_name}}",
    audio22: "{{audio22_name}}",
    audio23: "{{audio23_name}}",
    audio24: "{{audio24_name}}",
    audio25: "{{audio25_name}}",
    audio26: "{{audio26_name}}",
    audio27: "{{audio27_name}}",
    audio28: "{{audio28_name}}",
    audio29: "{{audio29_name}}",
    audio30: "{{audio30_name}}",
    audio31: "{{audio31_name}}",
    audio32: "{{audio32_name}}",
    audio33: "{{audio33_name}}",
    audio34: "{{audio34_name}}",
    audio35: "{{audio35_name}}",
    audio36: "{{audio36_name}}",
    audio37: "{{audio37_name}}",
    audio38: "{{audio38_name}}",
    audio39: "{{audio39_name}}",
    audio40: "{{audio40_name}}",
    audio41: "{{audio41_name}}",
    audio42: "{{audio42_name}}",
    audio43: "{{audio43_name}}",
    audio44: "{{audio44_name}}",
    audio45: "{{audio45_name}}",
    audio46: "{{audio46_name}}",
    audio47: "{{audio47_name}}",
    audio48: "{{audio48_name}}",
    audio49: "{{audio49_name}}",
    audio50: "{{audio50_name}}"
}



// Executar quando receber um evento

window.addEventListener('onEventReceived', function (obj) {

    if (await_start) return     // Caso esteja aguardando ligar, ignorar

    // Executa uma ação baseada em um evento
    switch (obj.detail.listener) {

        case "message":
            let message = obj.detail.event.data.text                            // Armazena mensagem
            let nick = obj.detail.event.data.nick                               // Armazena nick
            if (message.indexOf("!") == -1) return                              // Caso não seja comando, ignorar
            message = message.replaceAll("!", "")                               // Remove símbolo de comando
            if (document.querySelector(`#audio-${message}`) == null) return     // Caso audio não exista, ignorar
            showAlert(nick, message)                                            // Exibir alerta
            return;

        case "event:test":
            showAlert("DaniFluffyTesty", audioCmds[obj.detail.event.value], true)   // Executa alerta de teste
            return;
    }
});



/** Mostra o alerta */

function showAlert(username, audioname, isTest) {

    let alertHTML = document.querySelector(`#alert_container`)
    let audioHTML = document.querySelector(`#audio-${audioname}`)
    let usernameHTML = document.querySelector(`#username`)
    let audionameHTML = document.querySelector(`#audioname`)

    if (!timeout.run(username, isTest)) return      // Caso timeout não expirado, ignorar
    if (audioHTML.dataset.active != "true") return  // Caso audio inativo, ignorar

    usernameHTML.textContent = username             // Definir nome de usuário
    audionameHTML.textContent = audioname           // Definir nome do áudio
    audioHTML.play()                                // Tocar audio    

    alertHTML.dataset.show = true                   // Exibir overlay
    setTimeout(() =>
        alertHTML.dataset.show = false,             // Oculta overlay
        alertHTML.dataset.fade * 1000               // Aguarda xx segundos para isso
    )
}



/** Gerencia os timeouts*/

let timeout = {
    globalTimeout: 0,
    userTimeout: 0,
    userData: {},
    lastRun: new Date().getTime(),
    run: function (username, isTest) {
        if (isTest) return true
        if ((new Date().getTime()) < this.lastRun) return false               // Caso timeout global não tenha expirado, retornar false
        if ((new Date().getTime()) < this.userData[username]) return false    // Caso timeout de user não tenha expirado, retornar false

        this.lastRun = (new Date().getTime()) + this.globalTimeout * 1000           // Atualiza última execução
        this.userData[username] = (new Date().getTime()) + this.userTimeout * 1000  // Atualiza última execução do usuário
        return true
    }
}

Fields

{
    "credits1": {
        "type": "checkbox",
        "value": true,
        "label": "Detalhes de como fazer a configuração podem ser encontrados no site toolbox.danifluffy.dev :)",
        "group": "Soundboard | DaniFluffyCat ^^"
    },
    "credits2": {
        "type": "text",
        "label": "Você pode copiar o link abaixo:",
        "value": "toolbox.danifluffy.dev",
        "group": "Soundboard | DaniFluffyCat ^^"
    },
    "alert_image": {
        "type": "image-input",
        "label": "Imagem do alerta",
        "group": "Configs. alerta"
    },
    "alert_text": {
        "type": "text",
        "label": "Texto do alerta",
        "value": "{username} tocou {audioname}",
        "group": "Configs. alerta"
    },
    "alert_googleFont": {
        "type": "googleFont",
        "label": "Selecione a fonte:",
        "value": "Roboto",
        "group": "Configs. alerta"
    },
    "alert_textcolor": {
        "type": "colorpicker",
        "label": "Cor do texto",
        "value": "#ffffff",
        "group": "Configs. alerta"
    },
    "alert_shoutouttextcolor": {
        "type": "colorpicker",
        "label": "Cor de destaque do texto",
        "value": "#cccc00",
        "group": "Configs. alerta"
    },
    "alert_shadow": {
        "type": "checkbox",
        "label": "Sombra do texto",
        "value": false,
        "group": "Configs. alerta"
    },
    "alert_fade": {
        "type": "number",
        "label": "Duração do alerta (em seg)",
        "value": 10,
        "min": 5,
        "max": 30,
        "step": 1,
        "group": "Configs. alerta"
    },
    "alert_globaltimeout": {
        "type": "number",
        "label": "Tempo mínimo entre alertas (em seg)",
        "value": 10,
        "min": 5,
        "max": 999,
        "step": 1,
        "group": "Configs. alerta"
    },
    "alert_usertimeout": {
        "type": "number",
        "label": "Cooldown do usuário (em seg)",
        "value": 10,
        "min": 5,
        "max": 999,
        "step": 1,
        "group": "Configs. alerta"
    },
    "audio01_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 01"
    },
    "audio01_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 01"
    },
    "audio01_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 01"
    },
    "audio01_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio01",
        "group": "🎶 Áudio 01"
    },
    "audio02_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 02"
    },
    "audio02_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 02"
    },
    "audio02_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 02"
    },
    "audio02_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio02",
        "group": "🎶 Áudio 02"
    },
    "audio03_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 03"
    },
    "audio03_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 03"
    },
    "audio03_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 03"
    },
    "audio03_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio03",
        "group": "🎶 Áudio 03"
    },
    "audio04_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 04"
    },
    "audio04_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 04"
    },
    "audio04_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 04"
    },
    "audio04_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio04",
        "group": "🎶 Áudio 04"
    },
    "audio05_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 05"
    },
    "audio05_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 05"
    },
    "audio05_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 05"
    },
    "audio05_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio05",
        "group": "🎶 Áudio 05"
    },
    "audio06_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 06"
    },
    "audio06_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 06"
    },
    "audio06_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 06"
    },
    "audio06_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio06",
        "group": "🎶 Áudio 06"
    },
    "audio07_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 07"
    },
    "audio07_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 07"
    },
    "audio07_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 07"
    },
    "audio07_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio07",
        "group": "🎶 Áudio 07"
    },
    "audio08_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 08"
    },
    "audio08_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 08"
    },
    "audio08_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 08"
    },
    "audio08_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio08",
        "group": "🎶 Áudio 08"
    },
    "audio09_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 09"
    },
    "audio09_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 09"
    },
    "audio09_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 09"
    },
    "audio09_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio09",
        "group": "🎶 Áudio 09"
    },
    "audio10_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 10"
    },
    "audio10_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 10"
    },
    "audio10_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 10"
    },
    "audio10_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio10",
        "group": "🎶 Áudio 10"
    },
    "audio11_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 11"
    },
    "audio11_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 11"
    },
    "audio11_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 11"
    },
    "audio11_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio11",
        "group": "🎶 Áudio 11"
    },
    "audio12_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 12"
    },
    "audio12_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 12"
    },
    "audio12_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 12"
    },
    "audio12_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio12",
        "group": "🎶 Áudio 12"
    },
    "audio13_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 13"
    },
    "audio13_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 13"
    },
    "audio13_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 13"
    },
    "audio13_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio13",
        "group": "🎶 Áudio 13"
    },
    "audio14_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 14"
    },
    "audio14_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 14"
    },
    "audio14_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 14"
    },
    "audio14_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio14",
        "group": "🎶 Áudio 14"
    },
    "audio15_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 15"
    },
    "audio15_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 15"
    },
    "audio15_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 15"
    },
    "audio15_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio15",
        "group": "🎶 Áudio 15"
    },
    "audio16_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 16"
    },
    "audio16_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 16"
    },
    "audio16_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 16"
    },
    "audio16_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio16",
        "group": "🎶 Áudio 16"
    },
    "audio17_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 17"
    },
    "audio17_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 17"
    },
    "audio17_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 17"
    },
    "audio17_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio17",
        "group": "🎶 Áudio 17"
    },
    "audio18_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 18"
    },
    "audio18_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 18"
    },
    "audio18_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 18"
    },
    "audio18_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio18",
        "group": "🎶 Áudio 18"
    },
    "audio19_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 19"
    },
    "audio19_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 19"
    },
    "audio19_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 19"
    },
    "audio19_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio19",
        "group": "🎶 Áudio 19"
    },
    "audio20_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 20"
    },
    "audio20_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 20"
    },
    "audio20_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 20"
    },
    "audio20_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio20",
        "group": "🎶 Áudio 20"
    },
    "audio21_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 21"
    },
    "audio21_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 21"
    },
    "audio21_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 21"
    },
    "audio21_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio21",
        "group": "🎶 Áudio 21"
    },
    "audio22_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 22"
    },
    "audio22_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 22"
    },
    "audio22_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 22"
    },
    "audio22_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio22",
        "group": "🎶 Áudio 22"
    },
    "audio23_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 23"
    },
    "audio23_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 23"
    },
    "audio23_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 23"
    },
    "audio23_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio23",
        "group": "🎶 Áudio 23"
    },
    "audio24_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 24"
    },
    "audio24_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 24"
    },
    "audio24_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 24"
    },
    "audio24_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio24",
        "group": "🎶 Áudio 24"
    },
    "audio25_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 25"
    },
    "audio25_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 25"
    },
    "audio25_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 25"
    },
    "audio25_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio25",
        "group": "🎶 Áudio 25"
    },
    "audio26_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 26"
    },
    "audio26_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 26"
    },
    "audio26_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 26"
    },
    "audio26_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio26",
        "group": "🎶 Áudio 26"
    },
    "audio27_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 27"
    },
    "audio27_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 27"
    },
    "audio27_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 27"
    },
    "audio27_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio27",
        "group": "🎶 Áudio 27"
    },
    "audio28_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 28"
    },
    "audio28_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 28"
    },
    "audio28_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 28"
    },
    "audio28_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio28",
        "group": "🎶 Áudio 28"
    },
    "audio29_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 29"
    },
    "audio29_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 29"
    },
    "audio29_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 29"
    },
    "audio29_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio29",
        "group": "🎶 Áudio 29"
    },
    "audio30_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 30"
    },
    "audio30_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 30"
    },
    "audio30_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 30"
    },
    "audio30_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio30",
        "group": "🎶 Áudio 30"
    },
    "audio31_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 31"
    },
    "audio31_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 31"
    },
    "audio31_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 31"
    },
    "audio31_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio31",
        "group": "🎶 Áudio 31"
    },
    "audio32_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 32"
    },
    "audio32_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 32"
    },
    "audio32_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 32"
    },
    "audio32_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio32",
        "group": "🎶 Áudio 32"
    },
    "audio33_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 33"
    },
    "audio33_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 33"
    },
    "audio33_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 33"
    },
    "audio33_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio33",
        "group": "🎶 Áudio 33"
    },
    "audio34_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 34"
    },
    "audio34_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 34"
    },
    "audio34_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 34"
    },
    "audio34_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio34",
        "group": "🎶 Áudio 34"
    },
    "audio35_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 35"
    },
    "audio35_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 35"
    },
    "audio35_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 35"
    },
    "audio35_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio35",
        "group": "🎶 Áudio 35"
    },
    "audio36_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 36"
    },
    "audio36_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 36"
    },
    "audio36_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 36"
    },
    "audio36_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio36",
        "group": "🎶 Áudio 36"
    },
    "audio37_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 37"
    },
    "audio37_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 37"
    },
    "audio37_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 37"
    },
    "audio37_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio37",
        "group": "🎶 Áudio 37"
    },
    "audio38_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 38"
    },
    "audio38_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 38"
    },
    "audio38_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 38"
    },
    "audio38_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio38",
        "group": "🎶 Áudio 38"
    },
    "audio39_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 39"
    },
    "audio39_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 39"
    },
    "audio39_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 39"
    },
    "audio39_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio39",
        "group": "🎶 Áudio 39"
    },
    "audio40_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 40"
    },
    "audio40_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 40"
    },
    "audio40_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 40"
    },
    "audio40_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio40",
        "group": "🎶 Áudio 40"
    },
    "audio41_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 41"
    },
    "audio41_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 41"
    },
    "audio41_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 41"
    },
    "audio41_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio41",
        "group": "🎶 Áudio 41"
    },
    "audio42_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 42"
    },
    "audio42_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 42"
    },
    "audio42_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 42"
    },
    "audio42_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio42",
        "group": "🎶 Áudio 42"
    },
    "audio43_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 43"
    },
    "audio43_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 43"
    },
    "audio43_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 43"
    },
    "audio43_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio43",
        "group": "🎶 Áudio 43"
    },
    "audio44_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 44"
    },
    "audio44_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 44"
    },
    "audio44_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 44"
    },
    "audio44_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio44",
        "group": "🎶 Áudio 44"
    },
    "audio45_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 45"
    },
    "audio45_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 45"
    },
    "audio45_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 45"
    },
    "audio45_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio45",
        "group": "🎶 Áudio 45"
    },
    "audio46_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 46"
    },
    "audio46_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 46"
    },
    "audio46_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 46"
    },
    "audio46_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio46",
        "group": "🎶 Áudio 46"
    },
    "audio47_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 47"
    },
    "audio47_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 47"
    },
    "audio47_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 47"
    },
    "audio47_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio47",
        "group": "🎶 Áudio 47"
    },
    "audio48_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 48"
    },
    "audio48_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 48"
    },
    "audio48_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 48"
    },
    "audio48_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio48",
        "group": "🎶 Áudio 48"
    },
    "audio49_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 49"
    },
    "audio49_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 49"
    },
    "audio49_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 49"
    },
    "audio49_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio49",
        "group": "🎶 Áudio 49"
    },
    "audio50_active": {
        "type": "checkbox",
        "label": "Ativar áudio",
        "value": false,
        "group": "🎶 Áudio 50"
    },
    "audio50_name": {
        "type": "text",
        "label": "Comando para acionar áudio",
        "value": "Digite o comando aqui",
        "group": "🎶 Áudio 50"
    },
    "audio50_file": {
        "type": "sound-input",
        "label": "Arquivo de áudio",
        "group": "🎶 Áudio 50"
    },
    "audio50_test": {
        "type": "button",
        "label": "Testar alerta",
        "value": "audio50",
        "group": "🎶 Áudio 50"
    }
}

Te ajudei? Me manda um cafézinho ^^

[email protected]