WebAudio API更改其中一个源的音量

我正在读这个article

我正在读这个article

我的目标是同时播放两个声音。一个声音在不同的音量。拥有常规的“音频”标签不是一个解决方案,因为它在移动设备上效果不佳。所以我开始潜入 Web Audio API。

我写了的代码,在所有设备上都能很好地工作。单一问题-我无法弄清楚如何控制音量。来自 example 的代码不工作 (

请帮助

function init() {
// Fix up prefixing
window.AudioContext = window.AudioContext || window.webkitAudioContext;
context = new AudioContext();
bufferLoader = new BufferLoader(
    context,
    [
    'mp3/speech.mp3',
    'mp3/bg-melody.mp3',
    ],
    finishedLoading
    );
bufferLoader.load();
}
function finishedLoading(bufferList) {
   document.querySelector('.message').innerHTML = "Ready to play"
  // Create two sources and play them both together.
  source1 = context.createBufferSource();
  source2 = context.createBufferSource();
  source1.buffer = bufferList[0];
  source2.buffer = bufferList[1];
  source1.connect(context.destination);
  // This code is not working
  var gainNode = context.createGain();
  gainNode.gain.value = 0.1;
  source2.connect(gainNode);
  source2.connect(context.destination);
 source2.loop = true;
}
Update:

此更改修复了问题

source2.connect(gainNode).connect(context.destination);
1

connect()方法返回一个AudioNode,然后必须在其上调用connect(),以便将节点链接在一起:

const gainNode = context.createGain()
source2
  .connect(gainNode)
  .connect(context.destination)
const $ = document.querySelector.bind(document)
const $$ = document.querySelectorAll.bind(document)
const audioCtx = new (AudioContext || webkitAudioContext)()
const gainNodes = [
  audioCtx.createGain(),
  audioCtx.createGain(),
]
const url = 'https://opus-bitrates.anthum.com/audio/music-96.opus'
loadAudio(url, gainNodes[0])
loadAudio(url, gainNodes[1],
  15.132 / (32 * 2),  // 32 beats in 15.132s
)
$$('input').forEach((el, i) => {
  gainNodes[i].gain.value = el.value / 100
  el.oninput = () => gainNodes[i].gain.value = el.value / 100
})
$('#play').onclick = play
$('#pause').onclick = pause
async function loadAudio(url, gainNode, delayS = 0) {
  const buffer = await (await fetch(url)).arrayBuffer()
  const source = audioCtx.createBufferSource()
  source.buffer = await audioCtx.decodeAudioData(buffer)
  source.loop = true
  source
    .connect(gainNode)
    .connect(audioCtx.destination)
  source.start(delayS)
}
function play() { audioCtx.resume() }
function pause() { audioCtx.suspend() }
<on id="play">Play</on><on id="pause">Pause</on><br />
<label><input type="range" value="50" max="100" /> Track 1</label><br />
<label><input type="range" value="50" max="100" /> Track 2</label>

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(819)
如何通过 SP-API或PA-API获取产品广告数据
上一篇
在添加 /更新/删除项目时对屏幕中的本机导航-更新列表做出反应(navigation updater)
下一篇

相关推荐

  • python项目实践:如何使用Python构建一个Web应用

    示例示例Python项目实践是指使用Python语言编写的项目,以实现特定的功能。下面是一个简单的Python项目实践示例:# 导入所需的库…

    2023-04-28 06:46:11
    0 10 40
  • python django项目:如何使用Python Django构建功能强大的Web应用程序

    Python Django项目是一种使用Python语言开发的Web应用框架,它具有快速开发、易于扩展和更新等优点。它使用MVC(Model-View-Controller)模式来组织代码,以提供更好的可维护性和可扩展性。…

    2023-05-13 14:28:25
    0 32 22
  • python selenium菜鸟教程:如何使用Python Selenium进行Web自动化测试

    Python Selenium菜鸟教程是一个指导开发人员如何使用Selenium来自动化Web应用程序的教程。它涵盖了Selenium的基本概念,以及如何使用它来测试Web应用程序,让您可以轻松地构建自动化测试。…

    2023-04-03 09:02:00
    0 87 79
  • pythonweb框架排名排名前十

    示例示例Python web框架排名:Django:Django是一个开放源代码的Web应用框架,由Python写成。它有着完整的MVC模型,具有丰富的功能,可以帮助开发者快速构建复杂的Web应用。…

    2023-05-13 01:26:43
    0 18 39
  • web sql编辑器创建功能强大的数据库

    Web SQL 编辑器是一种在浏览器中使用的 SQL 数据库编辑器。它可以用来执行 SQL 语句,查看数据库结构,创建新的数据库,编辑表结构和数据,以及运行查询。…

    2023-04-20 01:41:57
    0 26 51
  • python 可以干什么:Python可以用来构建强大的Web应用程序

    Python 是一种高级编程语言,它可以用于创建各种应用程序,其中包括网络应用程序、科学计算、数据可视化、机器学习、游戏开发以及更多。…

    2023-04-04 07:22:59
    0 85 90
  • django数据库:如何使用Django数据库创建强大的Web应用

    Django数据库是一种面向对象的关系型数据库,用于存储Python应用程序中的数据。它使用了一种叫做ORM(对象关系映射)的技术,它将数据库中的表,行和列映射到Python对象上。 Django数据库支持多种数据库,包括SQLite,MySQL,PostgreSQL和Oracle。…

    2023-06-14 12:53:19
    0 81 70
  • pythonweb服务器:如何使用Python搭建Web服务器

    Python Web服务器是一种使用Python语言编写的Web服务器,它可以接受HTTP请求并返回相应的响应。Python Web服务器可以处理动态内容,比如数据库查询,文件上传,CGI脚本等。…

    2023-02-21 09:00:29
    0 71 39

发表评论

登录 后才能评论

评论列表(2条)