问题标签 [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 回答
1756 浏览

audio - NAudio Asio 和 ieeefloat 格式

我试图让正弦波示例在 AsioOut 上运行,但它听起来更像是一个失真的方波。AsioOut 是否可能仅支持 PCM 格式?asio .wav 文件播放效果很好...

如果是这样,我怎样才能用 ieee 浮点数填充我的缓冲区并转换为 PCM?或者在 ASIO 上回馈 Ieee 的最佳方式是什么?我很想避免不必要的样本转换..

到目前为止,在我的代码中,我试图生成一个适合缓冲区大小的正弦波,以确保我有连续的值,我用采样率 44100 和 1 个通道对其进行初始化。然后我将类的一个实例传递给我的 AsioOut 的 Init():

0 投票
1 回答
513 浏览

c++ - waveOutWrite 与 ASIO 兼容吗?

我正在编写一个使用低延迟 ASIO 卡获取声音数据的应用程序。低延迟意味着我每批只能得到 128 个样本,采样率为 48k。从 ASIO 卡中,我得到 32 位有符号整数范围内的原始样本。

现在我想听从 ASIO 卡传来的声音,但不是在 ASIO 卡上,而是在 Windows 的默认输出设备上。我正在使用带有 WAVE_FORMAT_PCM 设置的 waveOutWrite,并且具有与 ASIO 输入相同的特性。每次我得到一个新的 128 个样本的长批次时,我都会调用它。现在,因为 Wav 格式不允许 32 位整数样本,我将它们降级为 16 位。

问题是我只能听到严重的削波和吱吱声。声音扭曲得面目全非。我知道这不是同步错误,因为我也将样本保存到具有相同特征的 wav 文件中,并且声音以相同的方式失真。

如何将签名的 32 位样本转换为 waveOutWrite 可以播放的内容?

0 投票
2 回答
386 浏览

c++ - 写入二进制破坏数据

在我的应用程序中,我记录了来自 ASIO 驱动程序的音频数据:

其中 buffer 是缓冲区指针,length 是该缓冲区中的样本数。在我的例子中,我知道样本是 4 字节整数,缓冲区每次运行包含 1024 个样本。

现在,我以两种方式保存这些示例:little-endian 二进制文件(稍后用作 WAV 文件)和文本文件。保存文字的文本文件很好,我得到了数字,它们对应于波形中的样本。但是二进制文件总是会包含一些好的数据,其余的只是被破坏了。

原始数据(原始声音和文本保存): 原始声音数据

损坏的数据(二进制保存):

代码(我使用std::ofstream):

请注意,问题不在于同步,因为我先保存二进制数据,然后再保存文本数据。

数据是如何被破坏的:

您可以看到波浪是如何表示的,正值和负值交替出现,直到某个点。然后就变成垃圾了。

0 投票
1 回答
988 浏览

c# - ASIO 中的 NAudio 音量

如果我想改变输出量,我不应该使用IWavePlayer.Volume财产权吗?我应该改变(乘以因子)输出样本WaveProvider对吗?好的,这很好WaveOutDirectSoundOut因为您可以从 Windows Volume Mixer 控制它们。如果我将 Volume Mixed 中的音量设置为 100%,然后发送未触及的样本,WaveProvider我将达到 100% 的声卡音量。但如果我使用AsioOut我无法更改 Windows Mixer 中的音量。好的,但是 ASIO 系统不会以 100% 的声卡音量播放声音。我听到声音很安静。如何告诉 ASIO 以 100% 声卡输出播放音频?

0 投票
2 回答
1332 浏览

delphi - 使用 Tobybears VST 模板获得完整的音频频谱?

我正在尝试使用 Tobybears VST Template for Delphi 制作一个简单的频率分析器 VST 插件。

我遇到的问题是,我似乎无法找到任何文档或信息,说明如何从主机收到的一大块音频数据中获取表示不同频率的值数组之类的东西。

有人知道如何做到这一点吗?

此外,每当我尝试使用 DelphiASIOVst 库时,我的 VST 主机就会不断崩溃,这是另一个用于制作自定义 VST 的库。

谢谢!

0 投票
1 回答
777 浏览

c# - 从 NAudio asioOut 写入多个 wav 文件

我正在尝试录制 3-4 个音频流并将它们写入单独的 wav 文件。我正在使用 NAudio 的 asioOut 来捕获音频。起初我只是在写一个 3 或 4 通道的 wav 文件。所以我在这里搜索问题并认为我找到了答案,但我仍然无法弄清楚。现在我可以编写单独的 wav 文件,但它们在每个文件中有多个通道。

channel_1.wav --------> 有通道 1 和 2

channel_2.wav --------> 有通道 1 和 3

channel_3.wav --------> 有通道 2 和 3

我认为当我尝试解析GetAsInterleavedSamples()时出现问题。

这是我的 asioOut_AudioAvailable()

我是新手,所以我只是在学习,任何帮助将不胜感激。

谢谢。

0 投票
2 回答
1095 浏览

asio - 如何确定哪个频道是左、右等?

所以,我决定在我的程序中使用 JAsioHost ( https://github.com/mhroth/jasiohost ) 通过 ASIO 输出音频。

与 ASIO 的交互是通过AsioDriverListener接口实例完成的。void bufferSwitch(long sampleTime, long samplePosition, Set<AsioChannel> activeChannels)每次想要播放新样本时,ASIO 主机都会调用它的方法。如果我想输出单声道声音,我只需在activeChannels. 但是,如果我想让事情变得更复杂,因此需要知道确切的通道配置怎么办?

在简单的测试存根程序 ( http://pastebin.com/sC870VJR ) 中,该activeChannels集合打印如下:

所以我可以知道每个频道的索引。问题是 - 如何确定哪个频道是真正的左,右,中等等?..或者没有办法,我应该把它留给用户,谁会手动告诉他们的位置?

0 投票
1 回答
517 浏览

.net - 单声道多声道播放器

我是音频编程的新手,我有一个任务要做,但我不知道怎么做。如果你能引导我朝着正确的方向前进,那对我来说意义重大。

我想通过一个声音设备的所有通道播放不同的 mp3 文件,例如在 7.1 卡中,通过所有 8 个单声道。但我想单独控制它们,我的意思是,能够播放、暂停、停止和所有其他标准播放器选项。

我一直在测试 MultiplexingWaveProvider,它工作得很好,但我没有播放或停止音乐等选项。然后我尝试了 Naudio 的 ASIO 驱动程序,试图单独处理每个通道,但我最后一次调用 ASIO构造函数覆盖第一个。我怎样才能使它工作?使用 Naudio 或任何其他免费库?

这是我的代码

0 投票
3 回答
1138 浏览

c# - VB.NET / C#:启动 ASIO 控制面板

我用过的几乎每个 DAW 都有一个“打开控制面板”按钮,它可以打开 ASIO 驱动程序的控制面板:

在此处输入图像描述

我将如何从 VB / C# 启动它?也许某种shell命令?

我已经下载了一个 asioconfig.exe,它确实可以做到这一点(所以它必须是可能的),但是在延迟设置窗口(如上所示)启动之前,还有另一个窗口,我在其中选择了 ASIO 驱动程序:

在此处输入图像描述

我想从我的代码中指定驱动程序并直接进入配置。有谁知道我该怎么做?

0 投票
2 回答
5029 浏览

audio - 开始音频编程的最佳方式?

我想开始编写合成器。我估计我需要使用声卡,所以我开始谷歌。过了一会儿,发现了很多选择:
  - WaveOut API - 我听说这个已经过时了,所以我放弃了这个。
  - WASAPI - 对于我想要的来说,似乎有点太低了。
  - DirectSound、XAudio、XAudio2 - 看起来相当不错,但我希望尽可能少的延迟。
  - Asio - 看起来正是我想要的!

我确实找到了一些教程和源代码来帮助我开始音频编程。可悲的是,我工作的唯一一个使用的是我不想使用的 waveOpen API。

然后我找到了这个教程,它似乎非常适合我的需求。令人惊讶的是,本教程是我在使用 ASIO 时可以找到的唯一可用的资源(好吧,因为我无法让它工作,所以不那么可用)。问题是,我无法让它工作。当我运行演示时,我得到一个“应用程序已停止工作”的错误,然后是控制台输出:

未处理的异常:System.BadImageFormatException:无法加载文件或程序集“BlueWave.Interop.Asio,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。文件名:BlueWave.Interop.Asio.Test.TestConsole.Main(String[] args) 处的“BlueWave.Interop.Asio,版本=1.0.0.0,文化=中性,PublicKeyToken=null”

警告:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 设置为 1。注意:与程序集绑定失败日志记录相关的一些性能损失. 要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。

当我尝试编译时,我得到了很多Rosie错误: 我得到的错误,呃

这是在我手动将 msvcr90.dll 和 msvcd90.dll 放在 C:\Windows\System32 中之后(我无法让它们以任何其他方式安装)。哦,是的,当然我在这之前安装了 ASIO4ALL。

所以,这不是一个真正的问题,但我只是在寻求一般性建议。我认为让 asio 工作应该不难,但同时链接到另一个学习 ASIO API 的资源会很棒,以及任何其他建议。(也许只是去尝试让 Xaudio2 工作更容易?我不知道......)

在此先感谢,如果您认为我的问题读起来很长或很无聊,请见谅!

编辑:感谢您的反应。我遇到了TropicalProgrammer 的 ASIOHost API。不知道它是否有任何好处,但它看起来很有希望。我目前正在研究它。可能有更好的选择,但我不得不承认,我目前已经对 ASIO 下了决心。