Created
October 10, 2017 02:14
-
-
Save rssilva/1c7ef7c205c82200af5a08eb21adad5f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const playSignal = (signal = [], audioContext, sampleRate) => { | |
const signalLength = signal.length | |
// Este nó será usado como fonte para tocar o sinal | |
const node = audioContext.createBufferSource() | |
// Vamos criar o buffer que será atribuído para o nó acima | |
// Os argumentos são: número de canais, o comprimento do buffer, que | |
// é o mesmo do sinal e taxa de amostragem | |
// Taxa de amostrage é basicamente quantas amostras o array de som contém por segundo | |
// se a taxa de amostragem é 3000 e você quer construir um sinal com 2 segundos, você vai precisar | |
// de um array com comprimento de 6000 | |
const buffer = audioContext.createBuffer(1, signalLength, sampleRate) | |
// Esta é a data contida no buffer que criamos, como criamos um buffer vazio, é um array cheio de zeros | |
const data = buffer.getChannelData(0) | |
// Vamos escrever os valores do sinal no buffer... | |
for (let i = 0; i < signalLength; i += 1) { | |
data[i] = signal[i] | |
} | |
// depois atribuir o buffer à propriedade node.buffer | |
node.buffer = buffer | |
// Vamos connectar o nó ao audioContext.destination, que são os alto-falantes | |
// audioContext é o contexto que você precisa manipular para ter todas essas coisas legais da api | |
node.connect(audioContext.destination) | |
// agora iniciamos a tocar! | |
node.start(audioContext.currentTime) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment