www.gusucode.com > 声音的处理有:LPC,FFT,共振峰,频谱源码程序 > siganlandsystemusingMatlab/SSUM/library/play_audiodata.m

    function play_audiodata(audiodata, varargin)

	if nargin > 1,
		button_handle = varargin{1};
	end
    
	%if (size(audiodata.data,2) > 1)
	%	tempbox = msgbox({'Sound is larger than 1 channel.', ...
	%			'Converting to mono.'}, 'Soundplay');
	%	audiodata.data = to_mono(audiodata.data);
    %    %close(tempbox);
    %end

	if (exist('button_handle') & length(audiodata.data)/audiodata.Fs > 2)
		if (strncmp(get(button_handle,'String'),'Play',4))
			% Take care of audio cutting off in UNIX flavors
			if (isunix)
				audiodata.data(length(audiodata.data):(length(audiodata.data) + ...
					floor(audiodata.Fs/2))) = 0;
			end
            if str2num(version('-release')) > 12.1
				handles.p = handle(com.mathworks.toolbox.audio.JavaAudioPlayer(...
					audiodata.data, audiodata.Fs, 16));
				ud.hButton = button_handle;
				set(handles.p, 'UserData', ud);
				set(handles.p, 'StopFcn', @play_Ended);
				handles.p.play;
				set(button_handle,'String','Stop');
            else
                sound(audiodata.data, audiodata.Fs, 16);
            end
		else
			% This causes MATLAB to halt on UNIX
			if (~isunix)
				handles.p.stop;
            end
		end
	else
        if str2num(version('-release')) > 12.1
            audiodata.data(length(audiodata.data):(length(audiodata.data) + ...
						floor(audiodata.Fs/2))) = 0;
			handles.p = handle(com.mathworks.toolbox.audio.JavaAudioPlayer(...
				audiodata.data, audiodata.Fs, 16));
			handles.p.play;
        else
            sound(audiodata.data, audiodata.Fs, 16);
        end
	end

function play_Ended(hObject, event)
    ud = get(hObject, 'UserData');
    set(ud(1).hButton,'String','Play');