gpt4 book ai didi

audio - 网络声卡检测

转载 作者:行者123 更新时间:2023-12-05 00:27:17 24 4
gpt4 key购买 nike

我们需要为一个业余爱好网络项目做一些准备。在这个阶段,我们要检测客户端的声卡并将来自声卡的任何内容引导到服务器来处理音频。低延迟对我们来说是一个重要的问题。因此,我们需要您对语言、库等的使用建议。如果你能给我们一些关于大局的信息,那么我们可以自己研究。

最佳答案

捕获音频客户端
您可以使用 Web Audio API连同 getUserMedia (通常被认为是 WebRTC 功能集的一部分)从用户那里捕获音频(和视频,如果需要的话)。这是来自 excellent HTML5Rocks.com tutorial on getUserMedia 的代码示例:

window.AudioContext = window.AudioContext ||
window.webkitAudioContext;

var context = new AudioContext();

navigator.getUserMedia({audio: true}, function(stream) {
var microphone = context.createMediaStreamSource(stream);
var filter = context.createBiquadFilter();

// microphone -> filter -> destination.
microphone.connect(filter);
filter.connect(context.destination);
}, errorCallback);
在这个例子中,我们要求用户访问他们的“麦克风”。如果他们给了我们,我们会使用 AudioContext::createMediaStreamSource() 创建一个常规的 AudioNode。一旦我们有了这个节点,它就可以连接到链中的其他节点,让你可以用它做任何你想做的事情。
这需要现代浏览器。目前只有 Chrome 和 Firefox 同时支持这两种功能。 (检查 Web AudiogetUserMedia 的更新兼容性,但请注意,仅仅因为浏览器支持两者并不能保证它会工作。)此外,您可能需要解决一些浏览器的怪癖。最让我烦恼的是一个 Chrome issue where your nodes are garbage collected while they are still in use . Firefox 的 SplitterNode 也有问题,并非所有 channel 都可以工作。检测浏览器支持也并不总是那么简单,因为一些浏览器(特别是 Android 上的 Chrome)声称支持甚至运行您的 AudioContext,但只是从 getUserMediaStream 返回空样本。简而言之,到处测试,如果遇到问题,不要指望从浏览器开发人员那里得到太多帮助。它是 not an adopted standard yet (但相当成熟)。
低延迟、多 channel 和采样率现实
您无法控制延迟。您无法检测实际的声音设备。您所能确定的是浏览器是否允许您访问音频 channel ,以及它们的数量。我还发现,不管另一边是什么,Chrome 只会打开一个立体声 channel 。 (它还会将单声道设备视为立体声,将第一个 channel 复制到 L 和 R channel 。)Firefox 也有类似的问题。
ASIO support is non-existent at the moment . (我已经考虑编写一个浏览器扩展来支持它,但这不会解决延迟问题,除非有人将 native 扩展编译到浏览器中。)浏览器使用的 OS API 完全不受您的控制。在 Windows 上的 Chrome 中,您可以 force it to use exclusive modetested to around 4ms (您的里程肯定会有所不同)。但是,您不能依赖于此。
最后,采样率完全不受您的控制。您 可以 通过检查 AudioContext.sampleRate 来确定它.每个 session 的采样率是固定的。您还可以通过调整默认采样率的系统设置来修改采样率。确保将您的输入和输出速率设置为相同,否则您将无法获得任何音频输出(至少在 Chrome 上)。
获取数据到服务器
您可以创建一个 script processing node然后通过二进制 websocket 将此数据转储回您的服务器。为此,我将 BinaryJS 与后端的 Node.js 一起使用,因为它可以在单个实际 WebSocket 连接中复用多个流。 (我需要其他流来控制。如果你不需要,也许你不需要 BinaryJS。)
所有 WebAudio 示例都是 Float32。在通过网络发送之前,我将这些转换为 16 位有符号整数以节省带宽。如果您选择按原样通过网络发送浮点数,您应该注意 endianess does matter很遗憾。小心转换。
希望这会为您节省一些研究时间。 Web Audio API 是非常可靠的东西,但地基总是在变化。上周坏掉的东西本周可以修复,反之亦然。在浏览器上保持最新状态并获取测试版副本以进行测试。

关于audio - 网络声卡检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21079972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com