问题标签 [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.
ubuntu - 在 ubuntu 16.04 上安装 Jack 时遇到问题
在Ubuntu 16.04 上安装 Jack ( http://jackaudio.org/downloads/ ) 时遇到问题。错误的主要来源似乎来自以下行:
gcc - 弱链接与“--按需”
我在使用包含弱符号和--as-needed
链接器标志的库时遇到问题。
例子
(这使用Jack库)
(示例代码被编辑为不再出现段错误,因为段错误不是我的实际问题)
问题
看来问题是:
Jack将所有符号声明为弱符号(如果我包含
<jack/weakjack.h>
)。这对我来说很好;我确实希望我的符号保持弱。尤其是 我的程序与 OSX (-weak_framework Jackmp
) 上的 jack 链接很弱,这需要包括<jack/weakjack.h>
与 链接时
--as-needed
,链接器会排除任何不引用至少一个非弱符号的库。从手册页:
--as-needed 导致 DT_NEEDED 标记仅针对链接中的该点满足来自常规目标文件的非弱未定义符号引用的库发出
- 某些操作系统(例如 Ubuntu-16.04LTS)已
--as-needed
默认启用。
现在我认为这--as-needed
是一个很好的链接器功能,可以摆脱许多真正不需要的运行时依赖项。
但是,我不明白为什么弱依赖被认为根本没有依赖。对我来说,弱依赖是启用可选功能。如果可能,我确实希望启用这些功能,并且是否可能的决定应该是运行时决定。对于当前的行为,它变成了编译时的决定。(如果我想要,我只需通过一些预处理器魔法禁用相关代码)。
一种解决方案显然是添加--no-as-needed
到链接器标志。我不希望这样:如果我的发行版(或编译我的二进制文件的人)认为这是要做的事情,我确实想摆脱过度链接。
所以我可能会在as-needed
链接我已知的弱库后打开:
但这也感觉不对,因为在我强制需要的库之后的所有库都突然被迫这样做--as-needed
(这可能不是我的发行版或编译我的二进制文件的人认为这是要做的事情)。它似乎也给构建链增加了很多麻烦,只是因为某些库恰好只导出弱符号。我不想手动跟踪所有这样做的库。
我当然也可以不包括<jack/weakjack.h>
. 之所以包含它,是因为该应用程序也可以在 OSX 上运行,我确实希望在其中选择依赖JACK 框架(所以我链接到-weak_framework Jackmp
),并在没有该框架的情况下保持我的程序可运行。
我真的不想因为不同平台上的链接器之间的细微差别而弄乱我的应用程序代码。这可能是我遇到的主要问题:为什么我应该在我的应用程序中添加特定于平台的代码来满足不同的链接器细节 - 我可能会添加特定于功能的代码,例如不包括weakjack.h
如果编译器没有等价的-weak_library
or -weak_framework
; 但目前看来,我能得到的最接近的是#ifdef __APPLE__
在这种情况下让我不寒而栗的东西)。
所以我真的很喜欢一些选项来强制只有弱符号的库仍然被动态链接。
有这样的事吗?
haskell - Haskell -- Concurrent I/O Routing
I am new to Haskell, and I'm not exactly sure how the concurrent I/O works. I'm exploring what can be accomplished with the JACK audio bindings. Basically, the following code is (almost) functional, but I need to press enter twice every time I input a value:
To clarify the problem:
I'm not sure, but it would seem that the IO stream is cycled through threads. Is there a way to make the program read every line of input, instead of every other line?
linux - QJackCtl Scripting start alsa_in after launch
所以我试图让 QJackCtl 在启动 Jack 服务器后启动 alsa_in 的实例来控制额外的音频设备。我已将此代码放在启动后执行部分中:
这导致 QJackCtl 挂起,直到我在系统监视器中杀死 alsa_in。然后我尝试用
在终端中启动它,而不是希望这会起作用,因为事实证明它没有,我真的不明白 QJackCtl 的脚本是如何工作的,所以任何帮助表示赞赏。
谢谢
docker - 从 docker 容器中创建一个千斤顶客户端
我使用插孔在我的电脑中的多个声卡之间路由音频。为了录制音频,我使用了一个非常方便的 FFmpeg 命令,它创建了一个可写的插孔客户端:
ffmpeg -f jack -i <client_name> -strict -2 -y <output_file_name>
. 到目前为止,这非常有效。
问题从这里开始:
我还有一个 nginx docker,它记录我的数据并使其可用于流式传输。当尝试在 docker 中使用相同的命令时,我收到以下错误:"Unable to register as a JACK client"
.
我开始查看FFmpeg 代码,发现 FFmpegjack_client_open
命令从 jack API 调用命令,但失败了。
似乎从 docker 内部的 FFmpeg 请求到主机上运行的 jackd 服务器之间的连接存在某种问题。
有没有一种简单的方法可以在两个 [暴露端口] 之间建立连接?
(我看到了一些像netjack2这样的解决方案,但在创建更复杂的服务器-客户端架构之前,我想找到一个更优雅的解决方案)。
谢谢您的帮助!
c - GtK+3.0 多线程应用
这是我的问题:我正在开发一个由以下组成的多线程应用程序:
- GUI线程-> GTK
- 辅助线程 --> 检查与 JACK 服务器的连接
- 杰克的 RT 线程-> 做一些声音阐述的东西
我已经实现了一个按钮小部件,它只接收来自助手和 RT 线程的信号,在其回调函数中修改 gui。
所以,我的问题是:谁在修改 GUI?我使用 gtk_main() 的助手/RT 线程或 gui 线程?
感谢您的合作!
编辑:我添加了代码 /** @file JPLowPassFilter.c * * @brief 这是一个实现数字低频通滤波器的简单客户端 */
audio - Jack 服务器无法在 Raspbian Jessie Lite 上创建新客户端
我已经按照此处https://github.com/iani/RPI-first-steps#step-3-get-and-install-jack-audio-drivers的说明使用 Raspbian Jessie Lite 在 Raspberry Pi 3 上安装了 Jack 2和像这样http://jackaudio.org/faq/linux_rt_config.html将用户添加到“实时”组。
当我使用以下命令启动 Jack 服务器时:
一切似乎都很好,杰克服务器输出是:
但是,当我尝试将 Pure Data 作为 Jack 客户端运行时,我会从 Pure Data 获得以下输出:
而杰克服务器抱怨:
我尝试使用 jack 用 mplayer 播放 mp3,但它的行为似乎相似。Mplayer 看起来像是在播放 mp3 但没有音频输出,控制台输出为:
Jack server 的输出与前一种情况类似:
我对在 linux 上处理声音真的很陌生,虽然我读过一些关于 linux 音频架构的东西,但我迷路了。我试图从控制台输出中搜索所有不同的错误消息,但没有找到答案。也许我在这里错过了一些非常基本的东西。
任何建议表示赞赏。
提前致谢。
java - 在java中选择八声道声卡的输出线
编辑:我现在正在使用 Jack(Jack Audio Connection Kit)。请参阅下面的答案。
我的 Raspberry Pi 上有一个声卡,有 8 个输出通道(四个立体声通道),一个 Octosound 卡。我想要做的是选择将声音路由到的通道之一。使用此代码,我打印声卡的信息:
这是我得到的输出:
现在这是我用来从 wav 文件输出声音的代码:
我尝试了很多事情,但在所有情况下,声音都来自所有输出。
python - 插孔音频 - 将应用程序同步到主控
我想知道使用jack audio api使我的应用程序与时基主应用程序保持同步的正确方法。
假设我有Hydrogen 鼓机以主模式运行,我想在 Hydrogen 播放的每个 1/4 音符上打印一条消息。
这就是我会做的直观(使用python):
所以我正在运行一个睡眠时间很少的循环,如果当前节拍已经结束,则检查每次迭代。
这对我来说似乎有点肮脏和不精确。那么解决这个问题的正确方法是什么?
java - 在 Android Studio 上与 Jack 和 Java 1.8 一起使用时,Collections.sort(list,comparator) 不反映更新的列表
人.java
LambdaExpressionExample.java
无论何时,我将 new Person 放在列表中并运行LambdaExpressionExample.java
,但它仍然没有给我更新的结果。代码是 100% 正确的。我正在使用安卓工作室。我使用 Jack 是因为我使用 Java 1.8 作为 lambda 表达式。这是我的build.gradle
文件
但是,当我重建并运行时,我看到了更新的结果。为什么是这样?