Audio Javascript中的音频平移,在屏幕上跟随一个圆圈

Audio Javascript中的音频平移,在屏幕上跟随一个圆圈,audio,web-audio-api,audiocontext,Audio,Web Audio Api,Audiocontext,我在React中制作了一个按钮,它会在屏幕上沿着一个圆圈左右移动产生声音。音频感觉平移不够,好像两个扬声器都有声音,我能做些什么来增加平移效果吗 function AudioButton ({seconds,amplitude}){ const [audio, setAudio] = useState(undefined); const [playing, setPlaying] = useState(false);

我在React中制作了一个按钮,它会在屏幕上沿着一个圆圈左右移动产生声音。音频感觉平移不够,好像两个扬声器都有声音,我能做些什么来增加平移效果吗

function AudioButton ({seconds,amplitude}){
    
        const [audio, setAudio] = useState(undefined);
        const [playing, setPlaying] = useState(false);
    
    
        useEffect(()=>{
    
            if (audio){
                audio.p.pan.value =(Math.sin(seconds / (60/amplitude)))  
                //audio.p.pan.value=-1;
            }
            
        }
    
        );
    
        return <button onClick={()=>{
            if (!playing){
                
                if (!audio){
                    var audioContext = new AudioContext()
                    var o = audioContext.createOscillator()
                    var g = audioContext.createGain()
                    let p = audioContext.createStereoPanner();
                    
                    o.connect(g)
                    g.connect(p);
                    p.connect(audioContext.destination);
                    g.connect(audioContext.destination)
                    
            
                    o.frequency.value = 528;
                    g.gain.value =0.25
                    //o.frequency.exponentialRampToValueAtTime(300, audioContext.currentTime + 2);
            
                    o.start();
                    setAudio({
                        o,
                        g,
                        p,
                        audioContext
                    });
                    setPlaying(true);
                    return;
                }
    
                setPlaying(true);
            }else {
                setPlaying(false);
                if (audio){
                    audio.o.stop();
                }
                
                setAudio(undefined);
            }
            
        }}>{playing?"Stop":"Start"}</button>
    }
功能音频按钮({秒,振幅}){
const[audio,setAudio]=使用状态(未定义);
const[playing,setPlaying]=useState(false);
useffect(()=>{
中频(音频){
audio.p.pan.value=(数学sin(秒/(60/振幅)))
//audio.p.pan.value=-1;
}
}
);
返回{
如果(!玩){
如果(!音频){
var audioContext=新的audioContext()
var o=audioContext.create振荡器()
var g=audioContext.createGain()
设p=audioContext.createStereoPanner();
o、 连接(g)
g、 连接(p);
p、 连接(audioContext.destination);
g、 连接(audioContext.destination)
o、 频率值=528;
g、 增益值=0.25
//o、 频率。指数RamptoValueAttime(300,audioContext.currentTime+2);
o、 start();
setAudio({
啊,,
G
P
音频语境
});
布景播放(真实);
返回;
}
布景播放(真实);
}否则{
布景播放(假);
中频(音频){
audio.o.stop();
}
setAudio(未定义);
}
}}>{播放?“停止”:“开始”}
}

首先,您可以尝试不将g连接到目标。