Html5 audio 为什么振荡器的网络音频输出不能按预期工作?
代码如下: 我想创建一个音频程序,可以播放从极低频到高频的音频 但是,此代码会导致不同的输出(即使使用相同的设备):Html5 audio 为什么振荡器的网络音频输出不能按预期工作?,html5-audio,web-audio-api,audiocontext,Html5 Audio,Web Audio Api,Audiocontext,代码如下: 我想创建一个音频程序,可以播放从极低频到高频的音频 但是,此代码会导致不同的输出(即使使用相同的设备): 声音突然发出——预期的结果是逐渐发出。我确信我的听力没有问题,因为我已经请我的朋友听了 同一频率上的音频听起来不同 警告:在运行此脚本之前,请将音量调到非常低的位置,以防受到伤害。 var audioCtx=new(window.AudioContext | | window.webkitadiocontext)(); //创建振荡器节点 var振荡器=audioCtx.cre
var audioCtx=new(window.AudioContext | | window.webkitadiocontext)();
//创建振荡器节点
var振荡器=audioCtx.create振荡器();
var osc_arr=[];
函数purgeSound(){
osc_arr.forEach(功能(v){
试一试{
v、 停止();
v、 断开(audioCtx.目的地);
}捕获(e){}
})
}
功能playSoundAtFreq(fq){
purgeSound();
var osc=audioCtx.create振荡器();
osc_arr.push(osc);
osc.type=‘方形’;
osc.frequency.setValueAtTime(fq,audioCtx.currentTime);//以赫兹为单位的值
$('fff').val(fq);
osc.connect(audioCtx.destination);
osc.start();
}
$('#停止')。单击(函数(){
purgeSound();
_中断=正确;
})
var _break=false;
功能睡眠(ms){
返回新承诺(resolve=>setTimeout(resolve,ms));
}
var指针=0;
var go=appendAttemptAsync(10000);
异步函数appendAttemptAsync(范围){
如果(_break)返回;
var目标=指针+范围;
对于(pointer;pointer如果您希望振荡器像YouTube视频中那样扫描,您可以执行以下操作:
let osc = new OscillatorNode(audioCtx);
osc.connect(audioCtx.destination);
osc.frequency.setValueAtTime(20, audioCtx.currentTime);
osc.frequency.linearRampToValueAtTime(audioCtx.sampleRate / 2, audioCtx.currentTime + 300);
osc.start();
将300
更改为某个适当的时间,在该时间段内,音调会扫描。我任意选择了5分钟
我不知道为什么您的示例不起作用,但这段代码是使用WebAudio扫音的典型方式。什么是“逐渐出现”的意思?什么是音频在相同频率下听起来不同?您的测试不会产生相同的频率。使用“逐渐”一词我的意思是,我想创造一种从低频到高频的声音。不确定你在寻找什么。至少在chrome上,你在按下stop之前不会听到任何声音,因为chrome的自动播放策略会阻止输出,直到出现用户手势。如果你加上启动按钮来启动振荡器,那么我怀疑它会我的Chrome可以自动启动。它不需要启动按钮。我想要的是这样的:我想用JavaScript来模拟这个视频中的内容。嗨,雷蒙德,非常感谢。它可以,但我还有一个问题,我用我的iPhone-X来播放这个视频。它不工作,网络音频只有su吗pport Desktop?WebAudio当然可以在移动设备上使用。抱歉,但我不知道为什么它不能在iPhone上使用。我认为你最好向苹果和/或WebKit提出有关这方面的问题。你有其他移动品牌可以播放声音吗?只是想知道……我有兴趣提出问题,但如果有可以运行它的设备,我会的推送它们更容易:)我只有Android设备,你的代码笔对我来说很好。我认为代码笔在Safari中不起作用的原因是这一行let osc=new OscillatorNode(audioCtx);
。Safari不支持构造函数语法。你可以这样重写:let osc=audioCtx.createOscillator();
。或者,如果您想坚持使用新语法,您可以使用标准化的音频上下文,这也让您可以在Safari中使用构造函数。