问题标签 [rtaudio]

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 投票
0 回答
156 浏览

audio - RtApiWasapi::getDeviceInfo: 无法检索设备混合格式

我正在尝试学习如何使用处理,因此正在尝试使用声音库。在运行https://processing.org/tutorials/sound/提供的前两个示例程序中的任何一个时,IDE 会响应以下错误:

此应用程序已请求运行时以不寻常的方式终止它。请联系应用程序的支持团队以获取更多信息。在抛出 'RtAudioError' what() 的实例后调用终止:RtApiWasapi::getDeviceInfo:无法检索设备混合格式。无法运行草图(目标 VM 无法初始化)。有关更多信息,请阅读 revisions.txt 和 Help ? 故障排除。

此外,每当我尝试使用这个库运行草图时,连同那个错误,windows 说

Java(TM) Platform SE 二进制文件已停止工作 Windows 正在收集有关该问题的更多信息。这也许会花几分钟...

你能帮我解决这个问题吗?我正在使用 Windows Vista 计算机。这是第二个示例代码:

0 投票
2 回答
120 浏览

uwp - 如何在 Universal Window Phone 中转换信号?

我使用 RTAudio 从麦克风获取信号并将此信号用作另一个编码器的输入。似乎 UWP 总是返回与我的编码器想要的采样率不同的固定音频采样率。

WASAPICapture 返回44100 Hz信号,2 channel(输入)。我想将此输入转换为1600 Hz信号1 channel(输出)。如何正确进行重新采样?

我从 WASAPICapture 的回调中收到的数据。这个回调被称为 every 64 ms,并且每次它都给了我480样本。我的编码器需要320每个20 ms. 我应该怎么做才能得到这个(重新框架)?

你能建议我任何图书馆来做到这一点吗?还是我应该自己编写代码?

0 投票
1 回答
1418 浏览

c++ - RtAudio - 从 wav 文件中播放样本

我目前正在尝试学习音频编程。我的目标是打开一个 wav 文件,提取所有内容并使用 RtAudio 播放样本。

我创建了一个 WaveLoader 类,让我提取样本和元数据。我使用指南来执行此操作,并使用 010 编辑器检查了一切是否正确。这是显示结构和数据的 010 编辑器的快照。

010 编辑器

这就是我在 WaveLoader 类中存储原始样本的方式:

如果我打印出每个样本,我会得到:1、-3、4、-5 ... 这似乎还可以。

问题是我不确定如何玩它们。这就是我所做的:

在回调函数内部,当我打印出样本值时,我得到的结果与 010 编辑器一模一样吗?为什么 rtaudio 不播放它们。这里有什么问题?我需要将样本值标准化到 -1 和 1 之间吗?

编辑:我要播放的 wav 文件:

  • 块大小:16
  • 格式:1
  • 频道:1
  • 采样率:48000
  • 字节率:96000
  • 块对齐:2
  • BitPerSample:16
  • 原始样本总大小:2217044 字节
0 投票
1 回答
1148 浏览

c++ - 如何用mingw在windows上编译rtaudio?

我想在我的项目中使用 rtaudio。我遵循 install.txt 中的说明,它告诉我运行 ./configure 然后 make。

当我运行 make 我得到一堆警告:

如果有人可以指导我,那就太棒了。

0 投票
1 回答
286 浏览

c++ - RT音频Mac错误g++编译错误

使用简单的应用程序编译 rt 音频时遇到问题

编译

错误

0 投票
1 回答
288 浏览

c++ - 生成正弦波:输出不正确

我正在尝试在 rtaudio 中生成一个简单的正弦波,以验证我了解发生了什么。但是,结果是错误的。

我有一个 globalfloat timec和一个调用的回调openStream,应该用样本填充缓冲区。

我做错了什么?我听到的不是正弦波,而是低沉的研磨声。

0 投票
1 回答
349 浏览

c++ - 基本软件合成器的延迟随时间增长

我正在完成一个 MIDI 控制的软件合成器。MIDI 输入和合成工作正常,但播放音频本身似乎有问题。

我使用jackd它作为我的音频服务器是因为可以将它配置为低延迟应用程序,例如在我的情况下,实时 MIDI 乐器,alsa作为jackd后端。

在我的程序中,我使用RtAudio的是一个相当知名的 C++ 库,用于连接各种声音服务器并在它们上提供基本的流操作。顾名思义,它针对实时音频进行了优化。

我还使用了该Vc库,它是一个为各种数学函数提供矢量化的库,以加快加法合成过程。我基本上是将大量不同频率和幅度的正弦波相加,以便在输出上产生复杂的波形,例如锯齿波或方波。

现在,问题不在于延迟很高,因为这可能可以解决或归咎于很多事情,例如 MIDI 输入或其他问题。问题是我的软合成器和最终音频输出之间的延迟开始非常低,几分钟后,它变得难以忍受。

因为我打算用它来“现场”播放,即在我的家里,我真的不会因为我的击键和我听到的音频反馈之间不断增长的延迟而烦恼。

我试图减少一直重现问题的代码库,但我无法再进一步减少它。

编译g++ -march=native -pthread -o synth -Ofast main.cpp /usr/local/lib/libVc.a -lrtaudio

该程序需要一个采样率作为第一个参数。在我的设置中,我jackd -P 99 -d alsa -p 256 -n 3 &用作我的声音服务器(需要当前用户的实时优先级权限)。由于默认采样率为jackd48 kHz,因此我使用./synth 48000.

alsa可以用作声音服务器,尽管jackd出于模糊的原因(包括交互) pulseaudio,我更喜欢在可能的情况下使用。alsa

如果您要运行该程序,您应该会听到一个希望不会太烦人的锯齿波播放并且不是定期播放,并且控制台输出在播放应该开始和停止时打开。当noteOn设置为true时,合成器开始以任何频率产生锯齿波,并在noteOn设置为 false 时停止。

希望您一开始会看到这一点,noteOn true并且false与音频播放和停止几乎完全对应,但是音频源开始逐渐滞后,直到在我的机器上大约 1 分钟到 1 分 30 秒左右开始变得非常明显。

由于以下原因,我 99% 确信它与我的程序无关。

“音频”在程序中采用这条路径。

  • 键被按下。

  • 时钟在 48 kHz 处滴答sample_processing_thread并调用Synthesizer::get_sample并将输出传递给std::queue用作稍后的样本缓冲区的输出。

  • 每当RtAudio流需要样本时,它都会从样本缓冲区中获取样本并继续移动。

这里唯一可能导致延迟增加的原因是时钟滴答,但它的滴答速度与流消耗样本的速率相同,所以不可能。如果时钟滴答作响,RtAudio则会抱怨流欠载,并且会出现明显的音频损坏,这不会发生。

然而,时钟可以更快地点击,但我不认为是这种情况,因为我已经在很多场合自己测试过时钟,虽然它确实显示出一点点抖动,以纳秒为单位,这是为了被期望。时钟本身没有累积延迟。

因此,延迟增长的唯一可能来源是RtAudio声音服务器的内部功能或声音服务器本身。我用谷歌搜索了一下,没有发现任何用处。

我已经尝试解决这个问题一两个星期了,并且我已经测试了我这边可能出现的所有问题,并且它按预期工作,所以我真的不知道会发生什么。


我试过的

  • 检查时钟是否有某种累积延迟:没有注意到累积延迟
  • 计时按键和生成的第一个音频样本之间的延迟,以查看此延迟是否随时间增长:延迟不随时间增长
  • 计时请求样本的流和发送到流的样本之间的延迟(开始和结束stream_callback):延迟不随时间增长
0 投票
1 回答
644 浏览

c++ - 使用 CMakeLists 将 RtAudio 链接到另一个项目

我正在尝试使用 RtAudio 生成流式音频。但是,当我尝试包含“RtAudio.h”文件时,程序总是抱怨一些奇怪的东西。我的项目结构如下:

  • 项目
    • 音频
      • CMakeList1
      • RtAudio.h
    • 演示
      • 主文件
      • CMakeList2
    • 制作清单

基本上,文件夹 rtaudio 是我从这里安装的存储库,CMakeList1 也是从那里安装的。

主文件夹下的 CMakeList:

CMakeList2:

要编译这些,在 Project 文件夹下,

主要是,我只是添加:

在我编译make之后,我会得到很多错误:

*PS:如果我直接cmake rtaudio,rtaudio下的程序都可以运行,这意味着错误不应该来自rtaudio *(希望)

我cmake的方式有问题吗?有人知道如何解决这个问题吗?

0 投票
1 回答
264 浏览

c++ - RtAudio + Qt:双工不能在 Linux 上使用 RME Fireface

这是我在 Stackoverflow 上的第一篇文章,希望我做对了。

我是 C++ 新手。

我一直在玩 RtAudio 和 Qt(在 linux、桌面和树莓派上)。

后端是 ALSA。

我的台式计算机上的音频输出都很好(ClassCompilant 模式下的 RME Fireface UCX 和带有 HifiBerry 和 PiSound 的 Raspberry Pi 3)

最近,我尝试在我的程序中添加音频输入支持。我阅读了RtAudio 网站上的双工教程,并尝试在我的代码中实现它。

一旦我添加了输入StreamParametersopenStream我就听到了非常刺耳的声音。虽然,StreamStatus 在回调中是可以的......

我尝试创建一个空的 C++ 项目,并简单地复制 RtAudio 教程。可悲的是,问题仍然存在......

我将此添加到我在 Qt Creator 中的项目文件中

LIBS += -lpthread -lasound

我认为我的问题类似于这个问题,但我找不到它是如何(或是否)解决的

我尝试了不同的缓冲区大小(从 64 到 4096 甚至更多),裂缝不太听得见,但当缓冲区大小增加时仍然存在

你知道关于双工模式下的 RtAudio 应该做些什么来解决这个问题吗?在双工模式下,缓冲区大小似乎不一样。

编辑 :

出于好奇(和绝望),我使用 RtAudio 帮助中的规范示例尝试了更低的缓冲区大小:事实证明,使用缓冲区大小 1、2、4 和 8 帧可以消除裂缝......

我一使用16帧,声音就很糟糕

即使是 15 帧也可以,我真的不明白发生了什么

代码示例:

仅输出时,它可以工作:

NULL更改为时出现裂缝&params_in

谢谢您的帮助

0 投票
1 回答
664 浏览

c++ - 如何通过 UDP 播放音频流?

我编写了一个 Windows 应用程序,它从 Android 应用程序接收音频数据,我使用 UDP 通过 LAN 传输数据,并使用 RtAudio 播放音频流。

每个 UDP 包负载都是一个音频样本数组,格式为 32k/16bit/pcm。

当数据大小为 576 字节,即 288 个样本时,一切正常,我们可以听到清晰的声音。

但是当数据大小在 192 字节,即 96 个样本时,声音并不清晰。

有人有问题吗?