Csound-expression 指南
欢迎来到最简单的文本合成器。
> dac $ osc 440
Csound-expression 是一个用于计算机音乐的 Haskell 框架。 借助这个库,我们可以即时创建我们的乐器。 在解释器中几行代码就足以让酷炫的声音从你的扬声器中播放出来。它可以用于简单的日常音频文件处理,也可以用于全面的现场表演。它可在 Hackage 上获得。
让我们看看如何用 Haskell 创作计算机音乐。
附录:
警告:该库在 ghci 中效果最佳。实时声音渲染函数 dac
会在后台生成一个子进程,在你停止运行程序的主进程后,该子进程可能会继续执行。
在 vim 中不会出现这种情况,但在 Sublime Editor 和使用 runhaskell
时会发生。因此,最好将你的程序写在单独的文件中,然后在 ghci 中加载它并调用 main
函数
(该函数使用 dac
函数运行声音渲染)。
新闻
新版本 5.3 发布。支持现代 Haskell 和 Csound,与全局 BPM 同步
让我们看看新功能。
-
项目已更新,可以与新的 GHC 8.4.x 编译。 同时也在之前的编译器上进行了测试,直到 7.8 版本。 因此,CE 应该可以在 7.8 到 8.4 的 GHC 编译器上编译。
-
库已更新以支持最新的 Csound 稳定版 6.10。 这次更新带来了许多新的 DSP 算法。 其中包括许多出色的滤波器,如 Korg 35 模拟滤波器的模拟, 或 Roland TB-303 谐振滤波器的模拟,零延迟反馈滤波器。 你可以在
Csound.Air.Filter
模块中找到它们。 -
此外,文档、示例和教程也已根据 最近的变化进行了更新。
-
这个版本还包含了对吉他有用的新效果。 比如 Roland Space echo 的模拟(函数
tapeEcho
或magnus
) 和环境吉他效果(ambiEnv
,ambiGuitar
)。 Space echo 模拟了磁带延迟的行为。 环境吉他检测音频信号中的击弦攻击并 将它们平滑处理,使其听起来像是音板。 -
新增了内置的BPM同步功能。用户可以使用
setBpm
函数设置全局BPM。然后可以使用同步赫兹(syn
函数)和秒数(takt
函数)到全局BPM的功能。这对于将延迟时间和LFO速率与全局BPM对齐很有用。同时,csound-sampler
模块也已更新,可以响应全局BPM的变化。 -
为提高库的可用性,增加了一些新功能,如添加新的实例来渲染Csound文件。例如,可以渲染具有任意数量输入和输出的函数,以及渲染带有UI的增强函数。
-
新增实用功能:
brown
用于布朗噪声,resizeGui
用于缩放GUI窗口大小。
5.2版本已发布。虚拟踏板盒、数组、新的OSC、完全支持单音合成器、补丁皮肤、所有GEN例程已实现
新特性:
-
完全支持单音合成器:
-
更新了单音合成器的参数。
之前是一对振幅和频率信号。 但这种表示方式无法捕捉音符重触发的概念。 我们无法创建具有尖锐攻击的单音合成器。
现在这个问题已经解决。我们可以使用adsr140或adsrMonoSynt函数来创建 具有固定攻击的单音合成器
-
monoSco - 用于使用单音合成器播放乐谱
-
monoSched - 用于使用单音合成器播放事件流
-
atSco和atSched现在也适用于单音合成器
-
-
补丁可以更换皮肤。Patch类型已更改。现在支持更改通用参数。 目前,通用参数仅包括低通滤波器类型。但在未来的版本中可能会扩展。
这个想法是我们可以用一些通用参数来参数化补丁,这样用户可以调整它们 而无需重写算法。
低通滤波器是定义合成器特性的重要工具。 随着最近添加了几种现代滤波器模拟器(如Korg (korg_lp)或酸性滤波器二极管), 能够快速切换滤波器是很好的。我们可以使用以下函数为补丁实现这一功能:
setFilter :: ResonFilter -> Patch a -> Patch a
-
添加了标准效果系列(请参阅
Csound.Air.Fx.FxBox
模块和指南)。 这些效果由Iain McCurdy友情提供(从他在Csound中的原始实现重新编码)。这些效果有朗朗上口的名称,并为多种类型定义。让我们简要讨论一下命名约定:
-
adele
- 模拟延迟 -
pongy
- 乒乓延迟 -
tort
- 失真 -
flan
- 镶边器 -
fowler
- 包络跟随器 -
phasy
- 相位器 -
crusher
- 比特压缩器 -
chory
- 立体声合唱 -
tremy
- 颤音 -
pany
- 声像 -
revsy
- 反向播放
此外,还有一系列预设,表示添加少量效果或大量效果的概念。 它们的后缀是1到5的数字。例如
flan1
或tort3
。如果效果支持 音色旋钮(低通滤波器的中心频率),后缀为b
表示明亮色调,m
表示柔和色调。 例如tort2m
或adele2b
。这些效果只是从信号到信号的函数:
dac $ hall 0.2 $ adele2 0.5 0.25 $ flan2 $ tort1m $ asigs
-
-
标准效果的UI小部件。
与效果一起,还有创建小部件(UI控件)的函数。它们遵循相同的命名约定, 只是添加了前缀
ui
。例如:uiTort
、uiAdele
或uiHall
。还有预定义的预设,如uiFlan2
或uiPhasy3
。 使用预设,我们将盒子置于对应给定预设的初始状态。但之后我们可以使用UI控件进行更改。结合
fxHor
、fxVer
和fxGrid
函数,我们可以轻松设计虚拟踏板盒。使用示例:
> let pedals = fxGrid 2 [uiFlan1, uiTort1, uiAdele2m 0.5 0.3, uiHall 0.25] > dac $ fxApply pedals $ (sawSeq [1, 0.5, 0.25] 2) * sqr 220
-
完整的GEN例程列表。此版本添加了以下GEN:
* 25 bpExps -- 以断点方式构造指数曲线段函数。 * 27 bpLins -- 以断点方式构造直线段函数。 * wave waveletTab -- 生成紧支小波函数。 * farey fareyTab -- 用整数n的Farey序列Fn填充表格。 * sone soneTab -- 生成包含sone函数值的表格。 * exp expTab -- rescaleExpTab 生成包含exp函数值的表格。 * tanh tanhTab -- rescaleTanhTab 生成包含tanh函数值的表格。 * 52 readMultichannel -- 从指定的源表创建交错的多通道表,格式符合ftconv操码的要求。 * 41 randDist -- 生成随机数值对列表。 * 42 rangeDist 生成离散值范围的随机分布。 * 40 tabDist -- 使用分布直方图生成随机分布。 * 43 readPvocex -- 加载包含PV分析的PVOCEX文件。
-
28 readTrajectoryFile -- 读取包含时间标记轨迹的文本文件。
-
24 readNumTab -- 从另一个已分配的函数表中读取数值并重新缩放。
-
21 dist, uniDist, linDist, triDist, expDist, biexpDist, gaussDist, cauchyDist, pcauchyDist, betaDist, weibullDist, poissonDist -- 生成不同随机分布的表格。
-
18 tabseg -- 编写由预先存在的波形组成的复合波形。
-
31 mixOnTab -- 混合现有表格中指定的任何波形。
-
32 mixTabs -- 使用FFT或线性插值重采样混合任何波形。
-
30 tabHarmonics -- 通过分析现有表格生成谐波分量。
有关它们生成的表格详情,请参阅Csound文档。 此外,创建表格的窗口函数签名已更新,变得更加具体。
-
使用宏定义的全局参数。我们可以在程序中创建Csound
.csd
文件,然后在任何安装了Csound的设备上运行它。能够在渲染后调整某些参数或设置一些全局配置参数是很有用的。在Csound中,我们可以通过宏来实现这一点。我们可以在代码中使用宏名称,然后通过命令行标志--omacro:Name=Value
来更改宏的值。现在Haskell也可以实现这一功能。有以下函数:
readMacrosDouble :: String -> Double -> D readMacrosInt :: String -> Int -> D readMacrosString :: String -> String -> Str
第一个参数是宏名称,第二个参数是默认值,当标志中未设置值时使用。
-
用于触发基于表格的包络的实用函数。它有两种形式。一种由事件流驱动,另一种仅由信号驱动。当信号非零时触发。
trigTab :: Tab -> Sig -> Sig -> Sig trigTab tab duration triggerSignal type Tick = Evt Unit trigTabEvt :: Tab -> Sig -> Tick -> Sig trigTabEvt tab duration triggerSignal
-
UI小部件的新函数。
-
我们可以更改窗口的相对大小。如果小部件太大或太小,我们可以使用以下函数重新缩放:
type ScaleFactor = (Double, Double) resizeGui :: ScaleFactor -> Gui -> Gui resizeSource :: ScaleFactor -> Source a -> Source a
它们更改给定小部件内所有小部件的默认最小尺寸。
-
网格布局。我们熟悉
ver
和hor
函数。通过它们,我们可以垂直或水平放置小部件。 现在还可以将小部件放置在网格上:grid :: Int -> [Gui] -> Gui
第一个参数指定每行的元素数量。
有方便的网格函数用于组合源小部件:
gridLifts :: Int -> ([a] -> b) -> [Source a] -> Source b
它将基于列表的函数应用于值生成器小部件列表,并将所有小部件放置在网格上。 第一个参数与
grid
相同。 -
UI默认尺寸现在稍小。
-
-
现在可以在GHC-7.8上编译
-
新函数
whileRef
用于命令式while循环。whileRef :: Tuple st => st -> (st -> SE BoolSig) -> (st -> SE st) -> SE () whileRef initState condition body
使用方法如下。它将初始状态存储在引用(局部变量)中,然后在谓词返回true时开始实现主体。注意,主体也会更新状态。
-
新的OSC函数,使读取被解释为信号的OSC消息变得容易。 例如,我们有一个用于音量控制的OSC例程。当消息发生时,我们更新值。 能够直接读取信号会很好:
listenOscVal :: (Tuple a, OscVal a) => OscRef -> String -> a -> SE a listenOscVal oscRef address initValue
这个函数有两个有用的别名。它们读取信号和信号对:
listenOscSig :: OscRef -> String -> Sig -> SE Sig listenOscSig2 :: OscRef -> String -> Sig2 -> SE Sig2
-
添加了在调整速度时保留攻击的循环器。 它们基于Csound的
temposcal
算法。 之前的循环器基于mincer
算法。它在底层使用FFT,可能会使锐利的攻击变得平滑。 对于打击乐循环来说,这是不理想的。temposcal
添加了保留攻击的功能。请参阅以下函数:
-- | 读取立体声文件并进行缩放 scaleWav :: Fidelity -> TempoSig -> PitchSig -> String -> Sig2 -- | 读取单声道文件并进行缩放 scaleWav1 :: Fidelity -> TempoSig -> PitchSig -> String -> Sig
还有用于缩放鼓或谐波乐器的预设(它们设置适当的保真度):
scaleDrum, scaleHarm :: TempoSig -> PitchSig -> String -> Sig2
保真度是FFT窗口大小的程度。窗口大小的公式为:2 ** (保真度 + 11)。
此外,
csound-sampler
也添加了相应的函数。wavScale :: Fidelity -> TempoSig -> PitchSig -> String -> Sam wavScale1 :: Fidelity -> TempoSig -> PitchSig -> String -> Sam
drumScale, harmScale :: TempoSig -> PitchSig -> String -> Sam
* **echo和pingPong的类型签名被简化了**。现在它们不使用副作用,看起来像纯函数:
~~~haskell
echo :: MaxDelayTime -> Feedback -> Sig -> Sig
pingPong :: DelayTime -> Feedback -> Balance -> Sig2 -> Sig2
~~~
* **`randSkip`和`freqOf`函数的类型签名被泛化了**。现在它们使用信号作为概率,而不是常数。因此我们可以在演奏过程中改变事件跳过的概率。
* **csound-catalog中添加了新的单音乐器**: `fmBass1`、`fmBass2`、`dafunkLead`以及一个多音乐器`celloSynt`。
这些乐器为构建具有尖锐音头的单音合成器提供了很好的示例。
实验性功能:
* **数组,包括所有操作码**和函数式遍历。详见指南[details](https://github.com/spell-music/csound-expression/blob/master/tutorial/chapters/BasicTypesTutorial.md#arrays-arr)。
* **命令式风格的乐器**。
使用命令式风格的乐器,我们可以按Csound的方式创建和调用乐器。
我们可以创建一个乐器并获取其唯一标识符。然后我们可以通过该标识符调度一个音符。
我们可以使用以下函数创建一个产生声音的乐器:
~~~haskell
newOutInstr :: (Arg a, Sigs b) => (a -> SE b) -> SE (InstrRef a, b)
~~~
它接收乐器的主体,并返回一个乐器引用和一个将写入输出的信号。然后我们可以像在Csound中那样使用`scheduleEvent`函数调用音符:
~~~haskell
scheduleEvent :: Arg a => InstrRef a -> D -> D -> a -> SE ()
scheduleEvent instrRed delayStartTime duration arguments
~~~
它接收乐器引用、从调用时刻开始的启动时间、持续时间(均以秒为单位)和其他参数。
注意,乐器引用由参数类型参数化。这样我们就不会向乐器传递错误的消息。
我们还可以创建不产生输出但执行有用操作的过程:
~~~haskell
newInstr :: Arg a => (a -> SE ()) -> SE (InstrRef a)
~~~
--------------------------------------
**5.1版本发布了!让我们在这个寒冷的冬天用新的明亮想法温暖我们的心!新特性:**
csound-expression
* **Patches的新数据类型!** 这个改变不兼容,但它为实时演奏patches带来了更好的支持!
多音和单音patches统一为单一数据类型,所以我们可以用相同的函数来演奏它们。
现在我们还可以创建分层patches,同时演奏多个patches,也可以将键盘分成多个区域,在不同区域演奏不同的patches。这是许多现代合成器中可用的有用功能。
但在这里我们可以包含任意数量的层!而且我们可以将单音和多音乐器混合在一起!
查看[patches指南](https://github.com/spell-music/csound-expression/blob/master/tutorial/chapters/Patches.md)了解详情。
* **硬同步和软同步**。添加了许多用于硬同步和软同步的函数。查看`Csound.Air.Wave.Sync`模块。
* **Morpheus来了**。包含了新的酷炫颗粒合成器。它基于partikkel操作码。
目标是简化使用partikkel操作码的工作流程。目前API是实验性的,可能会发生变化。
详情请查看`Csound.Air.Granular.Morpheus`模块。
* **滤波器的重写**。滤波器获得了新的名称,表示滤波器的音频质量。许多滤波器也经过重新设计
以统一参数(参数顺序和范围)。查看`Csound.Air.Filter`模块。
* **添加了许多出色的滤波器**,这要归功于Steven Yi的工作。现在我们可以使用
* 零延迟滤波器: `zlp`、`zhp`、`zbp`、`zladder`、`zdf2`、`zdf4`。
* 二极管阶梯滤波器(著名的TB-303酸性声音): `diode`、`linDiode`
* Korg 35滤波器: `korg_lp`、`linKorg_lp`、`korg_hp`
新的经典模拟滤波器:
* 切比雪夫I型和II型低通滤波器: lpCheb1, lpCheb2 (也有高通版本)
* 新的巴特沃斯滤波器: `clp`
具有特定特征的命名滤波器: `plastic`、`wobble`、`trumpy`、`harsh`。
* **使用脉冲响应变换音频现在超级简单**。查看`Csound.Air.Fx`模块中的新函数`monoIR`、`stereoIR`。
使用这些函数,我们可以轻松添加来自自然环境或经典混响单元的复杂而美丽的混响。
网上有大量的IR资源可以找到。
此外,它还添加了Victor Lazzarini提供的酷炫的`zconv`函数,用于零卷积延迟。
* **Cabbage支持**。添加了对构建[cabbage](http://cabbageaudio.com/)接口的完全支持。查看`Csound.Cabbage`模块。
我们可以用它创建vst插件! 仍需帮助进行测试。我们可以查看如何使用csound-expression库构建cabbage接口的教程: [Cabbage指南](https://github.com/spell-music/csound-expression/blob/master/tutorial/chapters/CabbageTutorial.md)。
* **经典混响的有用别名**,只有一个干湿比参数: `room`、`chamber`、`hall`、`cave`。
我们可以这样使用: `dac $ hall 0.25 mySynt`,而不是`dec $ mixAt 0.25 largeHall2 mySynt`。
* **类似模拟振荡器的原始波形**: `rawSaw`、`rawTri`、`rawSqr` 是基于查表的非限带版本。可用于 LFO 或比 `saw`、`tri` 或 `sqr` 更轻量级的振荡器版本。
* **mul' 新缩放函数**。带副作用的缩放。可用于随机包络的缩放。
* **添加表读写操作码**。增加操作码 `tablewa`、`tablew`、`readTab`、`readTable`、`readTable3`、`readTablei`。详见 `Csound.Tab` 模块。
* **从音频文件读取到表的便捷别名**。新增 `wavLeft`、`wavRight`、`mp3Left`、`mp3Right` 用于按通道读取音频。也可以用 `wavs` 和 `mp3s` 函数读取双通道。
* **支持多达8个输出**。增加了更多 `RenderCsd` 实例。现在我们可以同时回放多达8个信号!
* **抑制屏幕事件打印的实用选项**。默认情况下,Csound 会在屏幕上打印每条消息(带时间戳和振幅)。现在我们有了实用的 `noTrace` 函数来抑制这些消息。只需写 `dacBy noTrace $ mySigs` 即可停止它们。
* **为实时音频引擎添加更多选项设置器**。新的选项设置器:`setAlsa`、`setMme`、`setCoreAudio`。还修复了 OSX 的实时引擎名称。
csound-sampler
* **添加随机化模式**,我们可以按给定概率在固定模式中跳过节拍:`rndPat` 和 `rndPat'`。
**5.0 版本发布!新特性:**
csound-expression
* **微分音调音**。我们可以对乐器、音色、音色字体和 MIDI 乐器使用自定义音律。查看调音和微分音乐指南(另见 `Csound.Tuning` 模块)。有许多预定义的调音(包括古代音律)。现在我们可以用 Haskell 演奏正宗的巴赫音乐了!详见 [自定义音律。微分音乐](https://github.com/anton-k/csound-expression/blob/master/tutorial/chapters/Tuning.md)。
* **Csound API 函数**。我们可以通过许多其他语言与生成的代码进行接口。我们可以用 Haskell 生成代码,然后在其他环境中使用。我们可以用 Python 或 Clojure 构建 UI,可以创建 Android 合成器。详见指南中关于 Csound API 的部分。
详见 [Csound API。使用其他语言的生成代码](https://github.com/anton-k/csound-expression/blob/master/tutorial/chapters/CsoundAPI.md)。
* **Padsynth 算法**(需要 Csound 6.05)。有一些函数可以轻松使用出色的 PADsynth 算法,该算法旨在制作"生动"的乐器和自然的音色。不仅有探索该算法的函数,csound-catalog 包中还有基于它的新音色!查看指南中关于 PADsynth 的部分。许多 padsynth 乐器支持变形。我们可以在 2 种甚至 4 种音色之间交叉淡入淡出。
详见 [Padsynth 算法](https://github.com/anton-k/csound-expression/blob/master/tutorial/chapters/Padsynth.md)。
* **参数修饰符**使调制参数变得非常方便(对频率应用颤音或为参数添加一些随机性)。详见 [参数调制](https://github.com/anton-k/csound-expression/blob/master/tutorial/chapters/ModArg.md)。
* **硬限幅**被替换为**限幅器**。当振幅高于 `0dbfs` 值时应该不会产生失真。
* 添加**乒乓延迟**实现。查看 `Csound.Air.Fx` 模块中的 `pingPong` 函数。
* 添加 Rory Walsh 的全新**模拟滤波器**(需要 Csound 6.07)。查看 `Csound.Air.Filter` 模块中的 `alp1`、`alp2` 和 `alp3` 函数。
* 修复 `mixAt` 函数的错误。现在它不会重复副作用代码。
现在 `mixAt` 不再是基于 `At` 类的函数。它成为了自己的类 `MixAt` 中的方法。这解决了代码重复问题。
csound-catalog
* 基于 **PADsynth 算法**的**新乐器**。查看 `Csound.Patch` 中关于 PADsynth Sharc 乐器的部分。有新的深沉精神吠陀音色(vibhu、rishi、agni、prakriti、rajas、avatara、bhumi)。
详见 [Padsynth 算法](https://github.com/anton-k/csound-expression/blob/master/tutorial/chapters/Padsynth.md)。
csound-sampler
* 为 `At` 和 `MixAt` 类添加一些有用的实例。
**4.9.0 版本发布!新特性:**
csound-expression
* 创建 FM 合成器的函数。我们可以创建整个 FM 单元图(带反馈)。查看 `Csound.Air.Fm` 模块
* 支持单音合成器音色。查看 `Csound.Air.Patch` 中的 atMono
* 易于使用的双耳定位。查看 `Csound.Air.Pan` 模块
* 音色字体的音色构建(`sfPatch`、`sfPatchHall`)
* 表的表。我们可以创建包含表的表。
* 减法合成的谐波振荡器:`buz` 和 `gbuz`
* 音色的混响。为音色添加混响变得非常容易
(`withSmallHall patch`、`withLargeHall patch` 等)
* 一些错误修复
csound-catalog
* 添加了许多单音合成器。你可以在 `atMidi` 的位置使用 `atMono` 函数来使用它们。
单音版本的音色后缀为 `m`。
* SHARC乐器。SHARC数据库包含持续音符的FFT样本。
它包括许多管弦乐器。有许多新的音色补丁使用了来自SHARC库的自然音色。
请查看函数`soloSharc`、`padSharc`、`dreamSharc`。
csound-sampler
* 方便的函数`withBpm`允许在表达式范围内查询当前的bpm。
* 采样器映射器已经被泛化。
* 字符触发函数与bpm同步。
**4.8.3版本已发布!新特性:**
这对我来说是一个非常重要的发布。
它试图解决大多数开源音乐制作库中存在的问题。
通常缺少优美音色/音色包。用户面对许多音频基元,但没有音色来展示框架的真正威力。
这个版本解决了这个问题。请查看Hackage上的友好包csound-catalog。
它定义了200多种可直接使用的优美乐器。
csound-expression定义了一个名为`Patch`的新类型,用于描述带有效果链的乐器。这是开始音乐制作世界之旅的好地方。
有新的函数用于同步响应事件。事件触发可以与给定的BPM同步。
示例已修复,应该可以正常工作。
库已更新以支持GHC-7.10!
**4.8.2版本已发布!新特性:**
这个版本在多个方面改进了振荡器。
为许多标准振荡器添加了相位控制。
有函数可以使振荡器失谐并创建振荡器的合唱效果
(多重振荡器或合唱效果)。
增加了随机生成事件的支持(带随机频率)。
**4.8版本已发布!新特性:**
实现了多重录音循环器(见`Csound.Air.Looper`)。这是一个功能强大的小部件,
有很多控制选项。我们可以创建无限数量的录音点。
并且循环的长度不必对所有录音点都相同。
我们可以插入效果甚至外部控制器。所有这些都被打包成
一个简单的函数,生成一个小部件和输出信号。
有三种类型的循环器可用,一种用于原始信号输入,
另一种用于MIDI乐器,最后一种用于音色库。
您可以在[YouTube](https://www.youtube.com/watch?v=cQQt9bu_x-A)上看到它的实际效果。
有许多新的步进音序器可用。
4.8之前的步进音序器只能产生具有相等时间段的信号,
但新的步进音序器可以播放小旋律。支持temporal-media的API
用于步进音序器(见`Csound.Air.Envelope`)。
有一个名为`Seq`的新类型。它用于可以播放单音旋律的步进音序器。
有一个用于包络人性化的类型类。
它适用于linseg和步进音序器。它为持续时间或值添加了一定程度的
随机性(见`Csound.Air.Envelope` `HumanValue`和`HumanTime`)。
实现了MIDI选择器UI框(见`Csound.Air.Live`,`hmidiChooser`,`uiMidi`)。
它使在几个备选方案中选择MIDI乐器变得容易。有独立的
小部件和作为效果框实现的小部件。
`temporal-media`包中的`Compose`类被分解为
两个类:`Harmony`(带有`hor`函数)
和`Melody`(带有`mel`函数)。
**4.7版本已发布!新特性:**
乐谱已重新设计!低级的`CsdEventList`被更高级和灵活的
类型`Sco`所取代。乐器不再由对或三元组(单个事件)触发,
而是由乐谱触发!
该库现在依赖于用于延迟和组合值的通用API。
有用于组合的通用类型类。
有一个用于组合样本、音符和信号段的简单API。
`mel`按顺序播放单元,`hor`同时播放单元。
`del`将单元延迟给定的时间量,`lim`限制单元的时间。
`loop`创建无限循环。`loopBy`创建有限循环。
所有函数的列表可以在temporal-media包中找到。请参阅
模块`Temporal.Class`。
我需要更新指南以反映这些变化!
**4.6版本已发布!新特性:**
* 颗粒延迟和效果(见`Csound.Air.Granular`)
* 现在可以创建不仅用于读取而且用于写入的表格。
我们可以创建声音缓冲区(见模块`Csound.Tab`中的`newTab`和`newGlobalTab`)。
* 超矢量合成(HVS)。易于使用的HVS函数(见`Csound.Air.Hvs`)
使用HVS,我们可以用几个滑块控制大量参数。
HVS可以通过在参数快照之间插值来减少控制参数的数量。
* 用于光谱融合的新光谱函数:`crossSpecFilter`和`crossSpecVocoder`(见`Csound.Air.Spec`)
* 用于分段播放输入样本(前后)的新效果`trackerSplice`
(由Rory Walsh原创设计)。通过它,我们可以提取实时音频的片段并
重复或反向播放它们。
**4.5版本已发布!新特性:**
* 易于使用的颗粒合成(见`Csound.Air.Granular`)
* 支持opcode `mincer`。可以独立缩放音频文件的音高和速度
(见`Csound.Air.Wav`中的RAM读取函数)。
**4.4版本已发布!新特性:**
* 信号段。通过信号段,我们可以用事件流调度音频信号。
我们可以用按钮点击或其他实时事件限制音频信号。
我们可以重新触发样本,按顺序播放它们,以及
执行许多与事件流相关的其他操作。
* 用键盘和MIDI事件触发样本(见`Csound.Air.Sampler`)。