问题标签 [jack]

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 回答
1417 浏览

python - 如何在python中杀死一个分叉的孩子及其jackd子进程

我正在尝试实现一个托盘图标,它可以让我控制一个进程(jackd)。最为显着地

  • 我想读取进程 stdout 和 stderr 以进行日志记录
  • 我希望能够从主程序的菜单项中终止进程

杀戮让我头疼。我相信,当我阅读 stdout 和 stderr 时,我必须在额外的线程/进程中执行此操作以保持图标响应。所以我使用 fork() 创建了一个子进程并调用了子进程setsid()subprocess然后该子进程使用模块调用jackd

现在我希望我可以让我的分叉子进程进入同一个进程组,这样我就可以一次杀死两者,但令我惊讶的是,我Popen创建了一个新的进程组和一个新的会话:

因此,杀死孩子不会杀死孙子,我看不出有任何干净的方法可以让孙子的 PID(5804)知道以main明确地杀死它。我可能会使用一些信号诡计让垂死的孩子杀死孙子,但我犹豫不决。

我也不能setpgid在 jackd 进程上使用强制它进入孩子的进程组,因为它的 SID 与我孩子的 SID 不同。

我相信我要么

  • 必须说服 Popen 不要创建新会话,或者
  • 使用一个魔力低于 的模块subprocess,但它仍然允许我阅读 stdout 和 stderr。

但我也不知道该怎么做。诚然,我对进程组的了解有些有限。

10 月 12 日更新

我发现新会话不是由python创建的,而是由jackd它自己创建的。当我用 替换 jackd 时xterm,一切都很好。

我也发现了这个

这些杰克时代调用 setsid() 以使自己成为新的流程组负责人

只剩下选择

  • 让 jack 的 PID 为人所知main并明确地杀死它,或者
  • 让垂死的孩子杀死 杀死杰克德

对此有何建议?

.

0 投票
0 回答
58 浏览

c - Raspian 上的 JACK 问题

在从源代码成功配置、构建和安装 JACK v.2 之后,我正在尝试编译一个简单的 JACK 客户端示例:

但是,编译器会返回以下错误:

它们可能是由于 ARM 处理器架构造成的吗?请你给我一些关于如何解决它们的提示吗?

该文件的源代码simple_client.c可在链接中找到。此外,它已在 macOS Sierra 上成功编译和测试。

0 投票
0 回答
341 浏览

android - GC 开销限制超出 Android Studio

当我运行我的项目时,会出现下一个错误。

但我在我的 build.gradle 文件中使用下面的代码。

我该怎么做才能避免这种失败?有人可以帮我吗?

0 投票
0 回答
356 浏览

android - 无法在变体“debugAndroidTest”上找到 Java 编译器

Sonarqube 不适用于 Android Studio 3.0(Gradle 2.3.3,启用 Jack)。

场景

工作正常:

  1. 使用 Gradle 2.3.3 在 Android Studio 3.0 中创建默认项目
  2. 编译,构建,一切正常。
  3. 添加插件“org.sonarqube”(类路径,应用)
  4. 使用参数启动声纳:

    /li>
  5. 一切都好,没有错误,在网络控制台中我看到了结果。

不工作:

  1. 使用 Gradle 2.3.3 在 Android Studio 3.0 中创建默认项目
  2. 添加插件'me.tatarka.retrolambda'(类路径,应用),编译,构建。
  3. 在 MainActivity 中使用 lambda
  4. 添加到 build.gradle:

    /li>
  5. 编译,构建,一切正常。

  6. 添加插件“org.sonarqube”(类路径,应用)。
  7. 使用参数启动声纳:

    /li>
  8. gradle 控制台中的错误:

任何人都可以帮忙吗?

UPD:我不能使用 gradle 3+ 或 retrolambda 插件,因为它们与我们项目框架中使用的冲突。

UPD2:

找到临时解决方案 - 添加到 build.gradle:

0 投票
0 回答
553 浏览

android - 三星设备连接免提时如何更换麦克风进行录音?

我正在使用OpenSL_ESAndroid,当我将耳机与免提连接时,三星设备中的麦克风源选择存在一些问题。

问题是无论我设置什么麦克风源OpenSL_ES,增益配置都会改变,但麦克风始终是免提麦克风。换句话说,当我连接免提设备时,我无法使用设备内置麦克风。

我努力了:

将麦克风源更改为所有可用源:

以上均不允许我更改源(仅增益配置)

在我读过的一些地方,可以设置“hack” SL_ANDROID_RECORDING_PRESET_NONEOpenSL_ES然后使用 Java 中的 MediaRecorder 类来准备录音机,同时更改麦克风源(例如 9),以检查其中一个是否会使电话改变源到设备内置麦克风,因此目前OpenSL_ES将采用默认麦克风。这没有太大意义,因为它们在不同的环境中工作,但需要时间进行测试,并且 MediaRecorder 在连接免提时也不会更改麦克风源。

我看到的一个选项是在三星的 Jack 库中开发我的麦克风模块,假设该库可以更改麦克风源。但是我不确定这是否可能。

问题: 你知道我该如何解决这个问题吗?

我已经看到一些应用程序能够成功完成这项工作,但我不知道他们在做什么来完成这项任务。

0 投票
1 回答
144 浏览

python - 无法在 Mac OS HS 10.13.2 上运行 JACK

我已经用 pip 安装了 JACK-Client,但是在导入 jack 时出现此错误

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 回答
1805 浏览

javascript - 通过网络将系统音频流式传输到 Web 浏览器 (javascript)

我正在寻找是否可以调出由 1 台 PC 和 1 部智能手机组成的环境:

  1. PC1 无屏幕运行并使用 JACK 音频服务器(或 alsa 或其他)
  2. 智能手机连接到 PC1 的同一网络,浏览器指向http://pc1/

是否可以在智能手机的 WebBrowser 上流式传输 PC1 的系统音频?任何人都可以解释我怎么做?在服务器端(Linux/Jackd)和客户端(带有音频 API 的 WebBrowser 上的 Javascript)

问候

0 投票
0 回答
815 浏览

python - 如何在python中记录来自声卡的信号

我想处理来自声卡(即 USB 外置声卡)的音频数据。例如:我可以在播放 Youtube 剪辑和 PC 游戏时录制所有声音。但是,我尝试过 Pyaudio,它只允许我从麦克风录制音频。有人可以建议我尝试任何图书馆吗?非常感谢!

0 投票
0 回答
1310 浏览

python - 如何删除 PyAudio 错误?

我正在尝试解决一个已接受问题的解决方案,该问题演示了如何使用 PyAudio 创建哔声。奇怪的是,我看到了很多错误。不幸的是,我从未以编程方式将任何音频数据发送到声卡,所以我不知道如何消除错误。互联网不是很有帮助,所以你能给我一些建议吗?谢谢!

这是一个产生哔哔声的简短程序,由 StackOverflow 上的答案提供:

这将导致以下输出行全部发送到 STDERR:

为什么将消息发送到 STDERR,它们是什么意思,我怎样才能摆脱它们(因为声音似乎按预期播放)?