HTML5 Web Audio 可以像 DAW 一样高质量吗?
Can HTML5 Web Audio be as high quality as a DAW?
此题主要针对音频工程师。
我正在观看一些视频 here and here,内容涉及 javascript 中的网络音频 API 以及人们如何使用它制作音乐。我想知道这 API 是否可以用于在现有数字音频工作站 (DAW)(如 Ableton、FL Studio、Reason、Logic 等)的水平上创建音质。
或者浏览器是否存在某种固有的限制?我认为 Web Audio 不能使用 VST API,但是不管 VST 有没有 DAW 使用的音频引擎可以做到而 Web Audio 在质量上做不到的事情?或者声音能不能一样好。我相信样本可以同样有效地播放(?),但合成可能会受到限制?
Can HTML5 Web Audio be as high quality as a DAW?
是的!浏览器使用高质量的音频引擎,全程使用浮点样本。
此外,API 本身是最易于使用且可扩展的工具之一。它还支持非常具体的控制时间。
I think VSTs cannot be used by Web Audio API
没错。
but maybe the synthesis would be limited?
没有真正的基本限制。如果你会编码,你就能做到。
现在,有几件事你没有问过但仍然应该知道。首先是延迟问题。浏览器不使用 ASIO 或类似的东西,所以如果你使用网络音频 API 来处理和 return 低延迟音频,你将有一段糟糕的时光。在 Chrome 中,您可以通过让 Chrome 以独占模式打开音频设备来改善这一点。
另一个问题是 input/output 频道数。这通常会达到 8 个通道的最大值。但是在内部,您几乎可以做任何您想做的事情。限制来自浏览器,而不是网络音频 API 本身。
有一些高质量的音频应用程序可以在浏览器中 运行,但您只能在 Chromium-based 浏览器中进行实时音频,即使那样您也无法获得实时输入。
只有 Chromium 支持 Audio Worklet 中的 high-priority 个音频线程,您需要这些线程才能获得稳定的实时音频。
WebMIDI API 仅在主线程上 运行s,这使得它无法用于实时输入。
WebUSB API 是可线程化的,但不允许与 audio-class 设备(包括 MIDI 控制器(和声卡))通信。
键盘、触摸和鼠标事件必须(当前)由主线程处理。
所以,简而言之,您没有(实用的)方法来控制 Chromium 中的实时音频,甚至无法在任何其他平台上(可靠地)进行实时音频。
注意:九年前就要求添加对 WebMIDI worker 的支持,这个问题仍然悬而未决(只是为了将其添加到规范中)。
注意:Electron 将允许您访问受保护的 USB 设备 类 (Audio/MIDI),但 Electron WebUSB 支持仍在进行中。 NWJS 支持 WebUSB,但无法访问受保护设备 类(尽管我最近提出了一个问题)。 WebUSB 最终将在这些平台上运行,但您仍然需要为您的控制器(甚至是 class-compliant 个控制器)实现网络驱动程序,因此即使它可以运行,这也不是一个理想的解决方案。
此题主要针对音频工程师。
我正在观看一些视频 here and here,内容涉及 javascript 中的网络音频 API 以及人们如何使用它制作音乐。我想知道这 API 是否可以用于在现有数字音频工作站 (DAW)(如 Ableton、FL Studio、Reason、Logic 等)的水平上创建音质。
或者浏览器是否存在某种固有的限制?我认为 Web Audio 不能使用 VST API,但是不管 VST 有没有 DAW 使用的音频引擎可以做到而 Web Audio 在质量上做不到的事情?或者声音能不能一样好。我相信样本可以同样有效地播放(?),但合成可能会受到限制?
Can HTML5 Web Audio be as high quality as a DAW?
是的!浏览器使用高质量的音频引擎,全程使用浮点样本。
此外,API 本身是最易于使用且可扩展的工具之一。它还支持非常具体的控制时间。
I think VSTs cannot be used by Web Audio API
没错。
but maybe the synthesis would be limited?
没有真正的基本限制。如果你会编码,你就能做到。
现在,有几件事你没有问过但仍然应该知道。首先是延迟问题。浏览器不使用 ASIO 或类似的东西,所以如果你使用网络音频 API 来处理和 return 低延迟音频,你将有一段糟糕的时光。在 Chrome 中,您可以通过让 Chrome 以独占模式打开音频设备来改善这一点。
另一个问题是 input/output 频道数。这通常会达到 8 个通道的最大值。但是在内部,您几乎可以做任何您想做的事情。限制来自浏览器,而不是网络音频 API 本身。
有一些高质量的音频应用程序可以在浏览器中 运行,但您只能在 Chromium-based 浏览器中进行实时音频,即使那样您也无法获得实时输入。
只有 Chromium 支持 Audio Worklet 中的 high-priority 个音频线程,您需要这些线程才能获得稳定的实时音频。
WebMIDI API 仅在主线程上 运行s,这使得它无法用于实时输入。
WebUSB API 是可线程化的,但不允许与 audio-class 设备(包括 MIDI 控制器(和声卡))通信。
键盘、触摸和鼠标事件必须(当前)由主线程处理。
所以,简而言之,您没有(实用的)方法来控制 Chromium 中的实时音频,甚至无法在任何其他平台上(可靠地)进行实时音频。
注意:九年前就要求添加对 WebMIDI worker 的支持,这个问题仍然悬而未决(只是为了将其添加到规范中)。
注意:Electron 将允许您访问受保护的 USB 设备 类 (Audio/MIDI),但 Electron WebUSB 支持仍在进行中。 NWJS 支持 WebUSB,但无法访问受保护设备 类(尽管我最近提出了一个问题)。 WebUSB 最终将在这些平台上运行,但您仍然需要为您的控制器(甚至是 class-compliant 个控制器)实现网络驱动程序,因此即使它可以运行,这也不是一个理想的解决方案。