音频基础

Wolfram 语言为参数式和交互式音频处理提供内置支持,并完全与 Wolfram 语言强大的数学和算法能力相集成. 你可以创建和导入音频文件,并与内置函数一起操作,应用线性和非线性滤波器并以多种方式进行可视化.
音频创建和表示
可用数值数组、文件和 URL 创建音频对象.
Audio[data]
data 给出的带有采样的核内音频
Audio[file]
来自于 file 的核外音频
Audio[url]
来自于 url 的核外音频
Import[file]
file 中导入音频
AudioGenerator[model]
产生各种振荡器和噪声
创建音频的函数.
创建音频对象的最简单的方法是把 Audio 构建器封装于一个范围在 到 1 的实值向量.
以下是由数值向量创建的一个通道的核内音频对象:
另一种方式是从本地文件系统或任何可访问的远程位置的文件中获取核外音频对象. 核外音频对象不在内存中存储样本。.
以下是从 Wolfram 语言文档目录 ExampleData 中创建核外音频对象并显示由对象内部使用的字节数:
可以从文件或 URL 中 Import 来创建核内音频对象.
以下创建一个核内音频对象并显示由对象内部使用的字节数:
ExampleData 收集的 "Audio" 包含音频剪辑的样本.
以下列出了可用的音频剪辑:
以下列出了给定音频对象的属性:
Sound 对象的所有类型可以转换为 Audio.
以下的例子把 MIDI 音符转换为音频:
查看产生的音频的波形:
以下把由 SampledSoundFunction 表示的声音转换为音频:
可以使用 AudioGenerator 产生各种振荡器和噪声.
产生正弦音频:
产生 1 秒的粉色噪声:
音频属性
通过调用以下函数可以获取音频对象的有用属性.
AudioLength[audio]
给出 audio 对象的样本数
Duration[audio]
给出 audio 的长度(以秒为单位)
AudioChannels[audio]
给出 audio 数据中出现的通道数
AudioSampleRate[audio]
给出与 audio 相关的采样率
AudioType[audio]
给出 audio 中每个样本元素使用的值的类型
音频属性.
以下返回音频长度、持续时间、通道数、采样率和数据类型:
可以使用函数 AudioData 提取采样值的数组. 默认情况下,函数返回实值,你可以使用可选的类型参数查询指定的类型.
以下用范围为 到 1 的实值向量返回核内音频部分:
以下用范围为 127 到 128 的整数向量从核外音频提取的同样部分:
对于多通道音频,原始采样数据是由通道值的列表(二维数组)表示.
以下创建一个核外多通道音频对象并以通道值列表形式提取音频对象的部分:
多通道音频对象可分成单通道音频对象列表,相反,可以从任何数量的单通道音频对象创建多通道音频对象.
将示例立体音频对象分成两个单声道音频对象:
根据两个单声道音频对象创建立体音频对象:
音频可视化
可以各种方式可视化音频.
AudioPlot[audio]
绘制 audio 的波形
Periodogram[audio]
绘制 audio 的离散傅立叶(功率谱)的平方幅度
Spectrogram[audio]
绘制 audio 的声谱图
音频可视化函数.
绘制音频信号的波形:
突出显示音频信号的静音部分:
绘制音频信号的功率谱:
使用长度 512 和补偿 64 划分绘制音频信号的声谱图:
基本操作
许多有用的音频处理任务只需要对两音频对象或一个音频对象和常量进行简单的算术运算. 例如,可以通过与音频对象乘上一个常数因子或在音频对象上增加或减去常量来改变音量. 因此,所有带有属性 NumericFunctionListable 的 Wolfram 语言算子和函数会被重载以便处理音频对象.
audio1+audio2
相加两个音频对象
n*audio
与音频对象乘一个标量
Mean[{a1,a2,}]
计算音频对象列表的均值
音频对象的算术和统计运算.
创建两个音频对象的线性组合:
计算音频对象列表的均值:
计算音频对象的统计数据:
系统选项 "IndeterminateValue" 可用于取代可从算术运算中返回的结果,但不可以存储在音频对象中. 这些包括 ComplexInfinityIndeterminate.
显示 "IndeterminateValue" 选项的当前值并把它变成 2:
显示如何使用 "IndeterminateValue" 取代算术运算中结果中不可接受的值:
算术运算结果中的复数值被这些值的实数部分替代:
"IntermediateValue" 改回默认的零值:
考虑音频的操纵运算,通过剪辑、删除或填充改变音频持续时间. 这些运算服务于各种有用的目的. 剪裁和删减允许从更大对象的选取部分创建一个新的音频对象,其中填充一般用在末尾以扩展音频对象,以保证在许多音频处理任务中统一对待末尾样本.
AudioTrim[audio,{t1,t2}]
给出只包含介于 t1t2 间样本的音频对象
AudioPad[audio,m]
在两边填充音频,零的 m
AudioDelete[audio,{t1,t2}]
从时间 t1t2 处删除
AudioSplit[audio,{t1,t2,}]
在时间 ti 处分割 audio
AudioPartition[audio,dur,offset]
audio 分成重叠的部分
AudioIntervals[audio,crit]
当满足标准 crit,返回音频间隔
一些基本的音频运算.
选择音频对象的首秒:
显示应用于音频对象尾部的三种不同填充方法:
剪掉音频对象首尾部的静音:
删除音频对象第一和第三秒间的样本:
把音频对象分成两半:
把音频对象分成无重叠的部分:
把音频对象分成重叠的部分:
满足各种标准的间隔可被计算并被用于提取音频对象的对应块.
计算间隔,其中最大值大于 .1 并且光谱质心小于 800:
返回对应于以上计算的间隔结果的音频对象:
经常需要重采样或以某种方式规范化音频样本来改变音频对象的采样率. 执行这些基本任务的函数一应俱全.
AudioResample[audio,sr]
给出具有采样率 sr 的重采样的音频对象
AudioNormalize[audio]
规范化 audio 使得其样本最大绝对值为 1
AudioAmplify[audio,s]
用因子 s 乘以 audio 的所有样本
音频重采样、规范化和放大.
把范例音频的采样率变为 8000:
规范化音频样本:
增加音频对象的音量:
Wolfram 语言提供对音频对象列表执行运算的函数.
AudioJoin[list]
相连音频对象的列表
AudioOverlay[list]
重叠音频对象的列表
ConformAudio[list]
使列表中的每个音频对象有一致的属性
相连、重叠和一致性音频对象列表.
连接两个音频信号:
重叠两个音频信号:
统一两个音频信号: