‹›계산 음성동적 시간 왜곡 (DTW)을 사용한 녹음의 비교
"이상한 나라의 앨리스"의 첫 문장의 4가지 녹음을 가져오기하여 트림과 전처리를 합니다.
전체 Wolfram 언어 입력 표시하기
urls = {"http://ia800503.us.archive.org/3/items/alices_adventures/\
aliceinwonderland_01_carroll.mp3",
"http://ia800306.us.archive.org/25/items/alice_wonderland_0711_\
librivox/alice_01_carroll.mp3",
"http://ia800201.us.archive.org/32/items/alices_adventures_1003/\
alices_adventures_01_carroll.mp3",
"https://ia800904.us.archive.org/15/items/alicesadventure_abridged_\
pc_librivox/alicesadventuresinwonderlandabridged_01_carroll.mp3"};
times = {{27, 33.5}, {16.5, 25}, {22.3, 28.5}, {31, 38}};
alice = ConformAudio[
MapThread[
AudioNormalize[
AudioChannelMix[AudioTrim[AudioResample[Import[#1], 11025], #2],
1]] &, {urls, times}]]
신호의 플롯을 나타냅니다.
AudioPlot[alice, ImageSize -> Medium]
샘플의 MFCC 기능을 계산하고 플롯합니다.
mfcc = AudioLocalMeasurements[#, "MFCC",
PartitionGranularity -> {.05, .01}]["Values"] & /@ alice;
Column[MatrixPlot[#, PlotTheme -> "Minimal", ImageSize -> Medium] & /@
Transpose /@ mfcc]
WarpingDistance를 사용하여 녹음 사이의 동적 시간 왜곡에 의한 거리를 계산합니다.
DistanceMatrix[mfcc,
DistanceFunction -> WarpingDistance] // MatrixPlot
WarpingCorrespondence를 사용하여 두개의 녹음 사이의 동적 시간 왜곡 대응을 계산합니다.
{n, m} = WarpingCorrespondence[mfcc[[1]], mfcc[[2]]];
전체 Wolfram 언어 입력 표시하기
dur = QuantityMagnitude[Duration[alice[[1]]], "s"];
s = {n, m}\[Transpose]/Max[{n, m}] dur;
Labeled[
ListLinePlot[
s,
PlotRange -> {{0, dur}, {0, dur}}, AspectRatio -> 1, Axes -> False,
PlotStyle -> Thickness[.01], ImageSize -> Medium, Frame -> True,
FrameTicks -> None,
Prolog -> {RGBColor[
0.6666666666666666, 0.6666666666666666,
0.6666666666666666], {Line[{{#[[1]], 0}, #}],
Line[{{0, #[[2]]}, #}]} & /@ (s[[;; ;; 100]])}
],
AudioPlot[#, PlotStyle -> RGBColor[0.560181, 0.691569, 0.194885],
Frame -> False, Axes -> False, ImageSize -> Medium,
AspectRatio -> 1/15] & /@ (alice[[;; 2]]), {Bottom, Left},
RotateLabel -> True, Spacings -> {0, 0}]