daniele@182
|
1 %% AUDIO OBJECT CLASS
|
daniele@182
|
2 % Class designed to analyse and process audio signals
|
daniele@182
|
3 %%
|
daniele@160
|
4 classdef audio
|
daniele@182
|
5 properties (SetAccess = protected)
|
daniele@182
|
6 s %vector containing the audio signal
|
daniele@182
|
7 fs %sampling frequency
|
daniele@182
|
8 nBits %number of bits per sample
|
daniele@182
|
9 name %string containing the name of the audio file
|
daniele@182
|
10 format %string containing the format of the audio file
|
daniele@182
|
11 bufferOperator %struct containing the parameters of the buffer operator
|
daniele@182
|
12 S %matrix containing frames of audio
|
daniele@166
|
13 end
|
daniele@166
|
14
|
daniele@166
|
15 methods
|
daniele@166
|
16 %% Constructor
|
daniele@166
|
17 function obj = audio(varargin)
|
daniele@182
|
18 %%% obj = audio(varargin)
|
daniele@182
|
19 % Audio object constructor.
|
daniele@182
|
20 % INPUT: either a path to an audio file, or the following
|
daniele@182
|
21 % arguments.
|
daniele@182
|
22 % - s: vector containing the audio samples
|
daniele@182
|
23 % - fs: sampling frequency
|
daniele@182
|
24 % - nBits: number of bits per sample
|
daniele@182
|
25 % - name: name of the audio object
|
daniele@182
|
26 % - format: format of the audio object
|
daniele@182
|
27 %
|
daniele@166
|
28 % if no arguments are specified, prompt for the choice of an
|
daniele@166
|
29 % audio file
|
daniele@166
|
30 if ~nargin
|
daniele@166
|
31 [fileName,pathname] = uigetfile({'*.wav; *.aiff;'},'Select an audio file');
|
daniele@166
|
32 varargin{1} = strcat(pathname,filesep,fileName);
|
daniele@166
|
33 end
|
daniele@182
|
34 % if a file is specified, read it from disk
|
daniele@166
|
35 if ischar(varargin{1})
|
daniele@166
|
36 [~, obj.name obj.format] = fileparts(varargin{1});
|
daniele@166
|
37 switch obj.format
|
daniele@166
|
38 case '.wav'
|
daniele@166
|
39 [obj.s obj.fs obj.nBits] = wavread(varargin{1});
|
daniele@166
|
40 otherwise
|
daniele@166
|
41 error('Unsupported audio format')
|
daniele@166
|
42 end
|
daniele@182
|
43 % if properties are specified, set them to input values
|
daniele@166
|
44 else
|
daniele@166
|
45 obj.s = varargin{1};
|
daniele@166
|
46 if nargin>1, obj.fs = varargin{2}; else obj.fs = []; end
|
daniele@166
|
47 if nargin>2, obj.nBits = varargin{3}; else obj.nBits = []; end
|
daniele@166
|
48 if nargin>3, obj.name = varargin{4}; else obj.name = []; end
|
daniele@166
|
49 if nargin>4, obj.format = varargin{5}; else obj.format = []; end
|
daniele@166
|
50 end
|
daniele@166
|
51 obj.S = [];
|
daniele@166
|
52 obj.bufferOperator = [];
|
daniele@166
|
53 end
|
daniele@166
|
54
|
daniele@166
|
55 %% Playback functions
|
daniele@166
|
56 function player = play(obj, player)
|
daniele@166
|
57 if ~exist('player','var') || isempty(player)
|
daniele@166
|
58 player = audioplayer(obj.s,obj.fs);
|
daniele@166
|
59 end
|
daniele@166
|
60 play(player);
|
daniele@166
|
61 end
|
daniele@166
|
62
|
daniele@166
|
63 function player = stop(obj, player)
|
daniele@166
|
64 if ~exist('player','var') || isempty(player)
|
daniele@166
|
65 player = audioplayer(obj.s,obj.fs);
|
daniele@166
|
66 end
|
daniele@166
|
67 stop(player)
|
daniele@166
|
68 end
|
daniele@166
|
69
|
daniele@166
|
70 function player = pause(obj, player)
|
daniele@166
|
71 if ~exist('player','var') || isempty(player)
|
daniele@166
|
72 player = audioplayer(obj.s,obj.fs);
|
daniele@166
|
73 end
|
daniele@166
|
74 pause(player)
|
daniele@166
|
75 end
|
daniele@166
|
76 end
|
daniele@160
|
77 end
|