【问题标题】:javascript new audioContext mono to Stereo not wordkingjavascript新的audioContext单声道到立体声不起作用
【发布时间】:2021-12-11 23:59:36
【问题描述】:

我需要使用网络音频 api 将我在项目中播放的 mp3 文件从单声道转换为立体声。但是这样做 a1 = new Audio(/1.mp3);我不能用。我的整个系统都是基于这个构建的。将页面上播放的所有声音转换为立体声或新音频(/1.mp3);有没有办法转换用创建的声音。

var a1 = new Audio(`/1.mp3`);

a1.volume = .5;
a1.play()

我使用的是上面的简单代码结构。

https://stackoverflow.com/a/54990085/15929287 我无法为自己调整上述答案。我无法将使用 new audio() 创建的声音转换为立体声。在链接中的示例中,还添加了振荡器。我只是想做一些可以调整单声道/立体声设置的事情。我需要你的帮助。

【问题讨论】:

  • 嗨,我是您链接的答案的作者。我很乐意提供帮助,但我不确定我是否理解您的问题。你做了什么来将音频元素连接到AudioContext,究竟是什么不起作用?
  • 您好,非常感谢。你的答案是一个很好的答案。我的问题是将它应用于我使用 new Audio() 创建的音频,而不是使用 AudioContext。我找到了使用 AudioContext 制作的示例,但没有找到使用 new Audio() 制作的示例。这可能吗?再次感谢您。

标签: javascript html5-audio web-audio-api


【解决方案1】:

linked answer 假定单声道音频源是使用 Web Audio API 创建的振荡器,但也可以通过使用 MediaElementAudioSourceNode 将音频元素用作源。

然后需要像这样连接音频图:

const audio = new Audio('/1.mp3');
const audioCtx = new AudioContext();
const source = audioCtx.createMediaElementSource(audio);
const gainNodeL = audioCtx.createGain();
const gainNodeR = audioCtx.createGain();
const merger = audioCtx.createChannelMerger(2);

source.connect(gainNodeL);
source.connect(gainNodeR);

gainNodeL.connect(merger, 0, 0);
gainNodeR.connect(merger, 0, 1);

merger.connect(audioCtx.destination);

请注意,可能仍需要在AudioContext 上调用resume() 以响应用户手势以确保AudioContext 正在运行。

【讨论】:

  • 非常感谢!!!
  • 不客气。
  • 我认为这可以通过使用单个增益节点并设置 gain.ChannelCountMode = 'explicit' 和 gain.channelCount = 2 来稍微简化。这意味着输入混合到 2 个通道(立体声) , 所以你的单声道输入混合成立体声,然后是增益节点的输出。
  • 哦,是的,这是真的。链接的问题/答案也是关于如何独立调平每个频道。但如果这不是必要的,因为单个 GainNode 也应该可以工作。
猜你喜欢
  • 2011-09-11
  • 2015-08-04
  • 1970-01-01
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多