主要内容

crepePreprocess

CREPE深度学习网络音频预处理

    描述

    = crepePreprocess (audioInfsaudioIn可以输入CREPE预训练的深度学习网络。

    = crepePreprocess (audioInfs“OverlapPercentage”人事处连续音频帧之间的重叠百分比。

    例如,frames = crepePreprocess(audioIn,fs,'OverlapPercentage',75)在用于生成已处理帧的连续帧之间应用75%的重叠。

    例子

    疯狂的= crepePreprocess(___返回时间值,疯狂的,与每个帧相关联。

    例子

    全部折叠

    下载并解压缩CREPE的音频工具箱™模型。

    类型在命令窗口。如果CREPE的Audio Toolbox模型未安装,则该函数将提供到网络权重位置的链接。要下载模型,请单击链接并将文件解压缩到MATLAB路径上的某个位置。

    或者,执行这些命令下载CREPE模型并将其解压缩到临时目录。

    下载文件夹= fullfile(tempdir,“crepeDownload”);loc = websave(下载文件夹,“https://ssd.mathworks.com/金宝appsupportfiles/audio/crepe.zip”);crepeLocation = tempdir;crepeLocation解压(loc)目录(fullfile (crepeLocation,“绉”))

    通过输入检查安装是否成功在命令窗口。如果已安装网络,则该函数返回DAGNetwork(深度学习工具箱)对象。

    ans = DAGNetwork with properties: Layers: [34×1 nnet.cnn.layer.Layer] Connections: [33×2 table] InputNames: {'input'} OutputNames: {'pitch'}

    加载一个预先训练好的CREPE卷积神经网络,并检查层和类。

    使用加载预训练的CREPE网络。输出是一个DAGNetwork(深度学习工具箱)对象。

    净绉
    net = DAGNetwork with properties: Layers: [34×1 nnet.cnn.layer.Layer] Connections: [33×2 table] InputNames: {'input'} OutputNames: {'pitch'}

    命令查看网络结构财产。网络有34层。一共有13层可学习权重,其中6层是卷积层,6层是批处理归一化层,1层是全连接层。

    网层
    ans = 34×1带有图层的图层数组:1' input' Image input 1024×1×1 images 2' conv1' Convolution 1024 512×1×1 convolutions with stride [4 1] and padding 'same' 3 'conv1_relu' ReLU ReLU 4 'conv1- bn ' Batch Normalization Batch Normalization with 1024 channels 5 'conv1-maxpool' Max Pooling 2×1 Max Pooling with stride [2 1] and padding [0 0 0 0 0] 6 'conv1- Dropout ' Dropout 25% Dropout 7 'conv2' Convolution 128 64×1×1024 convolutions with stride [1 1] and padding 'same' 8 'conv2_relu' ReLU ReLU 9 'conv2- bn ' Batch Normalization Batch正常化128个频道10“conv2-maxpool”马克斯池2×1马克斯池步(2 - 1)和填充[0 0 0 0]11的conv2-dropout辍学25%辍学12 conv3卷积128×64×128旋转步[1]和填充“相同”13”conv3_relu ReLU ReLU 14“conv3-BN”批量标准化批量标准化与128个频道15“conv3-maxpool”马克斯池2×1马克斯池步(2 - 1)和填充[0 0 0 0]16“conv3-dropout”辍学25%辍学17 conv4卷积12864×1×128 convolutions with stride [1 1] and padding 'same' 18 'conv4_relu' ReLU ReLU 19 'conv4-BN' Batch Normalization Batch Normalization with 128 channels 20 'conv4-maxpool' Max Pooling 2×1 Max Pooling with stride [2 1] and padding [0 0 0 0 0] 21 'conv4-dropout' Dropout 25% Dropout 22 'conv5' Convolution 256 64×1×128 convolutions with stride [1 1] and padding 'same' 23 'conv5_relu' ReLU ReLU 24 'conv5- bn ' Batch Normalization Batch Normalization with 256 channels 25 'conv5-maxpool' Max Pooling2×1马克斯池步(2 - 1)和填充[0 0 0 0]26“conv5-dropout”辍学25%辍学27 conv6卷积512 64×1×256旋转步[1]和填充“相同”28日的conv6_relu ReLU ReLU 29“conv6-BN”批量标准化批量正常化30 512个频道“conv6-maxpool”马克斯池2×1马克斯池步(2 - 1)和填充[0 0 0 0]31“conv6-dropout”辍学25%辍学32“分类”完全连接360完全连接层33 classifier_sigmoid乙状结肠sigmoid 34 'pitch'回归输出均方误差

    使用analyzeNetwork(深度学习工具箱)为了直观地探索网络。

    analyzeNetwork(净)

    networkAnalyzerCREPE.png

    CREPE网络需要对音频信号进行预处理,以生成缓冲的、重叠的和规范化的音频帧,这些音频帧可以用作网络的输入。这个例子演示了如何使用音频预处理crepePreprocess并利用基音估计进行音频后处理crepePostprocess.的pitchnn函数为您执行这些步骤。

    读入音频信号进行基音估计。想象并听音频。音频剪辑中有九段语音。

    [audioIn,fs] = audioread(“SingingAMajor-16-mono-18secs.ogg”);soundsc(audioIn,fs) T = 1/fs;t = 0: t:(长度(audioIn)* t) - t;情节(t, audioIn);网格包含(“时间(s)”) ylabel (“Ampltiude”)标题(《大调歌唱》

    使用crepePreprocess将音频划分为1024个样本帧,连续的MEL频谱图之间有85%的重叠。沿着第四维空间放置框架。

    [frames,loc] = crepePreprocess(audioIn,fs);

    创建CREPE网络ModelCapacity设置为.如果你打电话在下载模型之前,一个错误会被打印到带有下载链接的命令窗口。

    可丽饼(“ModelCapacity”“小”);

    预测网络激活。

    activationsTiny =预测(netTiny,帧);

    使用crepePostprocess产生以赫兹为单位的基频距估计。通过设置禁用置信阈值设置ConfidenceThreshold0

    f0Tiny = crepePostprocess(activationsTiny,“ConfidenceThreshold”, 0);

    随着时间的推移,将音高估计可视化。

    情节(loc f0Tiny)网格包含(“时间(s)”) ylabel (“音调估计(Hz)”)标题('CREPE网络频率估计-阈值禁用'

    禁用置信度阈值后,crepePostprocess为每一帧提供一个pitch估计。增加了ConfidenceThreshold0.8

    f0Tiny = crepePostprocess(activationsTiny,“ConfidenceThreshold”, 0.8);

    随着时间的推移,将音高估计可视化。

    情节(loc f0Tiny,“线宽”3)网格包含(“时间(s)”) ylabel (“音调估计(Hz)”)标题(CREPE网络频率估计-启用阈值

    创建一个新的CREPE网络ModelCapacity设置为完整的

    netFull = crepe(“ModelCapacity”“全部”);

    预测网络激活。

    activationsFull =预测(netFull,帧);f0Full = crepePostprocess(激活满,“ConfidenceThreshold”, 0.8);

    想象音调估计。有九种主要的音调估计组,每一组对应九种发声中的一种。

    情节(loc f0Full,“线宽”3)网格包含(“时间(s)”) ylabel (“音调估计(Hz)”)标题(CREPE网络频率估计-满

    找出与最后一次发声相对应的时间元素。

    roundedLocVec = round(loc,2);lastUtteranceBegin = find(roundedLocVec == 16);lastUtteranceEnd = find(roundedLocVec == 18);

    为简单起见,将话语组中最频繁出现的音调估计作为该时间跨度的基本频率估计。生成一个与最后一次发声的音调估计频率匹配的纯音。

    lastutteranceestimate = mode(f0Full(lastUtteranceBegin:lastUtteranceEnd))
    lastUtteranceEstimation =217.2709

    的值lastUtteranceEstimate217.3赫兹。对应注A3。将合成的音调叠加在最后一个发声的话语上,以便在听觉上比较两者。

    lastVocalUtterance = audioIn(fs*16:fs*18);newTime = 0:T:2;compareTone = cos(2*pi* lastutteranceestimate *newTime).';soundsc(lastVocalUtterance + compareTone,fs);

    调用光谱图更仔细地检查歌唱的频率内容。使用的帧大小为250样本和重叠的225样本或90%。使用4096变换的DFT点。的光谱图揭示了声乐录音实际上是一组由多个频率组成的复杂和声。

    光谱图(fs audioIn, 250225年,4096年,“桠溪”

    输入参数

    全部折叠

    输入信号,指定为列向量或矩阵。如果你指定一个矩阵,crepePreprocess将矩阵的列作为单独的音频通道。

    数据类型:|

    输入信号的采样率(以Hz为单位),指定为正标量。

    数据类型:|

    连续音频帧之间的重叠百分比,由逗号分隔的对组成“OverlapPercentage”和一个范围为[0,100)的标量。

    数据类型:|

    输出参数

    全部折叠

    处理过的音频帧,返回为1024——- - - - - -1——- - - - - -1——- - - - - -N数组,N是生成的帧数。

    请注意

    对于多通道输入,生成沿着第四维空间按通道堆叠。例如,如果audioIn是立体信号,产生了多少对于每个通道实际上N/ 2.第一个N/ 2对应通道1及其后N/ 2对应通道2。

    数据类型:|

    与每一帧相关联的时间值,返回为1——- - - - - -N向量,N是生成的帧数。时间值对应于用于计算帧的最新样本。

    数据类型:|

    参考文献

    [1]金,钟旭,贾斯汀·萨拉蒙,彼得·李和胡安·巴勃罗·贝罗。Crepe:一种用于音高估计的卷积表示在2018 IEEE声学、语音和信号处理国际会议(ICASSP), 161 - 65。卡尔加里,AB: IEEE, 2018。https://doi.org/10.1109/ICASSP.2018.8461329。

    扩展功能

    C/ c++代码生成
    使用MATLAB®Coder™生成C和c++代码。

    版本历史

    R2021a中引入