Code covered by the BSD License  

Highlights from
MIRtoolbox

image thumbnail
from MIRtoolbox by Olivier Lartillot
An innovative environment, on top of Matlab, for music and audio analysis

demo7tonality.m
function demo7tonality
%To get familiar with some approaches of tonal analysis using MIRtoolbox, 
% and to assess their performances.  

% Part 1. We will first investigate the performance of the chromagram
% analysis, using very simple musical samples. 

% 1.3. In the audio file trumpet, the same pitch is played by a trumpet.
% Compute its chromagram. What are the chromas detected by the function? 
% Can you explain the result?
mirchromagram('trumpet')

% 1.4. A more detailed representation of the chromagram can be obtained by 
% decomposing each pitch class into its different possible absolute values. 
% For that purpose, just add the parameter: 
c = mirchromagram('trumpet','Wrap',0) 

% 1.5. Compute also the key strength related to the chromagram. 
mirkeystrength(c) 

pause, close all

% 1.6. In the audio file pianoF4, the same pitch is  played by a piano.
[ks c] = mirkeystrength('pianoF4') 

a = miraudio('pianoF4','excerpt',.7,2);
[ks c] = mirkeystrength(a)

pause, close all

% 1.7. Investigate the chromagram analysis of triad chords
[ks c] = mirkeystrength('Amin3')
p = mirpeaks(ks)
mirkey(p)

pause, close all

[k kc ks] = mirkey('Amaj3')
[k kc ks] = mirkey('Amin4')
[k kc ks] = mirkey('Amaj4')

pause, close all

[k kc ks] = mirkey('Amin5')
[k kc ks] = mirkey('Amaj5')
[k kc ks] = mirkey('Cmaj')

pause, close all

[k kc ks] = mirkey(miraudio('Amin3','Excerpt',.2,1))
[k kc ks] = mirkey(miraudio('Amin4','Excerpt',.2,1))
[k kc ks] = mirkey(miraudio('Amaj3','Excerpt',.2,1))
[k kc ks] = mirkey(miraudio('Amaj4','Excerpt',.2,1))

pause, close all

[k kc ks] = mirkey(miraudio('Amin5','Excerpt',.2,1))
[k kc ks] = mirkey(miraudio('Amaj5','Excerpt',.2,1))
[k kc ks] = mirkey(miraudio('Cmaj','Excerpt',.2,1))

pause, close all
 
%Part 2. Let's analyze several extracts from 
%real music. For each extract, try the 
%following: 

%2.1. Listen to the piece: 
mirplay('vivaldi') 
soundsc(sin(2*pi*440*(0:1/8192:1)))

%2.2. Compute the chromagram of the 
%whole extract. What tonal center could be 
%inferred from the curve? Does it 
%correspond to your expectation? 
c = mirchromagram('vivaldi')

%2.3. Compute the key strength related to 
%the chromagram. Is the result congruent 
%with the tonality inferred in 2.1. and 2.2.? 
ks = mirkeystrength(c)
[k kc ks] = mirkey(ks)

%2.4. A more detailed representation of the 
%key strengths can be obtained by 
%computing the self-organizing map: 
som = mirkeysom(c)

pause, close all

%2.5. Analyse in the same way other audio files
[k kc ks] = mirkey('czardas')
mirkeysom('czardas')

pause, close all

%Part 3. The temporal evolution of the 
%tonal dimension can be assessed by 
%decomposing first the audio into frames
[k kc ks] = mirkey('czardas','frame')
mirkeysom('czardas','frame')

Contact us at files@mathworks.com