问题标签 [asio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
193 浏览

c++ - ASIOCallbacks::bufferSwitchTimeInfo 在 Sony PHA-3 上以 2.8MHz 采样率和 DSD 格式出现非常缓慢

我买了一台索尼​​ PHA-3 并尝试编写一个应用程序以在本机模式下播放 DSD。(我在 DoP 模式下成功了。)但是,当我将采样率设置为 2.8MHz 时,我发现 ASIOCallbacks::bufferSwitchTimeInfo 的速度并没有达到应有的速度。

请求 2.8MHz 样本大约需要 8 秒,这应该在 1 秒内完成。

该代码只是从 asiosdk 2.3 的主机示例修改而来,因此我将发布部分关键代码以帮助完成我的问题。

在 ASIO 启动后,主机样本将继续打印进度以指示时间信息,如下所示:

最后的表达式会告诉我已经过去了多少秒。(asioDriverInfo.samples/asioDriverInfo.sampleRate)。

其中 asioDriverInfo.sampleRate 为 2822400 Hz。

并且 asioDriverInfo.samples 在 ASIOCallbacks::bufferSwitchTimeInfo 中分配,如下所示:

这是示例的原始代码。

所以我可以很容易地找出经过的时间很慢。

我试图将采样率提高到更高,比如 2.8MHz * 4,看到前进 1 秒的时间甚至更长。

我试图将采样率降低到 2.8MHz 以下,API 失败。

我肯定已经根据 sdk 的指南设置了 SampleFormat。

ASIOIoFormat aif; memset(&aif, 0, sizeof(aif));

事实上,如果不将 SampleFormat 设置为 DSD,将 samplerate 设置为 2.8MHz 会导致 API 失败。

最后,我记得所有的DAW(Cubase / Reaper,...)都有设置线程优先级的选项,所以我怀疑回调的线程不够高,并尝试提高其线程优先级,看看是否可以帮助。但是,当我检查线程优先级时,它会返回 THREAD_PRIORITY_TIME_CRITICAL。

ThreadPriorityBoost 属性也是如此。它没有被禁用(已经增强)。

有人尝试编写主机 asio 演示并帮助我解决此问题吗?

首先十分感谢。

0 投票
1 回答
1062 浏览

c# - 从混音器 NAudio C# 获取音频输入通道

我对NAudio图书馆非常陌生,并且开发了音频类型的文件我有疑问,我们如何从混音器的每个通道获取音频输入,使用 USB 音频接口连接到 PC(支持 ASIO),所以这个混音器支持 8 通道音频输入。

应用的思路是这样的

  • 当用户按下通道 1 按钮时,它将获得通道 1 输入以捕获该特定通道上扬声器的声音

  • 当用户按下通道 2 按钮时,它将从通道 2 获得语音(作为单独的通道)

所以我只是想知道我应该使用哪个库类,有没有针对这种场景的源代码示例或最佳实践(我正在使用 C# 进行开发)

谢谢你

0 投票
1 回答
3390 浏览

c# - Nadio Asio 在多个通道上同时录制和播放

我有一个支持 4 个输入和 4 个输出的 asio 驱动程序的 USB 音频板。我想同时发送和接收数据。但目前我一次只能接收和发送数据到一个通道。我无法弄清楚如何在 Naudio c# 库的 asioOut 类中设置它。

我必须线程

每个通道可以有一个 AudioAvailable 事件吗?类似于 waveIn / waveOut 类。我怎样才能做到这一点?

这是我的代码:

对于 AudioAvailable 事件,我必须为每个输入通道发送不同多播地址上的输入流:

有没有办法访问每个通道的输入缓冲区? 在此处输入图像描述

对于输出,我检查了 naudio 源代码,发现可以将输出通道数设置为 waveProvider.WaveFormat.Channels。所以我想在调用 InitRecordAndPlayback 方法时 IWaveProvider 缓冲区应该有 4 个通道。

关于这个主题的stackoverflow帖子都没有帮助我。我都试过了。

https://stackoverflow.com/questions/22543513/naudio-using-asio-to-record-audio-and-output-with-a-guitar

NAudio Asio 录制和播放

如何使用 AsioOut 使用 NAudio 进行录制和播放

NAudio AsioOut + 插座

谢谢!

更新:

我检查了 Naudio 演示项目,Asio 录音面板,似乎我一次只能听一个频道: 在此处输入图像描述

naudio 驱动程序类按预期创建了 4 个输入和 4 个输出缓冲区,但我无法访问它们。 在此处输入图像描述

在 AsioRecordingPanel 文件中,如果 asioOut 对象侦听 1 个频道并且用户想要更改频道,则该对象被处置。

在此处输入图像描述

是库限制还是驱动程序限制?

当我将样本添加到 asio 缓冲区时,可以将数据直接发送到输出通道吗?

谢谢!!

0 投票
0 回答
800 浏览

java - 在 Java 中使用 ASIO 和 Gervill 合成器

我正在使用 Gervill 的软件合成器来加载 SF2 音库,并从 Midi 键盘播放音乐,我想知道是否可以通过 ASIO 播放输出,可能是通过JAsioHost。我一直在尝试查看 Gervill 源代码以查找原始音频数据何时真正传递给音频驱动程序,但我似乎无法找到它,即使那样,我也不确定这是否是正确的做法。

我正在使用的链使用 SF2loader 将声音字体加载到默认合成器中,然后我使用通道 noteOn 方法播放音符。

0 投票
1 回答
902 浏览

c++ - 提升时间戳UDP数据包

我想检索使用 boost asio 接收的 UDP 数据包的接收时间戳。

我发现内核提供了套接字选项SO_TIMESTAMP,它应该允许在 NIC 接收到数据包时生成时间戳。我还发现了这张旧,它提出了一个补丁来添加对 SO_TIMESTAMP 的支持。

我正在使用 boost 1.60.0,但无法启用此选项:

当我通过同步或异步读取接收数据包时,如何使用 boost 检索 UDP 数据包接收时间并计算自接收以来经过的时间?

0 投票
1 回答
213 浏览

c++ - 使用 Boost ASIO 多播到 macOS 上的特定接口

我有一段代码在 Mac 上的每个以太网网络接口上发送多播消息(因为响应的设备可能在 wifi 或有线以太网连接上)。这段代码已经运行了很长一段时间:

其中 strIPAddresses 是每个网络接口的 IP 地址的字符串数组。

但是,在 macOS 10.12 中,此代码的实现方式发生了一些变化,它似乎忽略了设置出站接口的功能,并自行决定发送消息的最佳接口。我可以在另一台机器上使用 Wireshark 看到这一点 - 当第二条消息应该通过有线接口发送时,它会通过 wifi 看到每条消息的两倍。

有谁知道强制macOS在给定接口上发送多播消息的方法,最好使用Boost ASIO?

0 投票
1 回答
1857 浏览

c++ - 如何使用lamba作为连接处理程序调用boost async_connect作为成员函数

async_connect成功实现了将它用作自由函数和 lambda 作为 connect_handler,如下所示:

但是,现在我被迫使用no_delay国旗。关于这个条目boost::asio 与 no_delay 不可能?我必须调用 async_connect 作为套接字的成员函数。尝试如下

我的编译器(VS2013)给了我一个错误Error 1 error C2338: ConnectHandler type requirements not met

有人有想法,如何正确地做到这一点?

0 投票
0 回答
353 浏览

c++ - 具有保持活动状态的 HTTP 客户端

我正在尝试使用asio(的独立版本boost::asio)实现 HTTP 客户端以用于教育目的。我的问题是保持活动(在 HTTP 级别)。如果服务器仍然打开套接字,我只想通过它发送数据。如果服务器已经关闭,我需要先调用connect(). 我尝试只写入套接字,如果它返回错误然后重新连接,但即使服务器已经关闭它结束,写入仍然恢复正常(即没有错误),有效地丢失数据。如何确定服务器上的连接是否仍然打开,或者至少写入是否真的成功?

0 投票
1 回答
224 浏览

.net - NAudio ASIO Playback 在某些设备上挂起

我正在寻求帮助,以解决在将音频直接播放到 ASIO 设备时似乎出现在某些 ASIO 设备上的错误。如果 WAV 音频在到达结束之前没有停止,应用程序将挂起并连续播放最后一个音频的快速信号(听起来像口吃效果)。此时,UI 线程将挂起,并且需要强制关闭应用程序。

可以使用 NAudio 的 github 站点提供的“ASIO Direct Demo”重新创建此问题。我所做的只是在演示中打开一个 WAV 文件并单击播放。一旦音频到达末尾,应用程序就会挂起。

我已经测试过这个问题,发现它发生在 Behringer X-Air x18 上,而不是 M-Audio M-Track MKII。我想知道是否有人找到了解决此错误的方法?谢谢你。

PS - NAudio 是一个令人惊叹的框架,Mark Heath(作者)有很棒的关于复数视觉的教程,完全值得订阅费。

0 投票
1 回答
418 浏览

c# - NAudio ASIO 播放 wav

我正在使用 NAudio 和 ASIO 播放一系列 wav 文件。我需要使用 ASIO,因为声卡只支持它。我能够以这种方式播放每个 wav:

现在我需要在 wav 开始之前插入 1 秒的静音。我发现的唯一方法是使用 OffsetSampleProvider,但如果我喜欢这样

第一个 wav 播放得很好,但是一旦我 stop() waveOutDevice 或者我尝试重新实例化一个新的,程序的执行就会在那个位置停止

我不明白为什么。请帮忙。谢谢