mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-04 22:37:29 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
109
dom/media/tests/mochitest/test_getUserMedia_audioCapture.html
Normal file
109
dom/media/tests/mochitest/test_getUserMedia_audioCapture.html
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Test AudioCapture </title>
|
||||
<script type="application/javascript" src="mediaStreamPlayback.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<pre id="test">
|
||||
<script>
|
||||
|
||||
createHTML({
|
||||
bug: "1156472",
|
||||
title: "Test AudioCapture with regular HTMLMediaElement, AudioContext, and HTMLMediaElement playing a MediaStream",
|
||||
visible: true
|
||||
});
|
||||
|
||||
scriptsReady
|
||||
.then(() => FAKE_ENABLED = false)
|
||||
.then(() => {
|
||||
runTestWhenReady(function() {
|
||||
// Get an opus file containing a sine wave at maximum amplitude, of duration
|
||||
// `lengthSeconds`, and of frequency `frequency`.
|
||||
function getSineWaveFile(frequency, lengthSeconds, callback) {
|
||||
var chunks = [];
|
||||
var off = new OfflineAudioContext(1, lengthSeconds * 48000, 48000);
|
||||
var osc = off.createOscillator();
|
||||
var rec = new MediaRecorder(osc);
|
||||
rec.ondataavailable = function(e) {
|
||||
chunks.push(e.data);
|
||||
};
|
||||
rec.onstop = function(e) {
|
||||
var blob = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' });
|
||||
callback(blob);
|
||||
}
|
||||
osc.frequency.value = frequency;
|
||||
osc.start();
|
||||
rec.start();
|
||||
off.startRendering().then(function(buffer) {
|
||||
rec.stop();
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Get two HTMLMediaElements:
|
||||
* - One playing a sine tone from a blob (of an opus file created on the fly)
|
||||
* - One being the output for an AudioContext's OscillatorNode, connected to
|
||||
* a MediaSourceDestinationNode.
|
||||
*
|
||||
* Also, use the AudioContext playing through its AudioDestinationNode another
|
||||
* tone, using another OscillatorNode.
|
||||
*
|
||||
* Capture the output of the document, feed that back into the AudioContext,
|
||||
* with an AnalyserNode, and check the frequency content to make sure we
|
||||
* have recorded the three sources.
|
||||
*
|
||||
* The three sine tones have frequencies far apart from each other, so that we
|
||||
* can check that the spectrum of the capture stream contains three
|
||||
* components with a high magnitude.
|
||||
*/
|
||||
var wavtone = createMediaElement("audio", "WaveTone");
|
||||
var acTone = createMediaElement("audio", "audioContextTone");
|
||||
var ac = new AudioContext();
|
||||
|
||||
var oscThroughMediaElement = ac.createOscillator();
|
||||
oscThroughMediaElement.frequency.value = 1000;
|
||||
var oscThroughAudioDestinationNode = ac.createOscillator();
|
||||
oscThroughAudioDestinationNode.frequency.value = 5000;
|
||||
var msDest = ac.createMediaStreamDestination();
|
||||
|
||||
oscThroughMediaElement.connect(msDest);
|
||||
oscThroughAudioDestinationNode.connect(ac.destination);
|
||||
|
||||
acTone.mozSrcObject = msDest.stream;
|
||||
|
||||
getSineWaveFile(10000, 10, function(blob) {
|
||||
wavtone.src = URL.createObjectURL(blob);
|
||||
oscThroughMediaElement.start();
|
||||
oscThroughAudioDestinationNode.start();
|
||||
wavtone.loop = true;
|
||||
wavtone.play();
|
||||
acTone.play();
|
||||
});
|
||||
|
||||
var constraints = {audio: {mediaSource: "audioCapture"}};
|
||||
|
||||
return getUserMedia(constraints).then((stream) => {
|
||||
window.grip = stream;
|
||||
var analyser = new AudioStreamAnalyser(ac, stream);
|
||||
analyser.enableDebugCanvas();
|
||||
return analyser.waitForAnalysisSuccess(function(array) {
|
||||
// We want to find three frequency components here, around 1000, 5000
|
||||
// and 10000Hz. Frequency are logarithmic. Also make sure we have low
|
||||
// energy in between, not just a flat white noise.
|
||||
return (array[analyser.binIndexForFrequency(50)] < 50 &&
|
||||
array[analyser.binIndexForFrequency(1000)] > 200 &&
|
||||
array[analyser.binIndexForFrequency(2500)] < 50 &&
|
||||
array[analyser.binIndexForFrequency(5000)] > 200 &&
|
||||
array[analyser.binIndexForFrequency(7500)] < 50 &&
|
||||
array[analyser.binIndexForFrequency(10000)] > 200);
|
||||
}).then(finish);
|
||||
}).catch(finish);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue