声音的表示
"声音" 一节介绍了如何用函数和数据列表产生声音. 这里讨论的是如何在 Mathematica 中表示声音.
Mathematica 处理声音的方式与图形类似. 事实上,Mathematica 可以将声音和图形结合起来生成具有"音轨"的图片.
与图形类似,在 Mathematica 中声音用符号声音对象表示. 声音对象以 Sound 为头部,包含一列声音基元,依次代表着被演奏的声音.
| Sound[{s1,s2,...}] | 包含一列声音基元的声音对象 |
在 "声音" 一节中讨论的函数 Play 和 ListPlay 的返回值是 Sound 对象.
| In[1]:= |
| Out[1]= | ![]() |
| In[2]:= |
Out[2]//Short= | |
| SampledSoundList[{a1,a2,...},r] | 具有一系列振幅级,采样率为 r 的声音 |
| SampledSoundFunction[f,n,r] | 采样率为 r,振幅级由函数 f 作用于 n 个连续整数得到的声音 |
| SoundNote[n,t,"style"] | 具有指定风格,音符为 n,持续时间为 t 的类似于音符的声音 |
在最底层,Mathematica 中的所有声音是由一系列振幅样本值或 MIDI 事件确定的. 在 SampledSoundList 中,这些振幅样本是在一个列表中明确给出的. 而在 SampledSoundFunction 中,振幅样本则是在输出声音时将指定的函数作用于一列整数变量而得到的. 在这两种情况下,所得到的振幅值必须在
和
之间. 在 SoundNote 中,一个音符样的声音是由代表着音频、持续时间、振幅和音符风格的一系列 MIDI 事件表示的.
ListPlay 生成基元 SampledSoundList,而 Play 生成 SampledSoundFunction 基元. 使用默认选项设置 Compiled->True,Play 将生成包含一个 CompiledFunction 的对象 SampledSoundFunction.
一旦生成了包含各种声音基元的 Sound 对象,必须将其作为声音输出. 与图形很像,基本途径是把根据 Mathematica 对声音的表示,将其转换成 Mathematica 前端等外部程序能够处理的更低级形式.
Mathematica 使用的声音样本的低级形式是一系列表示振幅级的十六进制数字. 在 Mathematica 中,振幅级是由在
和
之间变化的近似实数表示. 在生成低级形式时,这些振幅级被"量化". 可以使用选项 SampleDepth 来指定每个样本所使用的位数,默认值是 SampleDepth->8,它产生256种不同的振幅级,这对大多数情况是够用了. 基于音符的声音的低级形式是一个 MIDI 事件的时间量化的字节流,以此指定音符对象的各种参数. 时间的量化是在回放时自动决定的.
选项 SampleDepth 可以用在函数 Play 和 ListPlay 中. 在声音基元中,可以通过用列表
代替采样率变量的方法来指定样本深度.

