Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多个音频文件的位置相关音频播放_Javascript_Html_Audio_Web Audio Api_Wavesurfer.js - Fatal编程技术网

Javascript 多个音频文件的位置相关音频播放

Javascript 多个音频文件的位置相关音频播放,javascript,html,audio,web-audio-api,wavesurfer.js,Javascript,Html,Audio,Web Audio Api,Wavesurfer.js,我一直在设计一款基于html/js的媒体播放器,其目标是为用户提供一些普通DAW中的简单播放和区域移动功能。我的ui由5个单独的曲目和播放控件组成。通过使用wavesurfer.js,我已经能够成功地在这些曲目中创建任意数量的wavesurfer实例/区域,将它们拖动并定位到我喜欢的任何位置,并播放选定的音频文件 在我对wavesurfer.js的实验中,我发现每个实例都有自己的播放头,它指示选定音频文件的当前播放位置,并允许用户在该实例中导航播放 我的问题是,我还希望有一个不包含在任何特定实例

我一直在设计一款基于html/js的媒体播放器,其目标是为用户提供一些普通DAW中的简单播放和区域移动功能。我的ui由5个单独的曲目和播放控件组成。通过使用wavesurfer.js,我已经能够成功地在这些曲目中创建任意数量的wavesurfer实例/区域,将它们拖动并定位到我喜欢的任何位置,并播放选定的音频文件

在我对wavesurfer.js的实验中,我发现每个实例都有自己的播放头,它指示选定音频文件的当前播放位置,并允许用户在该实例中导航播放

我的问题是,我还希望有一个不包含在任何特定实例中的单一“主”播放头,我不确定如何实现这一点。

虽然存在复杂的web DAW,但我还没有找到一个能真正帮助我理解如何以我需要的方式处理音频播放的源。但我知道以前已经做过了。我已经阅读了webaudio API和wavesurfer.js文档,除非wavesurfer的功能中缺少一些东西,否则我假设我需要使用webaudio API来实现这一结果——我会首先将一个新的AudioContext对象定义为AudioNode,该对象由所有当前音频文件组成吗

对于多个音频文件/wavesurfer实例,其播放必须取决于其在整个曲目工作区上下文中的用户确定位置,我将如何处理音频播放?


感谢您提供的任何见解,我非常感谢。

如果您使用例如5个跟踪,您需要注意,如果您将它们加载到音频缓冲区(或您称之为em的音频节点)中,如果它们更长,它们的RAM量实际上会变得相当大。因此,如果您使用五个音频元素并设置它们的状态和位置,也许您可以达到您的目标,尽管这些音频元素不能通过过滤器和效果等(卷积器等)轻松访问。这真的取决于你的设置和原型不应该太难编程,所以如果你真的对它充满热情,你可以两者兼而有之

在我的网站1ln.de,您可以在音频位置加载mp3文件(不同),如果在内存中加载5个mp3,RAM将达到8 GB的30%。但RAM比流式音频快得多。因为音频元素首先需要缓冲其内容,而您无法像音频缓冲区那样轻松地处理和操作它们

这实际上取决于您的工具的灵活性和您想要实现的目标

对于专业使用和快速播放,我建议您使用音频缓冲区播放。不过,首先解码音频文件需要一些时间。但您可以在缓冲完成时进行处理

希望我把你的问题答对了


如果你想为DAW编程,请随时打招呼寻求帮助

欢迎来到SO。您已经标记了JavaScript,并且没有发布任何代码行,这样我们就可以看到您所做的事情以及您遇到的问题。您需要包含一些代码作为启动的基础,否则您将得不到任何帮助。您可以使用范围更高的var,而不在构造函数中进行范围划分。