MediaStreamAudioSourceNode - Web API 接口参考 编辑

MediaStreamAudioSourceNode 接口代表一个音频接口,是WebRTC MediaStream (比如一个摄像头或者麦克风)的一部分。是个表现为音频源的AudioNode

MediaElementSourceNode没有输入,并且只有一个输出。创建之后使用 AudioContext.createMediaStreamSource方法。输出通道的数量和AudioMediaStreamTrack的通道数量相同。如果没有有效的媒体流,输出通道就变成一个静音的通道。

Number of inputs0
Number of outputs1
Channel countAudioMediaStreamTrack定义,传递给 AudioContext.createMediaStreamSource ,并由此创建。

构造器

MediaStreamAudioSourceNode.MediaStreamAudioSourceNode()
创建一个新的MediaStreamAudioSourceNode实例。

属性

AudioNode上继承。

方法

AudioNode上继承。

示例

本例中,我们从 navigator.getUserMedia获取媒体 (audio + video) 流,,把它传入 <video>中播放,并把视频调成静音,然后把获取到的audio传入 MediaStreamAudioSourceNode。接下来我们把获取到的audio传入BiquadFilterNode (可以把声音转化为低音),输出到 AudioDestinationNode.

<video> 元素下面滑动杆控制低音过滤器过滤的程度,滑动杆的值越大,低音更明显

注意:你可以查看 在线演示,或者 查看源码

var pre = document.querySelector('pre');
var video = document.querySelector('video');
var myScript = document.querySelector('script');
var range = document.querySelector('input');

// getUserMedia获取流
// 把流放入MediaStreamAudioSourceNode
// 输出到video元素

if (navigator.mediaDevices) {
    console.log('getUserMedia supported.');
    navigator.mediaDevices.getUserMedia ({audio: true, video: true})
    .then(function(stream) {
        video.srcObject = stream;
        video.onloadedmetadata = function(e) {
            video.play();
            video.muted = true;
        };

        // 创建MediaStreamAudioSourceNode
        // Feed the HTMLMediaElement into it
        var audioCtx = new AudioContext();
        var source = audioCtx.createMediaStreamSource(stream);

        // 创建二阶滤波器
        var biquadFilter = audioCtx.createBiquadFilter();
        biquadFilter.type = "lowshelf";
        biquadFilter.frequency.value = 1000;
        biquadFilter.gain.value = range.value;

        // 把AudioBufferSourceNode连接到gainNode
        // gainNode连接到目的地, 所以我们可以播放
        // 音乐并用鼠标调节音量
        source.connect(biquadFilter);
        biquadFilter.connect(audioCtx.destination);

        // Get new mouse pointer coordinates when mouse is moved
        // then set new gain value

        range.oninput = function() {
            biquadFilter.gain.value = range.value;
        }
    })
    .catch(function(err) {
        console.log('The following gUM error occured: ' + err);
    });
} else {
   console.log('getUserMedia not supported on your browser!');
}

// dump script to pre element

pre.innerHTML = myScript.innerHTML;

注意: 调用createMediaStreamSource(), 来自于媒体流的音频回放将被重新传到AudioContext的处理器中。所以播放/暂停流仍然是可以通过media元素的API和自带的控制器控制。

 

规范

SpecificationStatusComment
Web Audio API
MediaStreamAudioSourceNode
Working Draft 

兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support14 webkit(Yes)25 (25)未实现15 webkit
22 (unprefixed)
6 webkit
Constructor(Yes)?未实现未实现?未实现
FeatureAndroidChromeEdgeFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Basic support未实现28 webkit(Yes)25.0 (25)未实现未实现webkit
Constructor未实现(Yes)?未实现未实现?未实现

See also

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:126 次

字数:10953

最后编辑:8年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文