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 |