from matlab piano by sheperd velasco
piano simulation using known note frequencies.

Keyboard(varargin)
function varargout = Keyboard(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Keyboard_OpeningFcn, ...
                   'gui_OutputFcn',  @Keyboard_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end



function Keyboard_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;
handles.Fs = 1/41000;
handles.T =(0:handles.Fs:.3488372093);
handles.Note = 0;
handles.Nf = [130.81 138.59 146.83 155.56 164.81 174.61 ...
             185.00 196.00 207.65 220.00 233.08 246.94 ...
             261.63 277.18 293.66 311.13 329.63 349.23 ...
             369.99 392.00 415.30 440.00 466.16 493.88];
handles.Nfreq = handles.Nf;
handles.Tp = handles.T;

photo=imread('photoaxes.jpg');
axes(handles.axes1);
image(photo)
guidata(hObject, handles);

function varargout = Keyboard_OutputFcn(hObject, eventdata, handles) 

varargout{1} = handles.output;


function Play(handles,F)
Fs = handles.Fs;
T = handles.Tp;
Note = handles.Note;
Nf = handles.Nf;
V = get(handles.volumecontrol,'Value');

Note = V*sin(2*pi*F*T);

sound(Note, 1/Fs)

RecOn = get(handles.rec, 'Value');

if RecOn == 1
  Notes = handles.Note;
  if Notes == 0
    Notes = Note;
  else
    Notes = cat(2, Notes, Note);
  end
  handles.Note = Notes;
  guidata(handles.figure1, handles);  
end



function save_Callback(hObject, eventdata, handles)
Note = handles.Note;
Fs = handles.Fs;

if Note == 0
    error('Record first before saving');
    return;
else
  Filename = get(handles.Filename, 'String');
  wavwrite(Note, 1/Fs, 32, Filename);
end

function play_Callback(hObject, eventdata, handles)
set(handles.play,'value',1)
set(handles.reset,'value',0)
set(handles.rec,'value',0)
V = get(handles.volumecontrol,'value');
Note = V*handles.Note;
Fs = handles.Fs;
sound(Note,1/Fs)


function reset_Callback(hObject, eventdata, handles)
set(handles.play,'value',0)
set(handles.reset,'value',1)
set(handles.rec,'value',0)

handles.Note=0;
guidata(handles.figure1, handles);

function rec_Callback(hObject, eventdata, handles)
set(handles.play,'value',0)
set(handles.reset,'value',0)
set(handles.rec,'value',1)

function Exit_Callback(hObject, eventdata, handles)
close(gcf)


function center_Callback(hObject, eventdata, handles)
set(handles.center,'value',1)
set(handles.lower,'value',0)
set(handles.higher,'value',0)
CenterOn = get(handles.center,'value');
LowerOn = get(handles.lower,'value');
HigherOn = get(handles.higher,'value');

if CenterOn == 1
    Nf=handles.Nf;
elseif LowerOn == 1
    Nf=handles.Nf/4;
elseif HigherOn == 1
    Nf=handles.Nf*4;
end
handles.Nfreq=Nf;
guidata(handles.figure1, handles);

function lower_Callback(hObject, eventdata, handles)
set(handles.lower,'value',1)
set(handles.center,'value',0)
set(handles.higher,'value',0)

CenterOn = get(handles.center,'value');
LowerOn = get(handles.lower,'value');
HigherOn = get(handles.higher,'value');

if CenterOn == 1
    Nf=handles.Nf;
elseif LowerOn == 1
    Nf=handles.Nf/4;
elseif HigherOn == 1
    Nf=handles.Nf*4;
end
handles.Nfreq = Nf;
guidata(handles.figure1, handles);

function higher_Callback(hObject, eventdata, handles)
set(handles.higher,'value',1)
set(handles.center,'value',0)
set(handles.lower,'value',0)

CenterOn = get(handles.center,'value');
LowerOn = get(handles.lower,'value');
HigherOn = get(handles.higher,'value');

if CenterOn == 1
    Nf=handles.Nf;
elseif LowerOn == 1
    Nf=handles.Nf/4;
elseif HigherOn == 1
    Nf=handles.Nf*4;
end
handles.Nfreq = Nf;
guidata(handles.figure1, handles);


function C_Callback(hObject, eventdata, handles)
F=handles.Nfreq(1);
Play(handles,F)
function D_Callback(hObject, eventdata, handles)
F=handles.Nfreq(3);
Play(handles,F)
function E_Callback(hObject, eventdata, handles)
F=handles.Nfreq(5);
Play(handles,F)
function F_Callback(hObject, eventdata, handles)
F=handles.Nfreq(6);
Play(handles,F)
function G_Callback(hObject, eventdata, handles)
F=handles.Nfreq(8);
Play(handles,F)
function A_Callback(hObject, eventdata, handles)
F=handles.Nfreq(10);
Play(handles,F)
function B_Callback(hObject, eventdata, handles)
F=handles.Nfreq(12);
Play(handles,F)
function A2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(22);
Play(handles,F)
function B2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(24);
Play(handles,F)
function C2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(13);
Play(handles,F)
function D2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(15);
Play(handles,F)
function E2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(17);
Play(handles,F)
function F2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(18);
Play(handles,F)
function G2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(20);
Play(handles,F)
function Asharp_Callback(hObject, eventdata, handles)
F=handles.Nfreq(11);
Play(handles,F)
function Csharp_Callback(hObject, eventdata, handles)
F=handles.Nfreq(2);
Play(handles,F)
function Dsharp_Callback(hObject, eventdata, handles)
F=handles.Nfreq(4);
Play(handles,F)
function Fsharp_Callback(hObject, eventdata, handles)
F=handles.Nfreq(7);
Play(handles,F)
function Gsharp_Callback(hObject, eventdata, handles)
F=handles.Nfreq(9);
Play(handles,F)
function Asharp2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(23);
Play(handles,F)
function Csharp2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(14);
Play(handles,F)
function Dsharp2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(16);
Play(handles,F)
function Gsharp2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(21);
Play(handles,F)
function Fsharp2_Callback(hObject, eventdata, handles)
F=handles.Nfreq(19);
Play(handles,F)


function Filename_Callback(hObject, eventdata, handles)

function Filename_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function eighth_Callback(hObject, eventdata, handles)

Eight = get(handles.eighth,'value');
T=60/172;
if Eight == 1
    T = T/2;
end
handles.Tp = 0:handles.Fs:T;
guidata(handles.figure1, handles);



function fourth_Callback(hObject, eventdata, handles)

Four = get(handles.fourth,'value');
T=60/172;
if Four == 1
    T = T;
end
handles.Tp = 0:handles.Fs:T;
guidata(handles.figure1, handles);



function half_Callback(hObject, eventdata, handles)

Half = get(handles.half,'value');
T=60/172;
if Half == 1
    T = T*2;
end
handles.Tp = 0:handles.Fs:T;
guidata(handles.figure1, handles);



function whole_Callback(hObject, eventdata, handles)

Whole = get(handles.whole,'value');
T=60/172;
if Whole == 1
    T = T*4;
end
handles.Tp = 0:handles.Fs:T;
guidata(handles.figure1, handles);


function volumecontrol_Callback(hObject, eventdata, handles)

function volumecontrol_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end


Contact us at files@mathworks.com