Skip to content

Instantly share code, notes, and snippets.

@rssilva
Created October 10, 2017 02:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rssilva/1c7ef7c205c82200af5a08eb21adad5f to your computer and use it in GitHub Desktop.
Save rssilva/1c7ef7c205c82200af5a08eb21adad5f to your computer and use it in GitHub Desktop.
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