此为 Mathematica 4 文档,内容基于更早版本的 Wolfram 语言
查看最新文档(版本11.2)

2.9.18 声音的表示

1.9.13 节介绍了用函数和数据产生声音,这一小节讨论 Mathematica 中声音的表示.
Mathematica 处理声音的方式与图形类似,事实上,Mathematica 可以将声音和图形结合起来产生 "声道圈".
与图形类似,声音在 Mathematica 中用符号声音对象表示. 声音对象有头部声音, 包括一个声音基元集合,该基元构成了演奏的声音序列.

声音对象的结构

1.9.13 节中讨论的函数 PlayListPlay 的返回值是 Sound 对象.

Play 返回一个声音对象,在合适的计算机系统中,它也产生声音

这个 Sound 对象含有一个 SampledSoundFunction 基元,它用一个编译函数产生声音振幅的样本值

Mathematica的声音基元

在最低层,Mathematica 的声音是由一系列振幅样本值确定的. 在 SampledSoundList 中,这些振幅是在一个集合中直接给出的. 在 SampledSoundFunction 中,振幅是在输出声音时将指定的函数作用于一列整数变量而得到的. 在这两种情况下,所得到的振幅值必须在 -1和 1 之间.
ListPlay 产生 SampledSoundList 基元,而 Play 则产生 SampledSoundFunction 基元,在默认设置 Compiled->True下, Play 将产生一个包含 CompiledFunctionSampledSoundFunction 对象.
在产生包含各种声音基元的 Sound 对象后,就需要将它作为声音输出. 与图形类似,基本方案是把声音表示转换成Mathematica 笔记本前端等 外部程序能够处理的低级形式.
声音的低级形式是一系列表示振幅的十六进制数字. 在 Mathematica 中, 振幅大小是由在 -1 1之间变化的近似实数表示.在生成低级形式时,这些振幅 值被 "量子化". 可以用选项 SampleDepth 来指定每个样本中使用的二进制位数, 默认值是 SampleDepth->8,它产生 256 种不同的振幅,这对大多数情况是够用了.
选项 SampleDepth 可以用在函数 Play, ListPlayPlaySound 中. 在声音基元中,可以通过用列表  代替抽样速率变量的 方法来指定样本深度.
Mathematica 中可以把声音和图形结合起来,所以其低级形式不应当冲突. 像 2.9.14 节中讨论的一样,所有图形用PostScript 产生. 声音也是以特定的 PostScript 函数产生, 在不支持声音输出设备上它就被 PostScript 编译器忽略.

将声音输出到一个流中

Mathematica 用同一函数 Display 输出声音, 图形或二者的结合.
Play, ListPlaySound 中,选项 DisplayFunction 确定声音最终怎样输出,该选项的默认值是变量$SoundDisplayFunction. 一般这是调用 Display 的合适设置.