SuperCollider在耳机上听不到声音

时间:2014-07-30 18:26:19

标签: ide programming-languages supercollider

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

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

  

启动57110
  本地主机
  JackDriver:客户名称是' SuperCollider'
  SC_AudioDriver:采样率= 48000.000000,驱动程序的块大小= 1024
  JackDriver:连接系统:capture_1到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 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
      代码:Int8Array的实例(0x2119cc0,size = 4,set = 2)
      选择者:零       常数:无       prototypeFrame:Array的实例(0x2119c00,size = 3,set = 2)
      上下文:无       argNames:SymbolArray的实例(0x2119b40,size = 3,set = 2)
      varNames:无       sourceCode:nil
      ownerClass:类Meta_ServerOptions(0x21113c0)
      name:Symbol' prListDevices'
      primitiveName:Symbol' _ListAudioDevices'
      filenameSymbol:Symbol' /usr/share/SuperCollider/SCClassLibrary/Common/Control/Server.sc'
      charPos:整数4025
  }
  错误:原始'无'失败。
  失败。
  接收器:
     零
  CALL STACK:
      MethodError:reportError 0x3601498
          arg this =
      无:handleError 0x1f730f8
          arg this = nil
          arg error =
      线程:handleError 0x35fcfd8
          arg this =
          arg error =
      对象:抛出0x3980c58
          arg this =
      对象:primitiveFailed 0x33395a8
          arg this = nil
      译员:interpretPrintCmdLine 0x3d061e8
          arg this =
          var res = nil
          var func =
          var code =" ServerOptions.devices;"
          var doc = nil
          var ideClass =
      处理:interpretPrintCmdLine 0x3443c08
          arg this =
  ^^前面的错误转储是针对ERROR:Primitive' none'失败。
  失败。
  接收人:零   启动57110
  本地主机
  JackDriver:客户名称是' SuperCollider'
  SC_AudioDriver:采样率= 48000.000000,驱动程序的块大小= 1024
  JackDriver:连接系统:capture_1到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 ms
  从服务器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
      代码:Int8Array的实例(0x2119cc0,size = 4,set = 2)
      选择者:零       常数:无       prototypeFrame:Array的实例(0x2119c00,size = 3,set = 2)
      上下文:无       argNames:SymbolArray的实例(0x2119b40,size = 3,set = 2)
      varNames:无       sourceCode:nil
      ownerClass:类Meta_ServerOptions(0x21113c0)
      name:Symbol' prListDevices'
      primitiveName:Symbol' _ListAudioDevices'
      filenameSymbol:Symbol' /usr/share/SuperCollider/SCClassLibrary/Common/Control/Server.sc'
      charPos:整数4025
  }
  错误:原始'无'失败。
  失败。
  接收器:
     零
  CALL STACK:
      MethodError:reportError 0x35be518
          arg this =
      无:handleError 0x1ee0b78
          arg this = nil
          arg error =
      线程:handleError 0x3470ab8
          arg this =
          arg error =
      对象:抛出0x3636a78
          arg this =
      对象:primitiveFailed 0x3cd86c8
          arg this = nil
      译员:interpretPrintCmdLine 0x3d44b98
          arg this =
          var res = nil
          var func =
          var code =" ServerOptions.devices;"
          var doc = nil
          var ideClass =
      过程:interpretPrintCmdLine 0x37c8708
          arg this =
  ^^前面的错误转储是针对ERROR:Primitive' none'失败。
  失败。
  接收者:没有

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

先谢谢。

4 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我使用KXStudio的Catia发现了解决方案。见Catia Catia是一个JACK Patchbay。 (其他补丁可用。例如QJackctl和Patchage)。在我的系统(戴尔Studio笔记本电脑上的Ubuntu 14.04)上,SuperCollider将其前4个输出映射到4个系统播放。前2个系统播放是扬声器,系统播放3和4是耳机。通过将out1和out2从SC重新映射到playback_3和playback_4,我通过耳机听到它。所以,抓住JACK的补丁包,看看你看到了什么。 希望这会有所帮助。

答案 1 :(得分:1)

我遇到了类似的问题(根本没有来自supercollider的输出,只是完全和完全沉默),这篇文章最终使我找到了正确的解决方案。我认为这对你和其他人都有帮助。

the ServerOptions documentation开始,我发现我可以配置SC如何与环境变量进行对话。

就我而言,我开始使用相关的环境变量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_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以查看您的系统是否按照您的要求进行设置!

答案 2 :(得分:1)

在这个问题上无数次挣扎之后,我设法让它与之合作:

  1. 将您的用户添加到if( pipe(pipe_fd) == -1) { perror("Error in creating the pipe \n"); exit(-1); } pid_t pid; pid = fork(); char message[BUFFER_SIZE] = "Greetings"; char read_message[BUFFER_SIZE]; if(pid==-1) { perror("Error in creating the child! \n"); exit(-1); } linux组。
  2. 使用audio启动插孔
  3. 可能有用的其他资源:https://wiki.archlinux.org/index.php/JACK_Audio_Connection_Kit

答案 3 :(得分:0)

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

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

您似乎正在使用Linux,因此请在终端中运行命令alsamixer,这是检查耳机输出是否静音的好方法。如果您不熟悉,请使用man alsamixer了解如何使用它。