view aim-mat/tools/fre2note.m @ 3:20ada0af3d7d

various bugfixes and changed copywrite message
author Stefan Bleeck <bleeck@gmail.com>
date Tue, 16 Aug 2011 14:36:30 +0100
parents 74dedb26614d
children
line wrap: on
line source
% support file for 'aim-mat'
%
% (c) 2011, University of Southampton
% Maintained by Stefan Bleeck (bleeck@gmail.com)
% download of current version is on the soundsoftware site: 
% http://code.soundsoftware.ac.uk/projects/aimmat
% documentation and everything is on http://www.acousticscale.org


function [str,oct,nr_note]=fre2note(fre)

% translates the fre to the nearest real note in a-g

if fre==0
    str='no';
    oct=0;
    nr_note=-1;
    return
end

note_names=['A ';'A#';'B ';'C ';'C#';'D ';'D#';'E ';'F ';'F#';'G ';'G#'];
lowest_note=27.5;   % Hz =A1 440 Hz= a4

for i=1:length(fre)
    if fre(i)>0
        cent(i)=fre2cent(lowest_note,fre(i));
        % how many octaves?
        nr_octs(i)=round(cent(i)/1200)-1;
        oct(i)=nr_octs(i)+1;
        
        % how many tones?
        cento(i)=mod(cent(i),1200)/100;
        nr_note(i)=round(cento(i)+1);
        if nr_note(i)>12
            nr_note(i)=1;
        end
        %     nr_note(find(nr_note>12))=1;
    else
        nr_note(i)=0;
    end
end
% compansate for that the octave changes at C
for i=1:length(fre)
    if nr_note(i) > 3 && nr_note(i) < 7
        nr_octs(i)=nr_octs(i)+1;
    end    
end

for i=1:length(fre)
    if nr_note(i)==0
        str{i}=['00'];
    elseif strcmp(note_names(nr_note(i),2),' ')
        if nr_octs(i)<0
            str{i}=[note_names(nr_note(i)) '0'];
        else
            str{i}=[note_names(nr_note(i)) num2str(nr_octs(i))+1];
        end
    else
        if nr_octs(i)<0
            str{i}=[note_names(nr_note(i),1:2) '0'];
        else
            str{i}=[note_names(nr_note(i),1:2) num2str(nr_octs(i))+1];
        end
    end
end