I have downloaded audio files of different instruments
https://soundscrate.com/instruments.html
Lets see os there any correlation on Instrumnets
Flute vs Gitar
Flute vs Drum
Flute vs Violin
Flute vs Trumpt
Now see how these Instruments in 3D space
Apply PCA (Principal Component Analysis)
Dominant Eigen Values
Instruments in 2D and 3D space
Many instruments have similar characteristics, with many points closely grouped together. However, flute audio samples have distinct characteristics that set them apart from other instruments.
This is the reason why audio source separation is considered a challenging task among modern researchers, as the similarities in characteristics among instruments make it difficult to accurately separate the individual sources.
Activity 2.1
Load Audio Data
fs = 44100;
[y1,~] = audioread("andean-flute-theme-low_fybeqsnu1.mp3");
[y2,~] = audioread("zo_-pripyati-gitara.mp3");
[y3,~] = audioread("cirk-barabannaya-drob-i-marsh_-silachi.mp3");
[y4,~] = audioread("jamaican-piano_mytjcqbd.mp3");
[y5,~] = audioread("violin-trill_mk15cun_.mp3");
[y6,~] = audioread("z_uk-truba.mp3");
Create Samples
n_samples = 1
range = 2*fs
start = 2*fs;
flute = create_sample_data(y1(:,1),n_samples,range,start);
gitar = create_sample_data(y2(:,1),n_samples,range,start);
drum = create_sample_data(y3(:,1),n_samples,range,start);
piano = create_sample_data(y4(:,1),n_samples,range,start);
violin = create_sample_data(y5(:,1),n_samples,range,start);
trumpt = create_sample_data(y6(:,1),n_samples,range,start);
Correlation of Flute with Other Instruments
figure()
scatter(flute(:,1),gitar(:,1),5,'black',"filled")
xlabel('Flute Data')
ylabel('Gitar Data')
title('Flute vs Gitar')
grid on
figure()
scatter(flute(:,1),drum(:,1),5,'blue',"filled")
xlabel('Flute Data')
ylabel('Drum Data')
title('Flute vs Drum')
grid on
figure()
scatter(flute(:,1),piano(:,1),5,'cyan',"filled")
xlabel('Flute Data')
ylabel('Piano Data')
title('Flute vs Piano')
grid on
figure()
scatter(flute(:,1),violin(:,1),5,'magenta',"filled")
xlabel('Flute Data')
ylabel('Violin Data')
title('Flute vs Violin')
grid on
figure()
scatter(flute(:,1),trumpt(:,1),5,'red',"filled")
xlabel('Flute Data')
ylabel('Trumpt Data')
title('Flute vs Trumpt')
grid on
function sample = create_sample_data(data_array,n_samples,range,start)
sample = zeros(range,n_samples);
for i=1:n_samples
range_sample = (i-1)*range+1 : i*range;
range_data = ((i-1)*range+1)+start : (i*range)+start;
sample(range_sample) = data_array(range_data);
end
end
Activity 2.2
Analysis of Instruments in 2D and 3D space
fs = 44100;
[y1,~] = audioread("andean-flute-theme-low_fybeqsnu1.mp3");
[y2,~] = audioread("zo_-pripyati-gitara.mp3");
[y3,~] = audioread("cirk-barabannaya-drob-i-marsh_-silachi.mp3");
[y4,~] = audioread("jamaican-piano_mytjcqbd.mp3");
[y5,~] = audioread("violin-trill_mk15cun_.mp3");
[y6,~] = audioread("z_uk-truba.mp3");
n_samples = 6
range = 1000
start = 2*fs;
flute = create_sample_data(y1(:,1),n_samples,range,start);
gitar = create_sample_data(y2(:,1),n_samples,range,start);
drum = create_sample_data(y3(:,1),n_samples,range,start);
piano = create_sample_data(y4(:,1),n_samples,range,start);
violin = create_sample_data(y5(:,1),n_samples,range,start);
trumpt = create_sample_data(y6(:,1),n_samples,range,start);
PCA
x = [flute,gitar,drum,piano,violin,trumpt];
m = mean(x')';
xmr = x-m;
s = cov(xmr');
[V,D] = eigs(s,10);
ymr = V'*xmr;
y = ymr;
bar(diag(D))
ymr = V'*xmr;
y = ymr;
flute_range = 1:6;
gitar_range = 7:12;
drum_range = 13:18;
piano_range = 19:24;
violin_range = 25:30;
trumpt_range = 31:36;
Visualize in 2D
scatter_size = 50
figure()
scatter(y(1,flute_range),y(2,flute_range),scatter_size,'k',"filled",'DisplayName','Flute')
hold on
scatter(y(1,gitar_range),y(2,gitar_range),scatter_size,'g',"filled",'DisplayName','Gitar')
hold on
scatter(y(1,drum_range),y(2,drum_range),scatter_size,'magenta',"filled",'DisplayName','Drum')
hold on
scatter(y(1,piano_range),y(2,piano_range),scatter_size,'cyan',"filled",'DisplayName','Piano')
hold on
scatter(y(1,violin_range),y(2,violin_range),scatter_size,'r',"filled",'DisplayName','Violin')
hold on
scatter(y(1,trumpt_range),y(2,trumpt_range),scatter_size,'b',"filled",'DisplayName','Trumpt')
grid on
xlabel('Eigen Vector 1')
ylabel('Eigen Vector 2')
legend()
Visualize in 3D
scatter_size = 50
figure()
scatter3(y(1,flute_range),y(2,flute_range),y(3,flute_range),scatter_size,'k',"filled",'DisplayName','Flute')
hold on
scatter3(y(1,gitar_range),y(2,gitar_range),y(3,gitar_range),scatter_size,'g',"filled",'DisplayName','Gitar')
hold on
scatter3(y(1,drum_range),y(2,drum_range),y(3,drum_range),scatter_size,'magenta',"filled",'DisplayName','Drum')
hold on
scatter3(y(1,piano_range),y(2,piano_range),y(3,piano_range),scatter_size,'cyan',"filled",'DisplayName','Piano')
hold on
scatter3(y(1,violin_range),y(2,violin_range),y(3,violin_range),scatter_size,'r',"filled",'DisplayName','Violin')
hold on
scatter3(y(1,trumpt_range),y(2,trumpt_range),y(3,trumpt_range),scatter_size,'b',"filled",'DisplayName','Trumpt')
grid on
xlabel('Eigen Vector 1')
ylabel('Eigen Vector 2')
zlabel('Eigen Vector 3')
legend()
function sample = create_sample_data(data_array,n_samples,range,start)
sample = zeros(range,n_samples);
for i=1:n_samples
range_sample = (i-1)*range+1 : i*range;
range_data = ((i-1)*range+1)+start : (i*range)+start;
sample(range_sample) = data_array(range_data);
end
end