声音

在大多数计算机系统上,Mathematica 不仅能生成图形,也能生成声音. Mathematica 处理图形和声音的方法是非常类似的.

例如,正如能使用 Plot[f, {x, xmin, xmax}] 画函数的图形一样,用户也能使用 Play[f, {t, 0, tmax}] 来"演奏"一个函数. Play 采用函数来定义声音的波形:函数值给出作为时间函数的声音的振幅.

Play[f,{t,0,tmax}]播放振幅为时间 t 的函数 f 的声音, t 以秒为单位

播放函数的声音.

在合适的计算机系统上,这将演奏出1秒钟的纯音调,其频率为440Hz.
In[1]:=
Click for copyable input
Out[1]=

Play 生成的声音可以有任何波形. 例如,它们不必由谐波的集合组成. 一般地,用户给 Play 定义的振幅函数指定了相应于声音的瞬时信号. 这个信号被转换成电压和位移. 注意振幅有时被定义成声音对应的峰值信号;在Mathematica 中,它总是作为时间函数的瞬时信号.

这里播放一个更复杂的声音.
In[2]:=
Click for copyable input
Out[2]=

Play 被设置成使得其中的时间变量总是用绝对时间秒来度量. 当实际播放一个声音时,振幅每秒钟按一定的次数来采样. 用户可以通过设置选项 SampleRate 指定采样率.

Play[f,{t,0,tmax},SampleRate->r]播放声音,每秒钟进行 r 次采样

指定声音的采样率.

通常,采样率越高,声音中的高频成分被演奏的效果越好. 采样率 r 一般允许的频率范围不超过 Hz. 人类的听觉系统一般能分辨的音频范围是20~22000Hz (这依赖于年龄和性别). 钢琴上88个音符的基本频率的范围是27.5~4096Hz.

光盘播放机(CD)的标准采样率是44100Hz. 在一般电话系统中的有效采样率在8000左右. 大部分计算机系统中,Mathematica 所用的采样率也在8000左右.

可以用 Play[{f1, f2, ...] 产生立体声. Mathematica 通常可以支持任意数量的声道.

ListPlay[{a1,a2,...},SampleRate->r]用一系列振幅级播放声音

播放采样的声音.

函数 ListPlay 允许用户简单地给出一列值,这些值可以被作为按一定频率采样的声音的振幅.

Mathematica 在实际播放声音时,仅允许一定振幅范围的声音. 在 PlayListPlay 中的选项 PlayRange 指定怎样对所给振幅进行处理以适应给定的范围. 该选项的设置与 "图形选项" 一节中所讨论的图形选项 PlotRange 的设置类似.

PlayRange->Automatic用一个内部过程来调整振幅
PlayRange->All将所有振幅调整到允许范围内
PlayRange->{amin,amax}使 之间的振幅调整到允许的范围内,并剪掉其余的部分

指定声音振幅的调整.

尽管用缺省设置 PlayRange->Automatic 通常是很方便的,用户应当认识到如果明确指定了 PlayRangePlay 的运行速度会显著加快,因为它不需要推导 PlayRange.

EmitSound[snd]计算时播放声音

以编程方式播放声音.

Sound 对象的输出格式通常被设置为一个可视化的按键,当其被按压时,开始播放声音. 使用 EmitSound,声音可以在无需用户干涉或生成输出结果的情况下播放. 在按压 Sound 键时,内部执行程序实际上是使用的 EmitSound.

Sound 对象的内部结构在 "声音的表示" 一节中讨论.

New to Mathematica? Find your learning path »
Have a question? Ask support »