时间:2019年2月
版本:1.7.2
Introduction
miraudio不仅支持传入Floder,cell array,也支持传入txt文件作为参数。使用mirgetdata和get获取结果。
Basic Operators
miraudio
载入音频文件,重点是可以把Matlab column vector通过指定采样率转化成音频。
默认载入后转化为单声道。
mirframe
重要的是要指定帧间距和帧长。帧长可以通过秒和采样两种方式。帧间距也可以通过比例等多种形式。
mirfilterbank
mirenvelope
可以从音频波形计算包络,其显示信号的全局外形。 它对于显示信号的长期演变特别有用,并且特别适用于诸如音符之类的音乐事件的检测。
有两种策略,一种是基于Filter的,一种是Spectro的。还有很多相关的操作,诸如降采样,半波整流等。
mirspectrum
离散傅里叶变换。默认结果最小值0Hz,最大值为采样率的一半。
快速傅里叶变换要求长度为power of 2,所以对audio waveform进行了zero-padding。也可以使用'Mel'or'Bark'等参数对结果进行重构。
mircepstrum
谐波序列也可用于检测基频本身。 一个想法是查看频谱表示,并尝试自动检测这些周期序列。 一个简单的想法在于执行傅里叶变换本身的傅立叶变换,从而产生所谓的倒谱(Bogert等,1963)。
mirautocor
评估信号周期性的另一种方法(无论是音频波形,频谱,包络等)包括查看样本之间的局部相关性。
mirflux
计算连续Frame间的距离。
mirsum
似乎只能对三维数据的最后一维进行求和。也可以使用'Mean'直接求均值。
mirpeaks
标记顶点。
mirsegment
对audio waveform进行划分。
mirplay/mirplayer/mirsave/mirlength
mirddw
Mirfdw使用滤波器相关窗口(FDW)计算频谱子带特征。 与小波变换类似,FDW使用基于每个子带滤波器的中心频率的单独帧大小。结果默认是10个单独的结果组成的cell。
Feature Extractors
Dynamics
mirrms
对信号x的全局能量可以使用root mean square(RMS)来表示。RMS-Frame和envelope结果很相似。
mirlowenergy
计算小于RMS均值的比例。基于RMS-Frame。默认帧长50ms,帧间距为25ms。
Rhythm
处理音频信号中对于节奏的估计
mirfluctuation
估计节奏的一种方法是基于变换的频谱图计算(FFT),通过听觉建模,然后是每个频段的频谱估计(Pampalk等,2002)。mirfluctuation就是Pampalk提出的模型。
默认参数为23ms/frame,频率80Hz。默认用的是Bark bands,可以使用mirfluctuation(…, 'Mel')
替换为Mel波段。
(下图均为左图是Mel bands,右图)s = mirspectrum(rag,'Frame',.023,'s',80,'Hz','Power','Terhardt','Mel','Mask','dB')
和s = mirspectrum(rag,'Frame',.023,'s',80,'Hz','Power','Terhardt','Bark','Mask','dB')
获得未经FFT的结果:
f = mirspectrum(s, 'AlongBands', 'Max', 10, 'MinRes', .01,'Window', 0, 'Resonance', 'Fluctuation', 'NormalLength')
进行FFT(FFT的参数为.01Hz,使用mirfluctuation(..., 'MinRes', mr)
修改)。横坐标频率,纵坐标波段。横坐标默认是10Hz( mirfluctuation(..., 'Max', m)
修改最大值),纵坐标25-bands(Bark bands应该是20啊?为啥是25),使用Mel bands后纵坐标为40-bands。
mirfluctuation(..., 'Summary')
获得统计信息:
也可以使用
mirsum(f)
生成,可以应用到所有二维形式结果的统计。
修改默认参数:
>> mirfluctuation(rag, 'InnerFrame', 0.010, 30)
mirbeatspectrum
节奏频谱,通过计算时滞函数的自相似性,相似矩阵,参考mirsimatrix。
Q:为什么横坐标只到4s?
mirevents*
确定节拍的另一种方式是首先基于检测曲线的计算,示出对应于连续脉冲的连续能量脉冲串。 在检测曲线上自动执行峰值拾取,以显示事件的估计位置,例如音符,和弦等。峰值是通过mirpeaks标注的。
基于envelope(default)。包括Spectro(default)和Filter两种主要形式,默认参数均与mirenvelope相同。
形状和envelope也很相同,Filter几乎一致,而Spectro只是振幅比例发生了明显变化。
此外,还有分别基于mirflux、Emerge、mirpitch、mirnovelty的多种方法,结果分别如下:(无论哪种探测曲线的计算方法,最后都会被转化成envelope形式)
The 'Effort' method comes from Timbre Toolbox (Peeters et al., 2011). To get the same results as in Timbre Toolbox, use the following options: mirevents(r, 'Attack', 'Effort', 'Filter', 'CutOff', 5, 'Down', 0, 'Alpha', 3)
:
可以使用得到的结果进行波形的划分,不同的model得到的数值都是不同的,对波形的划分也不同。添加Frame参数得到一个划分好的结果,默认参数帧长3s,帧间距0.3s。
两个现成的模型,分别来自(Scheirer, 1998)和(Klapuri., 1999)。
Q:这么多模型,哪个效果最好?
mireventdensity
统计每秒events的数量,依赖于选择的events模型。
mirtempo
通过检测事件检测曲线的周期来估计节拍。
方法一:用于节奏估计的经典范例基于检测一系列BPM中的周期性,并且分别选择每个帧的最大周期性得分。步骤:1.events,默认envelope;2.Frame,帧长3s,间距0.3s;3.周期性探测,分别为Autocor模式、Spectrum模式、混合模式。
Q:横纵坐标含义?
方法二:通过构建分层的度量结构(使用mirmetre)来跟踪速度。 这使得能够找到连贯的测量级别,从而产生连续的节奏曲线。
mirmetre
通过检测事件检测曲线的周期性并跟踪大量的度量级别,提供层次度量结构的详细描述。
步骤:1.mirevents,默认Emerge且没有事件检测('Detect' set to 0);2.mirautocor,默认帧长5s,间距0.25s,最小值24bpm;3.peak picking
Q: 横纵坐标含义?上图为直接传入miraudio参数。
Q:lag的含义?
mirmetroid
提供从使用mirmetre进行的度量分析得出的两个描述,以及进一步选择的主要度量级别。结果也是一个BPM的数。
mirpulseclarity
估计节奏清晰度,表示由mirtempo函数估计的节拍强度。可以选择多种清晰度的计算方式,所有的结果都是基于temop算出的autocorrelation curve。默认的是MaxAutocor。除此以外,还有一些基于简单的检测曲线本身的方法。
还有两种模式可以选择,模式1得到的结果和默认结果不相同,模式2不知为啥运行不出来。
Timbre 音色
mirattacktime
在mirattacktime中提出的描述attack phase的一种简单方法在于估计其时间持续时间。来源于mirevents的Attacks参数。可以修改mirevents的参数。
The log attack time given by the Timbre Toolbox (Peeters et al., 2011) [a b] = mirattacktime(r, 'Filter', 'Attack', 'Effort', 'Log', 'Down', 0, 'CutOff',5)
(图三为取消log图)
mirattackslope
平均斜率,依然来源于events。两种形式,分别是Diff和Gauss。
mirattackleap
mirdecaytime/mirdecayleap/mirdecayslope
描述decay phase,和attack phase相似。
mirduration
mirzerocross
描述噪声特征noisiness,看它改变了几次符号(穿过几次X轴)。默认值只计算了从负到正的次数。
mirrolloff
This ratio is fixed by default to .85 (following Tzanetakis and Cook, 2002), other have proposed .95 (Pohle, Pampalk and Widmer, 2005).
mirbrightness
参数设置:MinRMS .005;'CutOff' specifies the frequency cut-off, in Hz. Default value: 1500 Hz. The value 1000 Hz has been proposed in (Laukka, Juslin and Bresin, 2005), and the value of 3000 Hz has been proposed in (Juslin, 2000).
mircentroid, mirspread, mirskewness, mirkurtosis, mirflatness, mirentropy
The spectral distribution can be described by statistical moments: centroid, spread, skewness, kurtosis, flatness as well as by entropy.
mirmfcc*
MFCC描述了声音的频谱形状。
在这里,频带以对数方式定位(在Mel标度上),其比线性间隔的频带更接近地近似于人类听觉系统的响应。 并且傅立叶变换被离散余弦变换取代。 离散余弦变换(DCT)是类似于离散傅里叶变换(DFT)的傅立叶相关变换,但仅使用实数。 它具有强大的“能量压缩”特性:大多数信号信息往往集中在DCT的一些低频分量中。 这就是为什么默认情况下只返回前13个组件。
学习: https://www.cnblogs.com/BaroC...
mirroughness
Plomp和Levelt(1965)提出了一种估计每当正弦波在频率上闭合时与搏动现象相关的感觉不协调或粗糙度。通过计算光谱的峰值,并采用所有可能的峰值对之间的所有不一致的平均值,可以得出总粗糙度的估计值(Sethares,1998)。
mirregularity
频谱的不规则性是频谱的连续峰值的变化程度。默认Jensen。
Pitch 音高
mirpitch
提取音高,以连续音高曲线或离散音符事件的形式返回。默认返回的元素数量不确定。分别对应着Autocor,AutocorSpectrum,Spectrum三种模式。(默认双声道)
预设模型:mirpitch(..., 'Tolonen')
mirmidi/mirinharmonicity
没跑出来
Tonality 音调
mirchromagram
mirkeystrength
mirkey
mirmode
对于modality的估计,结果(-1,+1),越大越重要,越小越次要。指定Frame后可能更有用。默认的best是major和minor的最大值的差值,Sum是所有最大最小值对的差值的和。
mirkeysom
mirtonalcentroid
从色度图计算6维音调质心向量。 它对应于弦的投影沿着五个圆,三分之二和三分之一的圆(Harte和Sandler,2006)。
mirhcdf
HIGH-LEVEL FEATURES
Structure and form
mirsimatrix
相似性矩阵显示来自输入数据的所有可能的帧对之间的相似性。传入的数据必须是Frame后的才可以。
mirnovelty
一种特定的结构描述涉及时间连续的时刻,每个时刻都以特定的音乐特性为特征。 novelty曲线表示由峰值指示的连续状态之间存在转变的概率,以及由峰值高度指示的它们的相对重要性。由aimatrix得来
方法一:基于Gaussian checkerboard kernel的方法,此方法取决于内核的大小。
方法二:(Lartillot,Cereghetti,Eliard和Grandjean,2013)介绍了一种更简单但更强大的通用方法,可自动检测任何大小的同质段。默认使用此方法。
Statistics
mirmean/mirstd/mirmedian
以帧为基础返回统计特征。不会用。
mirstat
结果似乎也不是很可靠。
mirhisto
产生直方图。X轴等间隔。似乎有点用。要看好产生的数据究竟是哪个数据得出的。
mircentroid
返回曲线的形心,默认计算得的是频谱形心。不同音频的频谱质心差距还是很大的。只接受两种类型的输入,如果是原始音频文件则输出频谱质心;如果是Extract后的peaks文件,则分别计算频谱质心。其他类型的输入还不知道怎么用。
mirspread
返回标准差std。可以传入多种数据,似乎比上边的函数效果好。其余参考上函数。
mirskewness
偏斜系数,衡量数据是否对称分布的系数。
mirflatness
返回数据的平坦度。
mirentropy
相对香农熵
mirfeatures
使用
mirfeatures(..., 'Stat')
后结果还需验证。
Predictions
miremotion只有1.3版本能用。
mirclassify可以传入Floder。
mircluster聚类算法
Similarity and Retrieval
mirdist用于计算两段音频的距离。同一音频不同质量的dist还是很小的。
mirquery查询
Exportation
mirgetdata 返回到的是可能是没有X轴的数据
mirexport 导出到文件
ADVANCED USE OF MIRTOOLBOX
mirtemporary默认关闭,可以把floder的结果导入到一个临时文件。mirwaitbar(0)
toggles off the display by MIRtoolbox of waitbar windows. mirverbose(0)
关闭控制台输出~~
get
- 'Data': 全部的数据,如mirpeaks(env)的结果,返回的是env的数据,而不是peaks数据。
- 'Pos': 位置信息,和Data中的数据一一对应。
- 'Unit': 未知
- 'Sampling': 采样率。经过envelope等操作后采样率会发生变化。
- 'Length': 和原始信号的长度均相等。
- 'Nbits': 原始信号的bit数
- 'Name': 原始文件名
- 'Title': 数据类型
- 'Channels': 原始信号的声道数。
Memory management
使用miraudio('Floder')时会把所有的waveform都存到内存中,会有内存溢出的危险。而直接使用mirkey('Floder')这种操作,会把逐一进行操作,只存出结果。
大文件也会被切分进行计算,最后合并结果。也没有必要使用miraudio进行存储waveform。
所以,不需要连续操作时,使用直接的命令行更有效。
mireval可以用来FLOWCHART DESIGN的操作,运行封装好的结果。
而对于COMPLEX FLOWCHART DESIGN,则需要使用mirstruct进行创建一个结构。结构中的tmp中的变量中的变量不会生成最后的运算结果,其他变量会产生最后的运算结果,使用'Design'来代替文件名。最后使用mireval生成结果。