音效前沿:音乐符号软件,最终篇章
本月,我们将关注 FOMUS 和 MuseScore 音乐符号程序。首先,我想再次宣布第四届国际 Linux 音频会议将于 4 月 27 日至 30 日在德国卡尔斯鲁厄举行。如果您在该地区,请前往美妙的 ZKM(艺术与媒体技术中心)并了解会议进程。会议网站包含了预定的演示和活动的详细列表。之前的会议都非常成功,而这次会议有望更加出色。
现在我们回到我们正常的节目。
David Psenicka 的 FOMUS (FOrmat MUSic) 在 LilyPond 辅助应用程序中占据着独特的地位。事实上,FOMUS 远不止是 LilyPond 的另一个前端。根据其作者的说法,FOMUS 的设计目的是“促进将原始算法输出转换为可读的乐谱”。FOMUS 是一个基于 Lisp 的实用程序,可以以独立模式运行,也可以作为更通用的作曲程序的组成部分运行。在本文中,我将演示 FOMUS 的两种模式。
本质上,FOMUS 只做一项工作,但它做得非常好。FOMUS 接收来自算法作曲例程或诸如 Common Music 之类的程序的输出,并尝试将该输出渲染为音符名称和可理解的节奏值。然后,它尝试将这些信息放入常见的乐谱的可识别声部和谱线中。FOMUS 的记谱基元包括谱号、高八度记号、发音、文字标记、拍号等等。
FOMUS 程序创建一个输出文件,该文件格式化为直接导入到音乐符号程序中。当前的目标包括 Finale、Sibelius、Common Music Notation,当然还有 LilyPond。FOMUS 不一定会生成完美的输出文件,用户应该假设需要进行一些编辑才能完善他的乐谱。但是,FOMUS 完成了大部分繁重的工作,只需要少量编辑和布局工作即可在您选择的目标应用程序中完成乐谱。
FOMUS 仅可从 FOMUS 网页上指示的 CVS 源代码获得。它应该可以在任何运行受支持的 Lisp 的平台上使用,包括 Linux。只需将当前软件包下载到您的主目录中——将创建一个新的 fomus 目录——您就可以开始使用了。
将 FOMUS 用作独立程序很容易。启动您的 Lisp 解释器——在以下示例中我使用 SBCL——加载 FOMUS 并告诉 Lisp 您打算使用 FOMUS 中的函数和例程。以下是在我的 Demudi 系统上运行的过程
dlphilp@localdomain:~$ sbcl This is SBCL 0.9.9, an implementation of ANSI Common Lisp. More information about SBCL is available at <http://www.sbcl.org/>. SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. * (load "/home/dlphilp/fomus/load.lisp") ;; FOMUS v0.1.58 ;; Lisp music notation formatter ;; Copyright (c) 2005, 2006 David Psenicka, All Rights Reserved ;; See file "COPYING" for terms of use and distribution. T * (use-package :fm) T *
现在 FOMUS 已准备好使用。以下示例创建了一个从中音 C 到高八度 C 的半音阶,并将其输出格式化为 LilyPond
;;; Example 1: FOMUS writes a chromatic scale (fomus ;;; FOMUS code coming through... :backend '(:lilypond :view t) ;;; Declare LilyPond as the target output format and automate the display. :parts ;;; Assign instruments, clefs, key signatures, etc., to staves (defaults used here). (list (make-part :name "Flute" :instr :flute :events ;;; The loop adds 1 to the initial note value on each repetition, (loop ;;; creating the chromatic scale seen in Figure 1. for off from 0 to 12 by 1 ;;; Set and increment the offset value (i.e., the event start-time). collect (make-note :off off ;;; Cook up a note with :off for the start-time, :dur and :note for duration and pitch. :dur (if (< off 12) 1 4) ;;; On the 12th iteration the duration changes to a whole note (1 = a quarter note). :note (+ 60 off) ;;; Start at MIDI note number 60 (middle C in the display), add the offset value on repetition. )))))
图 1 说明了在 GhostView Postscript 查看器中看到的结果。注释应阐明代码的机制。请注意,当 FOMUS 的“:view”关键字设置为“t”(真)时,您新创建的 LilyPond 文件将被自动编译和显示。另请注意,此处的示例已由 LilyPond 2.7.3 渲染。
示例 1 是一个简单的示例,目的是解释原生 FOMUS 代码的结构。下一个示例通过引入随机数生成器用于音高和时值,使事情变得更加有趣
;;; Example 2: Random notes for guitar (fomus :backend '(:lilypond :view t) :parts (list (make-part :name "Guitar" :instr :guitar :events (loop for basenote in '(40 48) nconc (loop for off = 0 then (+ off dur) and dur = (/ (1+ (random 4)) 2) while (< (+ off dur) 60) collect (make-note :voice '(1 2) :off off :dur dur :note (+ basenote (random 20))))))))
由于随机化例程,每次后续运行都会生成唯一的乐谱。图 2 显示了在此代码的一次运行中创建的乐谱。显然,应该在 LilyPond 中编辑乐谱以添加标题和其他页眉信息,反转一些符杆方向,并可能重新分配一些八度音程位置。所有这些都可以在 LilyPond 本身中快速轻松地完成。
顺便说一句,FOMUS 会通知您音符是否超出您选择的乐器的范围,这对于保持可演奏性来说是一个受欢迎的便利设施。
我们的最后一个示例介绍了 FOMUS 作为 Rick Taube 的 Common Music 系统中的使用,Common Music 是一种功能强大的音乐创作编程语言。
;;; Example 3: Generating polyphony (in-package :cm) ;;; Makes Common Music functions available to the Lisp interpreter. (use-system :fomus :directory "/home/dlphilp/cm-systems/fomus/") ;;; Add the FOMUS functions to Common Music (defparameter *part* (new fms:part :instr :piano :partid 'pno)) (defun polygen (voice len minp maxp) ;;; These parameters (voice assignment, event length, minimum and maximum pitch) will be provided by the events statement. (process repeat len ;;; Repeat replaces the loop statement seen in the previous native Lisp examples. output (new fms:note ;;; Makes a new note on each loop iteration. :off (now) :voice voice :partid 'pno :note (between minp maxp) :dur 1/2) wait 1/2)) ;;; Wait for the duration of a half-note before repeating the process. (events (list (polygen '(1 2) 20 50 80) (polygen '(1 2) 20 40 70)) "test.ly" :parts *part* :view t) ;;; Generate event lists and send to target LilyPond file.
图 3 展示了结果。与示例 2 一样,乐谱仍然需要在 LilyPond 中进行一些处理。
Common Music 和 FOMUS 都是基于 Lisp 的语言,它们可以很好地融合在一起。Common Music 专门用于帮助作曲家使用计算机在 Rick Taube 称之为元级别的级别上工作,他将该组织级别称为“作品的组成”。这种音乐创作的元级别非常适合 FOMUS。Common Music 包含丰富的函数和例程,用于从随机化程序、偶然和混沌过程、马尔可夫表和微分音中创建音乐。在其众多灵活性中,Common Music 包括针对各种输出格式的能力。当前支持的目标包括声音合成程序,例如 Csound、Common Lisp Music 和 SuperCollider;实时 MIDI 流,包括 MidiShare 和 PortMIDI;图形显示程序,例如 Common Music 的 Plotter;以及记谱编码器,包括 Common Music Notation 和 FOMUS。对 FOMUS 的支持使 Common Music 能够将其输出数据直接转换为高质量的 LilyPond 乐谱,而无需中间 MIDI 文件或任何其他格式转换。
这个简短的简介仅仅暗示了 FOMUS 的功能。要了解有关 FOMUS 可以做什么的更多信息,请访问其网站,仔细阅读文档并试用该软件。无论是单独使用还是与 Common Music 一起使用,FOMUS 都是任何作曲家的基于计算机的工具包的绝佳补充。
Werner Schweer 作为优秀的 MusE MIDI 音序器的作者,在 Linux 音频社区中广为人知。几个版本前,Werner 决定将 MusE 的记谱功能从音序器中分离出来,并将其重写为一个基于 Qt4 GUI 工具包的图形独立乐谱编辑器。MuseScore 的传奇故事由此开始。
MuseScore 是一个雄心勃勃的项目,旨在为 Linux 音乐家提供真正的 WYSIWYG 音乐符号编辑器。开发尚处于早期阶段,当前的 0.3 版本被认为是 alpha 阶段的项目。然而,MuseScore 已经在实现其承诺的道路上(见图 4)。在其更有趣的工作功能中,MuseScore 支持 TrueType 字体用于其音乐符号,并导入和导出 MIDI 和 MusicXML 文件。它还支持 JACK 音频服务器,并提供了一个连接到优秀的 Fluidsynth 音色库合成器的钩子,用于在没有 JACK 连接的情况下播放您的乐谱。
MuseScore 中的音符输入与其他 GUI 符号编辑器类似。从符号调色板中选择一个元素,然后单击鼠标在谱表上的光标位置放置该元素。“布局”菜单为用户提供了在决定页面外观时相当大的灵活性(图 5)。此外,可以同时打开多个项目,并且通过 ALSA 音序器支持 MIDI 输入。MuseScore 的 JACK 支持允许您选择您选择的音频目标,因此您可以收听由您最喜欢的 Linux 软合成器播放的乐谱。
唉,我只能展示 MuseScore 的这一瞥。正如在 alpha 阶段可能预期的那样,该项目有时不太稳定。然而,Werner Schweer 继续开发它,他欢迎所有关于 MuseScore 的错误报告、建议和评论。如果您想看到适用于 Linux 的 WYSIWYG 音乐符号编辑器,您应该查看 MuseScore 并参与该项目。加入 MuseScore 邮件列表,发送这些错误报告,并成为这个独特软件的贡献者。Linux 音乐和声音社区会因此而爱你的。