×
Analiza dźwięku w celu automatycznego generowania video
Przykłady analizy wielu nagrań na użytek wykonania online Polymorphii (rezultat video w przykładzie nr 19).
Kod poszukujący w nagraniach momentu wykonania finalnego akordu C-dur w Polymorphii Krzysztofa Pendereckiego (wykorzystuje nagłą ciszę przed akordem):
fd = '../dst-1/';
d = dir ([fd, '/*.mp3']);
blockLengthSeconds = .5;
wyniki = struct();
for f = 1 : length (d)
fn = [d(f).folder, '/', d(f).name];
disp ([num2str(f), ': ', fn]);
end
for f = 1 : length (d)
progress (f, length(d), [d(f).name, ' ']);
fn = [d(f).folder, '/', d(f).name];
[x, fs] = audioread (fn);
offset_ = 10;
startTest = (offset_ + 9 * 60) * fs + 1;
x = mean (x, 2);
x2 = x (startTest:end, :);
x2 = x2 / max (x2);
t = length (x2) / fs;
ma = miraudio(x2, fs); % funkcje pakietu MIR Toolbox
mf = mirframe(ma); % podział sygnału na ramki
mfd = mirgetdata(mf);
vol = rms (mfd, 1); % obliczenie głośności ramki (RMS)
vol = vol / max (vol); % normalizacja
meanVol = mean (vol);
rms_sr = length (vol) / t;
secondToFirstHalfRatios = [];
blockLengthSamples = round(blockLengthSeconds * rms_sr);
for k = 1 : length (vol) - 2 * blockLengthSamples
firstHalf = vol(k : k + blockLengthSamples);
secondHalf = vol(k + blockLengthSamples : k + 2 * blockLengthSamples);
normalizationFactor = mean (secondHalf) / meanVol;
secondToFirstHalfRatios (end + 1) = (mean (secondHalf) / mean (firstHalf)) * normalizationFactor;
end
secondToFirstHalfRatios = secondToFirstHalfRatios / max (secondToFirstHalfRatios);
[maxRatioValue, maxRatioIndex] = max (secondToFirstHalfRatios); % znalezienie największego kontrastu dynamicznego
wyniki(f).kto = d(f).name;
wyniki(f).co = (maxRatioIndex + blockLengthSamples) / rms_sr + 1/rms_sr;
wyniki(f).co = wyniki(f).co + offset_ ;
if strcmp (wyniki(f).kto, 'dyrygent-1-audio.mp3')
wyniki(f).co = 34;
end
end
wynikiJSON = jsonencode (wyniki);
fid = fopen('cdurWyniki.json', 'w');
fwrite(fid, wynikiJSON , 'char');
fclose(fid);
Przykładowe wyniki analizy:
[{"kto":"altowka-1-audio.mp3","co":26.61901242571583},{"kto":"altowka-2-audio.mp3","co":26.474209774848983},{"kto":"altowka-3-audio.mp3","co":32.705640444129457},{"kto":"altowka-4-audio.mp3","co":37.577498696461831},{"kto":"altowka-5-audio.mp3","co":26.917402955393445},{"kto":"altowka-6-audio.mp3","co":31.951773641102008},{"kto":"altowka-7-audio.mp3","co":17.333873383291245},{"kto":"altowka-8-audio.mp3","co":35.224311688311687},{"kto":"dyrygent-1-audio.mp3","co":34},{"kto":"kontrabas-1-audio.mp3","co":34.774125854918012},{"kto":"kontrabas-2-audio.mp3","co":31.775332464146022},{"kto":"kontrabas-3-audio.mp3","co":31.844529513668821},{"kto":"kontrabas-4-audio.mp3","co":25.195281241778481},{"kto":"kontrabas-5-audio.mp3","co":31.593903274777702},{"kto":"kontrabas-6-audio.mp3","co":32.818909463046467},{"kto":"kontrabas-7-audio.mp3","co":29.169112419400054},{"kto":"kontrabas-8-audio.mp3","co":36.106365099534095},{"kto":"skrzypce-1-audio.mp3","co":23.038779062659312},{"kto":"skrzypce-10-audio.mp3","co":29.655322101495781},{"kto":"skrzypce-11-audio.mp3","co":27.703624316669959},{"kto":"skrzypce-12-audio.mp3","co":35.098849978383051},{"kto":"skrzypce-13-audio.mp3","co":41.267377950210147},{"kto":"skrzypce-14-audio.mp3","co":27.676384248808628},{"kto":"skrzypce-15-audio.mp3","co":27.796494357542851},{"kto":"skrzypce-16-audio.mp3","co":27.82224510875621},{"kto":"skrzypce-17-audio.mp3","co":29.719661340061677},{"kto":"skrzypce-18-audio.mp3","co":28.166797864225781},{"kto":"skrzypce-19-audio.mp3","co":36.404179471419795},{"kto":"skrzypce-2-audio.mp3","co":40.997981631550516},{"kto":"skrzypce-20-audio.mp3","co":27.1761107266436},{"kto":"skrzypce-21-audio.mp3","co":32.280853705555224},{"kto":"skrzypce-22-audio.mp3","co":28.475388716514445},{"kto":"skrzypce-23-audio.mp3","co":26.639085841694541},{"kto":"skrzypce-24-audio.mp3","co":27.366918142160639},{"kto":"skrzypce-3-audio.mp3","co":45.802705087798287},{"kto":"skrzypce-4-audio.mp3","co":26.047169924812032},{"kto":"skrzypce-5-audio.mp3","co":27.900271886895048},{"kto":"skrzypce-6-audio.mp3","co":27.79899259259259},{"kto":"skrzypce-7-audio.mp3","co":26.125157656804433},{"kto":"skrzypce-8-audio.mp3","co":31.377783466666667},{"kto":"skrzypce-9-audio.mp3","co":27.990139293812764},{"kto":"wiolonczela-1-audio.mp3","co":15.584760942760944},{"kto":"wiolonczela-2-audio.mp3","co":32.071111111111108},{"kto":"wiolonczela-3-audio.mp3","co":28.975326493028149},{"kto":"wiolonczela-4-audio.mp3","co":25.844731255265376},{"kto":"wiolonczela-5-audio.mp3","co":26.875029775844766},{"kto":"wiolonczela-6-audio.mp3","co":28.390839694656488},{"kto":"wiolonczela-7-audio.mp3","co":25.921732285314818},{"kto":"wiolonczela-8-audio.mp3","co":21.071557526546492}]
Przykłady wyników analizy ruchu wykonawców – bardziej aktywni wykonawcy otrzymywali większe „kafelki” w video:
×
Iga Murawska – kontrabas

Danuta Augustyn – skrzypce

Lokalizacja twarzy (w celu centralizacji obrazu wykonawcy)
Iga Murawska – kontrabas

Danuta Augustyn – skrzypce

Piotr Rachwał – skrzypce

Autorstwo programu komputerowego: Marcin Strzelecki