daniele@160: function plot(obj) daniele@160: daniele@166: figure, daniele@166: playbackPanelH = uipanel(gcf,'Units','Normalized','Position',[.3 0 .4 .1]); daniele@166: daniele@166: buttWidth = 1/6; daniele@166: centers = linspace(0,1,7)-buttWidth/2; daniele@166: rewButtonH = uicontrol(playbackPanelH,'Style','pushbutton','String','<<','Units',... daniele@166: 'Normalized','Position',[centers(2) 0.2 buttWidth 0.6]); daniele@166: ffButtonH = uicontrol(playbackPanelH,'Style','togglebutton','String','>>','Units',... daniele@166: 'Normalized','Position',[centers(3) 0.2 buttWidth 0.6]); daniele@166: stopButtonH = uicontrol(playbackPanelH,'Style','pushbutton','String','stop','Units',... daniele@166: 'Normalized','Position',[centers(4) 0.2 buttWidth 0.6]); daniele@166: playButtonH = uicontrol(playbackPanelH,'Style','togglebutton','String','play','Units',... daniele@166: 'Normalized','Position',[centers(5) 0.2 buttWidth 0.6]); daniele@166: pauseButtonH = uicontrol(playbackPanelH,'Style','togglebutton','String','||','Units',... daniele@166: 'Normalized','Position',[centers(6) 0.2 buttWidth 0.6]); daniele@166: daniele@166: waveformPanelH = uipanel(gcf,'Units','Normalized','Position',[.02 .12 .96 .86]); daniele@166: waveformAxesH = axes('Parent',waveformPanelH); daniele@166: daniele@160: %% Plot the time domain signal daniele@160: s = obj.s; daniele@160: fs = obj.fs; daniele@166: plot((1:length(s))/fs,s); daniele@160: title('Audio signal') daniele@160: xlabel('time (s)'); daniele@160: axis tight daniele@160: daniele@160: player = audioplayer(s,fs); daniele@166: set(player,'TimerPeriod',0.1); daniele@160: set(player,'StartFcn',@plotTransportBar); daniele@160: set(player,'TimerFcn',@updateTransportBar); daniele@160: set(player,'StopFcn',@deleteTransportBar); daniele@160: daniele@166: %% Add playback controls daniele@160: set(playButtonH,'Callback',@play_callback); daniele@160: set(stopButtonH,'Callback',@stop_callback); daniele@166: set(pauseButtonH,'Callback',@pause_callback); daniele@166: set(rewButtonH,'Callback',@rew_callback); daniele@166: set(ffButtonH,'Callback',@ff_callback); daniele@160: daniele@166: function play_callback(~,~) daniele@166: set(player,'SampleRate',fs); daniele@166: play(player,player.CurrentSample); daniele@166: set(pauseButtonH,'Value',0); daniele@166: set(ffButtonH,'Value',0); daniele@166: end daniele@160: daniele@166: function pause_callback(~,~) daniele@166: pause(player); daniele@166: set(playButtonH,'Value',0); daniele@166: set(ffButtonH,'Value',0); daniele@166: end daniele@166: daniele@166: function stop_callback(~,~) daniele@166: stop(player); daniele@166: set(playButtonH,'Value',0); daniele@166: set(pauseButtonH,'Value',0); daniele@166: set(ffButtonH,'Value',0); daniele@166: end daniele@166: daniele@166: function ff_callback(~,~) daniele@166: set(player,'SampleRate',1.5*fs); daniele@166: set(pauseButtonH,'Value',0); daniele@166: set(playButtonH,'Value',0); daniele@166: end daniele@166: daniele@166: function rew_callback(~,~) daniele@166: stop(player); daniele@166: play(player); daniele@166: set(pauseButtonH,'Value',0); daniele@166: set(playButtonH,'Value',1); daniele@166: end daniele@160: daniele@160: %% Transport Bar functions daniele@166: function plotTransportBar(~,~) daniele@166: global tbH daniele@166: xLim = get(gca,'Xlim'); daniele@166: yLim = get(gca,'YLim'); daniele@166: tbH = line([xLim(1) xLim(1)],yLim,'Color','k'); daniele@166: end daniele@160: daniele@166: function updateTransportBar(hObject,~) daniele@166: global tbH daniele@166: currentSample = hObject.CurrentSample; daniele@166: pos = currentSample/fs; daniele@166: set(tbH,'XData',[pos pos]); daniele@166: end daniele@166: daniele@166: function deleteTransportBar(~,~) daniele@166: global tbH daniele@166: delete(tbH); daniele@166: end daniele@160: end