supercollider - 如何在扬声器上或保存到输出文件中从终端命令行界面 (CLI) 以非交互方式播放 SuperCollider 文件?
问题描述
我正在尝试使用 SuperCollider 获得一些乐趣,而对我来说,乐趣意味着在 shell 中运行命令!
到目前为止,我已经设法向扬声器播放:
rs.scd
s.waitForBoot({
// Play scale once.
x = Pbind(\degree, Pseq([0, 3, 5, 7], 1), \dur, 0.25);
x.play;
});
和:
sclang rs.scd
并保存到https://doc.sccode.org/Guides/Non-Realtime-Synthesis.html中提到的文件:
nrs.csd
x = Pbind(\degree, Pseq([0, 3, 5, 7], 1), \dur, 0.25).asScore(1, timeOffset: 0.001);
x.add([0.0, [\d_recv, SynthDescLib.global[\default].def.asBytes]]);
x.sort;
x.recordNRT(
outputFilePath: "nrt.aiff",
sampleRate: 44100,
headerFormat: "AIFF",
sampleFormat: "int16",
options: ServerOptions.new.numOutputBusChannels_(2),
duration: x.endTime
);
0.exit;
所以为了实现我的目标,我错过了:
- 玩完后如何自动退出
rs.scd
?我可以这样做1.wait; 0.exit;
,但这迫使我对 进行硬编码1
,这是正在播放的 4 个 0.25 秒音符的长度(以秒为单位)。这1
也是硬编码的nrs.csd
,如果能够将它也分解出来,那就太好了。 - 如何制作可以在扬声器上播放或保存到文件的单个文件,例如基于我在运行它时选择的命令行选项?我想我最终会通过玩
thisProcess.argv
and an来管理if
,但是有没有更简单的方法?
我以前在玩 CSound,在那里工作时获得类似的“hello world”要简单得多。
在 SuperCollider 3.10、Ubuntu 20.04 上测试。
解决方案
对于你的第一个问题:
在x.recordNRT
你可以添加一个动作。该函数将在分数结束后执行。
...
x.recordNRT(
...
duration: x.endTime,
action: {0.exit}
);
对于你的第二个问题:
这是一个不寻常的用例。我不知道比 argv 和 if 语句更好的方法。(另见https://doc.sccode.org/Classes/Main.html#-argv)
您可以在 if 之前放置的内容包括:
构建您的模式并创建您的 synthdef。
If 之后需要做的事情包括将 SynthDefs 发送到服务器,因为 NRT 服务器与本地服务器不同。请参阅您链接的帮助文件以获取有关此的一些警告。
推荐阅读
- image - 在颤动中显示带有网格视图的图像
- git - 何在 git 存储库中获取 PR 流程
- docker - 无法远程登录到 MariaDB 容器
- azure - 使用 terraform 和 arm 模板通过工作流部署逻辑应用程序的最佳方法?
- html - 如何使事件标题出现在多行完整日历版本 5(资源时间线视图)
- azure - Azure Web App webconfig“虚拟应用程序和目录”
- wordpress - 使用 Google Maps Api 在点击事件上显示 2 点之间的方向
- oauth - 在公共应用程序上使用 Gmail API(基于 oauth)会花钱吗?
- r - 如何在 R 中添加和重新排列 XML 文件的节点?
- azure - 通过 Rest API 访问事件网格管理