% 信号処理分野のための GNU Octave/MATLAB/Scilab 入門
%  解答例 by Yoshiki NAGATANI 20180830 - https://ultrasonics.jp/nagatani/matlab/
% 
%  課題25：JIS T1201-1:2000（オージオメータ）準拠の断続音を作成する。

clear;

% 各パラメータ設定
fs = 8000;          % サンプリングレート [Hz]
freq = 1000.0;      % 正弦波の周波数 [Hz]
T_silent = 0.215;   % 音の前の無音区間 [s]
T_sound  = 0.235;   % 音の鳴っている区間 [s]
taper_time = 0.02;  % テーパーの時間長 [s]
taper_sample = round(taper_time*fs); % テーパーの信号長 [サンプル]

% 時間軸
t_sound  = [0:floor(T_sound*fs)-1]/fs;  % 時間軸
t_total  = [0:floor(T_sound*fs)+floor(T_silent*fs)-1]/fs;  % 時間軸

% 元の信号
sig_original_silent = zeros(1,floor(T_silent*fs));
sig_original_sound = sin(2.0*pi*freq*t_sound);
sig_original = [sig_original_silent sig_original_sound];

% テーパーの準備
taper = ones(1,floor(T_sound*fs));
taper(1:taper_sample) = [0:taper_sample-1]/taper_sample;
taper(size(taper,2)-taper_sample+1:end) = 1-([0:taper_sample-1]/taper_sample);

% テーパーの適用
sig_taper_sound = sig_original_sound .* taper;
sig_taper = [sig_original_silent sig_taper_sound];

% 波形の表示
plot(t_total, sig_original, 'b-');
hold on;
plot(t_total, sig_taper, 'r-');
grid on; ylim([-1.2 1.2]);
xlabel('時刻 [s]'); ylabel('振幅 [arb. unit]');
legend('オリジナル波形','テーパーを掛けた波形');

drawnow;

% 音の再生
soundsc([sig_original sig_original sig_original],fs); pause((T_silent+T_sound)*3+1.0);
soundsc([sig_taper sig_taper sig_taper],fs);
