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中使用构造函数。