mirror of
https://github.com/exoticorn/microw8.git
synced 2026-01-20 19:26:43 +01:00
35 lines
1.3 KiB
HTML
35 lines
1.3 KiB
HTML
<html>
|
|
<button onclick="go()">Go!</button>
|
|
<script>
|
|
function go() {
|
|
let audioContext = new AudioContext({sampleRate: 44100});
|
|
|
|
let oscillator = new OscillatorNode(audioContext);
|
|
let gain = new GainNode(audioContext, {gain: 1});
|
|
oscillator.connect(gain);
|
|
gain.connect(audioContext.destination);
|
|
for(let i = 0; i < 4; ++i ) {
|
|
gain.gain.setValueAtTime(1, i / 2);
|
|
gain.gain.setValueAtTime(0, i / 2 + 0.3);
|
|
}
|
|
oscillator.start();
|
|
oscillator.stop(2);
|
|
|
|
let audioStreamNode = audioContext.createMediaStreamDestination();
|
|
gain.connect(audioStreamNode);
|
|
let recorder = new MediaRecorder(audioStreamNode.stream, { mimeType: 'audio/ogg; codecs=opus' });
|
|
|
|
let chunks = [];
|
|
recorder.ondataavailable = e => chunks.push(e.data);
|
|
recorder.onstop = () => {
|
|
let blob = new Blob(chunks, {type: 'audio/ogg; codecs=opus'});
|
|
let url = URL.createObjectURL(blob);
|
|
let audio = new Audio(url);
|
|
audio.play();
|
|
};
|
|
|
|
recorder.start();
|
|
setTimeout(() => recorder.stop(), 2000);
|
|
}
|
|
</script>
|
|
</html> |