switch文、三角波、矩形波
さてさて、前々回にお話したFM音源について今回も話していきます。
今回は前回のFM音源基礎を使って、ちょっとしたツールを作っていきましょう。
ツールの仕様は以下のような感じ。
・キャリア周波数を指定する
・変調波を正弦波、三角波、矩形波の3つから選択
・何度でも変調する事が出来る
・直前の状態になら戻す事が出来る
・毎変調ごとに音出力と図出力による確認
・決定すれば、音を保存する
こんな感じで。
あくまでインタラクティブに。インパクトに。
今回はってか今回もCUI(Commandable User Interface)で。
さてさて、では以下のような基本的な部分をプログラムしてみましょう。
function fmtool
%
% 簡易FM音源ツール
%
% 変調の種類:正弦波、三角波、矩形波
% 保存フォーマット:44100Hz,16bit,wav file
%
% 第一版
%
disp('>>>メニュー<<< ');
disp('1.新規作成');
disp('2.保存');
disp('3.変調');
disp('4.元に戻す');
disp('5.再生');
disp('6.終了');
menu=input('メニューから番号を選んで下さい');
switch menu
case 1
% 新規作成処理
% キャリアの作成
case 2
% 保存処理
% WAVファイルの書き出し
case 3
% 変調処理
% 正弦波、三角波、矩形波の選択
% 変調実行
case 4
% 元に戻す処理
case 5
% 再生処理
% 現在の状態を再生
case 6
% 終了
end
|
function fmtool
%
% 簡易FM音源ツール
%
% 変調の種類:正弦波、三角波、矩形波
% 保存フォーマット:44100Hz,16bit,wav file
%
%
fs = 44100;
t=[0:1/fs:1];
z=0;
while z == 0
fprintf('\n\n');
disp('>>>メニュー<<< ');
disp('1.新規作成');
disp('2.保存');
disp('3.変調');
disp('4.元に戻す');
disp('5.再生');
disp('6.終了');
menu=input('\nメニューから番号を選んで下さい>>');
switch menu
case 1
f1=input('\nキャリアの周波数を入力して下さい>>');
x=2*pi*f1*t;
soundsc(sin(x),fs);
case 2
fprintf('\n\n');
filename=input('保存するファイル名を入力して下さい','s');
fid=fopen([filename '.wav']);
while fid >= 0
disp('その名前のファイルは既に存在します');
writeq=input('ファイルを上書きしますか?(Y or N)','s');
if writeq=='y'
fclose(fid);
break;
elseif writeq=='n'
fclose(fid);
filename = input('別のファイル名を入力して下さい','s');
fid=fopen([filename '.wav']);
end
end
wavwrite(sin(x),fs,16,[filename '.wav']);
disp([filename '.wavの作成に成功しました']);
case 3
x1=x;
fprintf('\n\n');
disp('>>>変調波の選択<<<');
disp('1.正弦波');
disp('2.三角波');
disp('3.矩形波');
moduno=input('\n変調波を選択して下さい>>');
f2=input('\nモジュレーションの周波数を入力して下さい>>');
switch moduno
case 1
x=x+sin(2*pi*f2*t);
case 2
x=x+sawtooth(2*pi*f2*t,0.5);
case 3
x=x+square(2*pi*f2*t);
otherwise
disp('番号が認識できません。変調出来ませんでした');
end
soundsc(sin(x),fs);
plot(t,sin(x));
axis([0 0.01 -1 1]);
case 4
x=x1;
case 5
soundsc(sin(x),fs);
case 6
z=1;
otherwise
disp('番号が認識できません');
end
end
|