É possível reproduzir o som sintetizado no navegador usando JavaScript?
-
22-07-2019 - |
Pergunta
Eu deparei com um Nintendo emulador escrito inteiramente em JavaScript nas interwebs, mas ele doesn 't tem som. Isso me fez pensar: Existe alguma maneira de som sintetizar no navegador usando JavaScript e, em seguida, jogá-lo? Se não é possível em geral, então há alguma Safari / Opera / Firefox / IE / Etc. extensões que tornaria possível?
Eu não estou perguntando sobre técnicas para a síntese de som, técnicas apenas para reprodução de sons que foram sintetizados por código em execução no navegador.
Solução
Eu imagino a sua melhor aposta é a de ter o Javascript talk to Flash usando ExternalInterface ( http://www.adobe.com/devnet/flash/articles/external_interface.html ). Flash agora tem uma maneira de transferir dados entre os buffers de som e um ByteArray classs propósito geral.
http://www.adobe.com/devnet/flash/articles/ dynamic_sound_generation /
Você pode desenvolver Flash para livre usando o Flex SDK http://www.adobe.com/ produtos / flex / .
Outras dicas
A maioria dos desenvolvedores usar SoundManager 2 quando querem adicionar som a sua aplicação com JavaScript . Tem ganchos assim JavaScript pode interagir com Flash 8 e 9 características. Eu não tenho certeza se ele expôs a capacidade de trabalhar com Byte de dados que eu acho que você está depois, eu nunca tive que lidar com isso.
Acontece que o autor do emulador de NES encontrou uma biblioteca de áudio dinâmico:
https://github.com/bfirsh/dynamicaudio.js
Eu não tentei, mas os docs parecem promissores:
var dynamicaudio = new DynamicAudio ({ 'swf': '/Static/dynamicaudio.swf'})
escrita (amostras); // Reproduz um conjunto de amostras de áudio de ponto flutuante no intervalo -1,0 a 1.0.
Em teoria, deveria ser possível sintetizar os sons e, em seguida, obter o navegador para reproduzi-los usando uma URL de dados.
Na prática, Steven Wittens tem realmente produziu um demonstração desta técnica. As funções encodeAudio8bit
e encodeAudio16bit
são onde a mágica acontece.