4

我刚刚开始使用 supercollider 学习音频编程。当我播放声音时,我可以在扬声器上听到它,但不能在耳机上听到。

我在启动服务器时收到以下消息 -

引导 57110
localhost JackDriver
:客户端名称为“SuperCollider”
SC_AudioDriver:采样率 = 48000.000000,驱动程序块大小 = 1024
JackDriver:已连接系统:capture_1 到 SuperCollider:in_1 JackDriver
:已连接系统:capture_2 到 SuperCollider:
in_2 JackDriver:已连接 SuperCollider:out_1 到system:playback_1
JackDriver:将 SuperCollider:out_2 连接到 system:playback_2
SuperCollider 3 服务器准备就绪。
JackDriver:最大输出延迟 42.7 ms
从服务器 localhost 接收通知消息
共享内存服务器接口已初始化

我浏览了一些论坛,他们建议寻找输出设备选项并进行设置,我做了 -

ServerOptions.devices;

查找设备列表,但我在帖子窗口中收到以下错误 -

错误:未绑定原语。0 676
方法实例 { (0x21199c0, gc=01, fmt=00, flg=11, set=04)
实例变量 [15]
raw1 : Float 0.000000 00000000 0080000C
raw2 : Float 0.000000 00000300 03020003
代码: cc 02911 的实例size=4, set=2)
selectors : nil
constants : nil
prototypeFrame : Array 实例 (0x2119c00, size=3, set=2)
context : nil
argNames : SymbolArray 实例 (0x2119b40, size=3, set=2)
varNames :
无源代码:无
ownerClass:类Meta_ServerOptions(0x21113c0)
名称:符号'prListDevices'
原始名称:符号“_ListAudioDevices”
文件名符号:符号“/usr/share/SuperCollider/SCClassLibrary/Common/Control/Server.sc”
字符:整数 4025
}
错误:原始“无”失败。
失败的。
接收方:
nil
调用堆栈:
MethodError:reportError 0x3601498
arg this =
Nil:handleError 0x1f730f8
arg this = nil
arg error =
Thread:handleError 0x35fcfd8
arg this =
arg error =
Object:throw 0x3980c58
arg this =
Object:primitiveFailed 0x33395a8
arg this = nil
解释器:interpretPrintCmdLine 0x3d061e8
arg this =
var res = nil
var func =
var code = "ServerOptions.devices;"
var doc = nil
var ideClass =
Process:interpretPrintCmdLine 0x3443c08
arg this =
^^ 前面的错误转储是针对 ERROR: Primitive 'none' failed。
失败的。
RECEIVER: nil
booting 57110
localhost JackDriver
: client name is 'SuperCollider'
SC_AudioDriver: sample rate = 48000.000000, driver's block size = 1024
JackDriver: connected system:capture_1 to SuperCollider:in_1
JackDriver:将系统:capture_2 连接到 SuperCollider:
in_2 JackDriver:将 SuperCollider:out_1
连接到系统:playback_1 JackDriver:将 SuperCollider:out_2 连接到系统:playback_2
SuperCollider 3 服务器准备就绪。
JackDriver:最大输出延迟 42.7 毫秒
从服务器 localhost 接收通知消息
共享内存服务器接口已初始化
错误:未绑定原语。0 676
方法实例 { (0x21199c0, gc=01, fmt=00, flg=11, set=04)
实例变量 [15]
raw1 : Float 0.000000 00000000 0080000C
raw2 : Float 0.000000 00000300 03020003
代码: cc 02911 的实例大小=4,设置=2)
选择器:nil
常量:nil
prototypeFrame:数组实例(0x2119c00,size=3,set=2)
上下文:nil
argNames:SymbolArray 实例(0x2119b40,size=3,set=2)
varNames:nil
sourceCode:nil
ownerClass:class Meta_ServerOptions (0x21113c0)
name : Symbol 'prListDevices' originalName
: Symbol '_ListAudioDevices'
filenameSymbol : Symbol '/usr/share/SuperCollider/SCClassLibrary/Common/Control/Server.sc'
charPos : Integer 4025
}
错误: Primitive 'none' 失败。
失败的。
接收方:

呼叫堆栈:
MethodError:reportError 0x35be518
arg this =
Nil:handleError 0x1ee0b78
arg this = nil
arg error =
Thread:handleError 0x3470ab8
arg this =
arg error =
Object:throw 0x3636a78
arg this =
Object:primitiveFailed 0x3cd86c8
arg this = nil
解释器:interpretPrintCmdLine 0x3d44b
arg this =
var res = nil
var func =
var code = "ServerOptions.devices;"
var doc = nil
var ideClass =
Process:interpretPrintCmdLine 0x37c8708
arg this =
^^ 前面的错误转储是针对 ERROR: Primitive 'none' failed。
失败的。
接收方:无

我是 supercollider 的新手,我很难弄清楚错误的原因。请建议我如何解决这个问题。

提前致谢。

4

4 回答 4

2

我遇到了类似的问题(超级对撞机根本没有输出,只是完全完全沉默),这篇文章最终让我找到了正确的解决方案。我认为这将对您和其他人有所帮助。

ServerOptions 文档中,我发现我可以配置 SC 如何使用环境变量与 jack 对话。

就我而言,我使用相关的环境变量启动 scsynth,如下所示:

  SC_JACK_DEFAULT_INPUTS="system:capture_1" SC_JACK_DEFAULT_OUTPUTS="system" scsynth -u 57110 &

似乎这也可以在 sclang 中完成,如下所示:

  "SC_JACK_DEFAULT_INPUTS".setenv("system:capture_1");
  "SC_JACK_DEFAULT_OUTPUTS".setenv("system");

在您的情况下,您连接到错误的输出,您可能希望像这样启动 scsynth:

   SC_JACK_DEFAULT_OUTPUTS="system:playback_3,system:playback_4" scsynth -u 57110 &

另一种让您使用这些连接并找到适合您的方法的替代方法是使用 jack_lsp、jack_connect 和 jack_disconnect 命令。

要查看 Jack 服务器的所有输入/输出以及当前连接,请运行

   jack_lsp -c

从您的帖子中,我想您会看到类似

system:capture_1
    SuperCollider:in_1
system:capture_2
    SuperCollider:in_2
system:playback_1
    SuperCollider:out_1
system:playback_2
    SuperCollider:out_2
system:playback_3
system:playback_4
SuperCollider:out_1
    system:playback_1
SuperCollider:out_2
    system:playback_2

要将 SuperCollider 输出到您的耳机和扬声器,您可以将 out_1 和 out_2 连接到 Playback_3 和 Playback_4(假设这些是您的耳机),如下所示:

jack_connect SuperCollider:out_1 system:playback_3
jack_connect SuperCollider:out_2 system:playback_4

要断开与扬声器的连接,您可以这样做

jack_disconnect SuperCollider:out_1 system:playback_1
jack_disconnect SuperCollider:out_2 system:playback_2

再次运行jack_lsp -c以查看您的系统是否按照您的要求设置!

于 2015-02-28T19:31:12.517 回答
1

我有同样的问题。我通过使用来自 KXStudio 的 Catia 发现了解决方案。请参阅Catia Catia 是 JACK Patchbay。(其他的 patchbay 也是可用的。QJackctl 和 Patchage 就是例子)。在我的系统(戴尔 Studio 笔记本电脑上的 Ubuntu 14.04)上,SuperCollider 将其前 4 个输出映射到 4 个系统回放。前 2 个系统回放是扬声器,系统回放 3 和 4 是耳机。通过将 SC 中的 out1 和 out2 重新映射到回放_3 和回放_4,我可以通过耳机听到它。所以,为 JACK 找一个接线盒,看看你看到了什么。希望这可以帮助。

于 2014-11-22T22:29:18.993 回答
1

在为这个问题挣扎了无数次之后,我设法让它与它一起工作:

  1. 将您的用户添加到audiolinux 组。
  2. 用于cadence启动千斤顶

可能有用的其他资源:https ://wiki.archlinux.org/index.php/JACK_Audio_Connection_Kit

于 2017-12-25T15:43:13.933 回答
0

首先:说“”的大而长的错误消息A primitive was not bound令人不快,但在这种情况下,它只是意味着您输入了错误的命令。我不知道你从哪里得到这个命令ServerOptions.devices,但它是错误的。也许该消息旨在告诉您键入s.options.device哪个更明智,但这不是您需要做的。忘记这一点,忘记那长长的错误消息。

其次:您在启动服务器时看到的消息是好的,它告诉您服务器已启动并连接到插孔。超级对撞机很高兴。如果您从扬声器中听到声音但从耳机中听不到(我认为您的意思是当您插入耳机时!),这不是超级碰撞问题,而只是关于设置耳机音量的标准操作系统问题。

看来您使用的是 linux,所以alsamixer在终端中运行命令,这是检查耳机输出是否静音的好方法。如果您不熟悉,请使用man alsamixer它来了解如何使用它。

于 2014-07-31T17:32:19.267 回答