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

c++ - C++ ASIO 驱动设置

我向您寻求有关设置 ASIO sdk 的帮助。我想用它来将一些外部设备连接到我的系统,但在此之前我什至很难将 ASIO 加入我的程序。

我已经从那里下载了 ASIO 2.3:http: //www.steinberg.net/en/company/developers.html

不幸的是,C++ 不是我的强项。SDK 包含几个文件夹(名为“Common”的文件夹是否包含所需的每个文件?),没有 *.lib 文件只有 *.cpp 和 *.h 文件。

  1. 我不知道哪些文件是必需的,因此 SDK 已完全安装。
  2. 我正在考虑将所有内容合并到一个库中,但我不知道哪些文件对 SDK 很重要...
  3. 你能给我一些提示吗?如何将文件添加到我的程序中,以便我可以开始在我的代码中使用 ASIO 函数?
0 投票
3 回答
5593 浏览

c++ - C++ ASIO,访问缓冲区

我没有音频编程经验,而且 C++ 是相当低级的语言,所以我对它有一点问题。我使用从http://www.steinberg.net/en/company/developers.html下载的 ASIO SDK 2.3 。

我正在根据 SDK 中的示例编写自己的主机。

现在我已经设法完成了整个样本,看起来它正在工作。我有外部声卡连接到我的电脑。我已经成功地为这个设备加载了驱动程序,配置了它,处理了回调,将数据从模拟转换为数字等常见的东西。

我现在卡住的部分:当我通过我的设备播放一些曲目时,我可以看到混音器(设备的软件)中的条形移动。所以设备以正确的方式连接。在我的代码中,我选择了带有在混音器中移动的条形名称的输入和输出。我还使用 ASIOCreateBuffers() 为每个输入/输出创建缓冲区。

  1. 如果我错了,现在纠正我:当调用 ASIOStart() 并且驱动程序处于运行状态时,当我将声音信号输入到外部设备时,我相信缓冲区已充满数据,对吗?

  2. 我正在阅读文档,但我有点迷茫 - 如何访问设备发送到应用程序、存储在 INPUT 缓冲区中的数据?还是信号?我需要它来进行信号分析或将来记录。

编辑:如果我让它变得复杂,那么简而言之,我的问题是:如何从代码访问输入流数据?我在文档中看不到任何让我这样做的对象/回调。

0 投票
1 回答
506 浏览

audio - ASIO SDK如何处理音频缓冲区

所以我正在开发一些音频处理软件,我对一些 ASIO 音频处理有点困惑。从我正在阅读的内容来看,似乎在进行缓冲区切换回调时,我需要将“输入”处理为“输出”。但是如果我有不同数量的输入和输出通道呢?而且我猜如果我的输入和输出格式不匹配,我需要进行格式转换吗?

0 投票
1 回答
1749 浏览

c++ - PortAudio 回调和 ASIO sdk 的输入延迟

我正在尝试使用 portaudio 库和 ASIO sdk 从我的吉他获取输入以通过我的计算机播放。

我一直在关注官方网站上的一些教程来设置基础知识。目前我让它工作了,所以 portaudio 正在监听正确的输入和输出设备,我有回调设置来输出输入并且像这样不做任何事情:

这个回调是通过调用这个来设置的:

现在,这确实有效,但是当我在吉他上敲弦并通过监视器听到它时,我有很多延迟(大约 0.5 秒)。

有没有办法解决这个延迟?我需要重写回调方法吗?

编辑:

因此,使用此代码而不是基本代码,我得到了更好的延迟Pa_OpenDefaultStream()

虽然仍然有一点延迟,但在演奏多于一个音符时最明显。

编辑:

我在 Ross-Bencina 的帮助下发现 Windows 默认输入设备和输出设备不会对 PortAudio 中的主机 api 的索引进行任何更改。我似乎一直在使用 MME。我执行了以下操作以获得 ASIO 设备的正确索引:

然后我检查了哪个是带有 ASIO 的,并将建议的延迟都设置PaStreamParameters为 0,延迟现在消失了,声音很好(虽然现在是单声道)。

0 投票
1 回答
399 浏览

c++ - 使用 VST 插件失真的音频

我必须插入一个预先存在的软件,管理 ASIO 音频流,一个简单的 VST 主机。尽管缺少一些文档,但我还是设法做到了,但是一旦我加载了插件,我就会得到一个严重失真的音频信号。

我正在使用的 VST 可以正常工作(与其他 VST 主机一起),所以它可能是我制作的代码中的某种错误,但是当我从插件中禁用“PROCESS”时(我的流通过插件,它根本没有得到处理)它会在我发送时返回,没有任何噪音或失真。

我稍微担心的一件事是,当插件需要一些浮点缓冲区时,ASIO 驱动程序填充 __int32 缓冲区时使用的数据类型。

这真的很令人沮丧,因为我无数次地查看了我的代码,而且看起来还不错。

这是我正在使用的类的代码;请注意,有些数字是临时硬编码的,以帮助调试。

编辑:这是我用来将我的 sw 与 VST 主机接口的代码

其中“buff”定义为“__int32* buff”

0 投票
0 回答
638 浏览

c++ - 使用 C++ 和 ASIO sdk 进行音频录制

我一直在尝试使用 C++ 和 ASIO SDK(基于附加的主机样本)编写一个简单的录音机。到目前为止,我能够从通道获取输入,对其进行处理并转发到输出通道。

现在我想知道如何将输入重定向到文件。我的理论想法是使用某种缓冲区来存储来自输入的数据,然后,当它已满时,将其传递给将其保存到文件的模块。当然,在写入过程中,我想动态创建另一个缓冲区(甚至多个缓冲区)用于以连续方式存储输入数据。然后,当第一个缓冲区中的数据完全写入文件时,要做的是切换缓冲区(之前写入的一个将成为输入信号的接收器,另一个存储输入的将被保存归档)。

老实说,我不知道如何在实践中实现程序的这一部分。我不确定最佳缓冲区大小应该是多少,以免丢失任何数据。另外,我不知道如何将来自 2 个输入通道的数据存储在一个缓冲区中(我应该使用其中的 2 个吗?)。有没有这样的记录仪的例子?我搜索了互联网,但没有找到任何有用的东西。

0 投票
0 回答
56 浏览

c++ - 如何转换可以复制到 asio 缓冲区并发出正确声音的 vsti 音频数据?

我正在尝试用 vsti 和 asio 发出声音。我已经将midi事件转换为vst事件,然后调用“processReplacing”函数使vsti音频流变成这样:

浮动*输入[64];

浮动*输出[2];

......

m_effect->processReplaceing(m_effect,inputs,outputs,m_blockSize);

但是当我将“输出”数据复制到 asio 缓冲区时,它会产生噪音。

memcpy (asioDriverInfo.bufferInfos[i].buffers[index], 输出[index], m_blockSize);

在复制 asio 缓冲区之前,vsti 音频数据是否需要任何转换?如果您能帮助我,我将不胜感激!</p>

0 投票
1 回答
534 浏览

c - 创建一个 ASIO DSD 播放器

我正在尝试使用 ASIO SDK v2.3 创建 Windows 控制台 DSD 音频播放器。我在文档中使用了 hostsample 示例。到目前为止,我能够成功播放基于 PCM 的数据。不幸的是,当切换到 DSD 示例格式时,我收到了堆损坏错误。

我的声卡支持DSD ASIO Playback。使用 HQPlayer 和 foobar2000 对其进行了测试。

要切换到DSD格式模式,我参考了ASIO SDK文档并使用ASIOFuture函数进行切换。

这样,当将更多数据复制到缓冲区时,驱动程序将使用SampleFormat ASIOSTDSDInt8LSB1

这就是我添加到示例代码中的全部内容。由此,我认为驱动程序会在 DSD 模式下处理和输出缓冲区。

不幸的是,在播放中途,我遇到了堆损坏错误

我的代码或 API 有问题吗?

我也是 C/C++ 编程和音频编程的初学者,所以请原谅本文中的非技术性。

完整代码:

0 投票
0 回答
101 浏览

c++ - 使用 ASIO SDK 2.3 I/O 的任意播放软件的实时均衡器

我想开发一个在后台运行的均衡器,并使用 asio4all 驱动程序实时处理来自任何音频播放软件的传入音频信号,具有来自 64 个样本的可变缓冲区大小。目标是保持尽可能低的延迟

我一直在想办法实现这个均衡器。我不清楚它应该如何接收任意播放软件的传入流(知道它使用源的 asio4all)。

我的编码模板是 asio SDK 中的 [hostsample.cpp],但可能还不够。我还没有探索过 Asio SDK 中的其他示例。

任何建议表示赞赏!

0 投票
1 回答
85 浏览

c++ - ASIOSDK;从 hostsample.cpp 构建 mex 文件时出错

我正在编写一个 c++ 文件以构建到 mex 中,但是我使用 asio 函数(如“ASIOExit”)得到了未解决的外部符号错误。我正在使用 mex 命令在 Matlab 控制台中构建。我已经从 AsioSDK 中放置了所有头文件和 cppfile。放入一个文件夹广告使用 -I 包含该文件夹。我还需要包含或链接什么?

与 ASIO 相关的 3 个头文件已经添加到 include 中。

使用 mex 创建库 hostsample.lib 和对象 hostsample.exp hostsample.obj 时出错:错误 LNK2019:无法解析的外部符号“long __cdecl ASIOInit(struct ASIODriverInfo *)”(?ASIOInit@@YAJPEAUASIODriverInfo@@@Z) 在函数 mexFunction hostsample 中引用。 obj:错误 LNK2019:未解析的外部符号“long __cdecl ASIOExit(void)”(?ASIOExit@@YAJXZ) 在函数 mexFunction hostsample.obj 中引用:错误 LNK2019:未解析的外部符号“long __cdecl ASIOStart(void)”(?ASIOStart@@ YAJXZ)在函数 mexFunction hostsample.obj 中引用:错误 LNK2019:未解析的外部符号“long __cdecl ASIOStop(void)”(?ASIOStop@@YAJXZ)在函数 mexFunction hostsample.obj 中引用:错误 LNK2019:未解析的外部符号“long __cdecl ASIOGetChannels(长 *,long *)" (?ASIOGetChannels@@YAJPEAJ0@Z) 在函数 "long __cdecl init_asio_static_data(struct DriverInfo *)" (?init_asio_static_data@@YAJPEAUDriverInfo@@@Z) hostsample.obj 中引用:错误 LNK2019:无法解析的外部符号 "long __cdecl ASIOGetLatencies(long *,long *)" (?ASIOGetLatencies@@YAJPEAJ0@Z) 在函数 "long __cdecl create_asio_buffers(struct DriverInfo *)" (?create_asio_buffers@@YAJPEAUDriverInfo@@@Z) hostsample.obj 中引用:错误 LNK2019:未解决在函数“long __cdecl init_asio_static_data(struct DriverInfo *)”(?init_asio_static_data@@YAJPEAUDriverInfo@@)中引用的外部符号“long __cdecl ASIOGetBufferSize(long *,long *,long *,long *)” @Z) hostsample.obj:错误 LNK2019:未解析的外部符号“long __cdecl ASIOGetSampleRate(double *)" (?ASIOGetSampleRate@@YAJPEAN@Z) 在函数“long __cdecl init_asio_static_data(struct DriverInfo *)”(?init_asio_static_data@@YAJPEAUDriverInfo@@@Z) hostsample.obj 中引用:错误 LNK2019:未解决的外部函数“long __cdecl init_asio_static_data(struct DriverInfo *)”(?init_asio_static_data@@YAJPEAUDriverInfo@@@Z) 中引用的符号“long __cdecl ASIOSetSampleRate(double)”(?ASIOSetSampleRate@@YAJN@Z) hostsample.obj:错误 LNK2019:未解决函数“void __cdecl bufferSwitch(long,long)”(?bufferSwitch@@YAXJJ@)中引用的外部符号“long __cdecl ASIOGetSamplePosition(struct ASIOSamples *,struct ASIOTimeStamp *)” Z)hostsample.obj:错误 LNK2019:未解析的外部符号“long __cdecl ASIOGetChannelInfo(struct ASIOChannelInfo *)”(?ASIOGetChannelInfo@@YAJPEAUASIOChannelInfo@@@Z) 在函数“long __cdecl create_asio_buffers(struct DriverInfo *)”(?create_asio_buffers@@YAJPEAUDriverInfo@@@Z) 中引用) hostsample.obj : 错误 LNK2019: 在函数 "long __cdecl create_asio_buffers (struct DriverInfo *)" (?create_asio_buffers@@YAJPEAUDriverInfo@@@Z) hostsample.obj:错误 LNK2019:未解析的外部符号“long __cdecl ASIODisposeBuffers(void)”(?ASIODisposeBuffers@@YAJXZ) 在函数 mexFunction hostsample.obj 中引用:错误 LNK2019:在函数“struct ASIOTime * __cdecl bufferSwitchTimeInfo(struct ASIOTime *,长,长,类 std::vector

,class std::allocator > > >)" (?bufferSwitchTimeInfo@@YAPEAUASIOTime@@PEAU1@JJV?$vector@V?$vector@NV?$allocator@N@std@@@std@@V?$allocator@ V?$vector@NV?$allocator@N@std@@@std@@@2@@std@@@Z) hostsample.obj:错误 LNK2019:函数“struct ASIOTime * __cdecl bufferSwitchTimeInfo( struct ASIOTime *,long,long,class std::vector ,class std::allocator > > >)" (?bufferSwitchTimeInfo@@YAPEAUASIOTime@@PEAU1@JJV?$vector@V?$vector@NV?$allocator@N @std@@@std@@V?$allocator@V?$vector@NV?$allocator@N@std@@@std@@@2@@std@@@Z) hostsample.obj:错误 LNK2019:未解决外部符号“public: void __cdecl AsioDrivers::removeCurrentDriver(void)”(?removeCurrentDriver@AsioDrivers@@QEAAXXZ) 在函数 mexFunction hostsample.obj 中引用:错误 LNK2019:未解析的外部符号“bool __cdecl loadAsioDriver(char *)”(?loadAsioDriver@@YA_NPEAD@Z) 在函数 mexFunction hostsample.obj 中引用:错误LNK2019:函数“void __cdecl bufferSwitch(long,long)”中引用的未解析外部符号“struct ASIOTime * __cdecl bufferSwitchTimeInfo(struct ASIOTime *,long,long)”(?bufferSwitchTimeInfo@@YAPEAUASIOTime@@PEAU1@JJ@Z) bufferSwitch@@YAXJJ@Z) hostsample.obj:错误 LNK2019:在函数 mexFunction hostsample.mexw64 中引用的未解析的外部符号“class AsioDrivers * asioDrivers”(?asioDrivers@@3PEAVAsioDrivers@@EA):致命错误 LNK1120:19 个未解析的外部错误 LNK2019:未解析的外部符号“bool __cdecl loadAsioDriver(char *)”(?loadAsioDriver@@YA_NPEAD@Z) 在函数 mexFunction hostsample.obj 中引用:错误 LNK2019:未解析的外部符号“struct ASIOTime * __cdecl bufferSwitchTimeInfo(struct ASIOTime *,long ,long)" (?bufferSwitchTimeInfo@@YAPEAUASIOTime@@PEAU1@JJ@Z) 在函数 "void __cdecl bufferSwitch(long,long)" (?bufferSwitch@@YAXJJ@Z) hostsample.obj 中引用:错误 LNK2019:未解析的外部符号在函数 mexFunction hostsample.mexw64 中引用的“类 AsioDrivers * asioDrivers”(?asioDrivers@@3PEAVAsioDrivers@@EA):致命错误 LNK1120:19 个未解决的外部错误 LNK2019:未解析的外部符号“bool __cdecl loadAsioDriver(char *)”(?loadAsioDriver@@YA_NPEAD@Z) 在函数 mexFunction hostsample.obj 中引用:错误 LNK2019:未解析的外部符号“struct ASIOTime * __cdecl bufferSwitchTimeInfo(struct ASIOTime *,long ,long)" (?bufferSwitchTimeInfo@@YAPEAUASIOTime@@PEAU1@JJ@Z) 在函数 "void __cdecl bufferSwitch(long,long)" (?bufferSwitch@@YAXJJ@Z) hostsample.obj 中引用:错误 LNK2019:未解析的外部符号在函数 mexFunction hostsample.mexw64 中引用的“类 AsioDrivers * asioDrivers”(?asioDrivers@@3PEAVAsioDrivers@@EA):致命错误 LNK1120:19 个未解决的外部(?loadAsioDriver@@YA_NPEAD@Z) 在函数 mexFunction hostsample.obj 中引用:错误 LNK2019:未解析的外部符号“struct ASIOTime * __cdecl bufferSwitchTimeInfo(struct ASIOTime *,long,long)”(?bufferSwitchTimeInfo@@YAPEAUASIOTime@@PEAU1@JJ @Z) 在函数 "void __cdecl bufferSwitch(long,long)" (?bufferSwitch@@YAXJJ@Z) hostsample.obj 中引用:错误 LNK2019:未解析的外部符号 "class AsioDrivers * asioDrivers" (?asioDrivers@@3PEAVAsioDrivers@@EA ) 在函数 mexFunction hostsample.mexw64 中引用:致命错误 LNK1120: 19 unresolved externals(?loadAsioDriver@@YA_NPEAD@Z) 在函数 mexFunction hostsample.obj 中引用:错误 LNK2019:未解析的外部符号“struct ASIOTime * __cdecl bufferSwitchTimeInfo(struct ASIOTime *,long,long)”(?bufferSwitchTimeInfo@@YAPEAUASIOTime@@PEAU1@JJ @Z) 在函数 "void __cdecl bufferSwitch(long,long)" (?bufferSwitch@@YAXJJ@Z) hostsample.obj 中引用:错误 LNK2019:未解析的外部符号 "class AsioDrivers * asioDrivers" (?asioDrivers@@3PEAVAsioDrivers@@EA ) 在函数 mexFunction hostsample.mexw64 中引用:致命错误 LNK1120: 19 unresolved externals(?bufferSwitchTimeInfo@@YAPEAUASIOTime@@PEAU1@JJ@Z) 在函数“void __cdecl bufferSwitch(long,long)”(?bufferSwitch@@YAXJJ@Z) hostsample.obj 中引用:错误 LNK2019:未解析的外部符号“类 AsioDrivers * asioDrivers" (?asioDrivers@@3PEAVAsioDrivers@@EA) 在函数 mexFunction hostsample.mexw64 中引用:致命错误 LNK1120:19 个未解决的外部(?bufferSwitchTimeInfo@@YAPEAUASIOTime@@PEAU1@JJ@Z) 在函数“void __cdecl bufferSwitch(long,long)”(?bufferSwitch@@YAXJJ@Z) hostsample.obj 中引用:错误 LNK2019:未解析的外部符号“类 AsioDrivers * asioDrivers" (?asioDrivers@@3PEAVAsioDrivers@@EA) 在函数 mexFunction hostsample.mexw64 中引用:致命错误 LNK1120:19 个未解决的外部