7/7 まとめ(情報処理装置,コンピュータと社会)


前回までの補足


質問と解答

Q.
複数の音を例えば1秒ずつ順々にならしたいとき(ドミソとか。。)、javaでプログラミングするときどうしたらいいでしょうか。 先生の出された例はすべて5秒間流れ続けるのですが、それはプログラミングの どこで設定しているのか教えてください。
A.
まず,後の質問から答えますが,/home08/ktanaka/bin/txt2wav.plは 入力データを5秒のWAVデータになるまで繰り返し出力するので,1周期分の データを出力するだけで5秒の音ができます.時間によって,変わる音を出す 場合は,5秒分以上(44100*5個以上)のデータを出力する必要があります. 以下に例を示します.
class doremi{
    // 周波数hzの音をsec秒分出力する.
    // 開始時の位相をパラメータradで渡して,終了時の位相を返す
    static double sinWave(double rad,double hz,double sec){
	int i;
	for(i=0;i< sec*44100;i++){
	    System.out.println(10000*Math.sin(rad));
	    rad=rad+2*Math.PI*hz/44100;
	}
	return rad;
    }
    // ドレミの歌
    public static void main(String[] args){
        double rad=0.0;
	// http://www.digion.com/dspark/waza/vol4/5.htm
        // 各音の周波数
	double DO=261.6; // 小文字にすると予約語doと重なる
	double RE=293.6;
	double MI=329.6;
	double FA=349.2;
	rad=sinWave(rad,DO,0.75); // ドの音を0.75秒
	rad=sinWave(rad,RE,0.25); // レの音を0.25秒
	rad=sinWave(rad,MI,0.75);
	rad=sinWave(rad,DO,0.25);
	rad=sinWave(rad,MI,0.5); 
	rad=sinWave(rad,DO,0.5); 
	rad=sinWave(rad,MI,1.0); 
	rad=sinWave(rad,RE,0.75);
	rad=sinWave(rad,MI,0.25);
	rad=sinWave(rad,FA,0.5); 
	rad=sinWave(rad,MI,0.25);
	rad=sinWave(rad,RE,0.25);
	rad=sinWave(rad,FA,1.0); 
    }
}
更に和音を出したい場合には,以下のようにsinWave2メソッドを定義して使います.
class t1{
    // 周波数hzの音をsec秒分出力する.
    // 開始時の位相をパラメータradで渡して,終了時の位相を返す
    static double sinWave(double rad,double hz,double sec){
	int i;
	for(i=0;i< sec*44100;i++){
	    System.out.println(10000*Math.sin(rad));
	    rad=rad+2*Math.PI*hz/44100;
	}
	return rad;
    }
    // 周波数hz1, 周波数hz2の和音をsec秒分出力する.
    // 開始時の位相をパラメータradで渡して,終了時の位相を返す
    static double sinWave2(double rad1,double hz1,double hz2, double sec){
	int i;
	double rad2=0.0;
	for(i=0;i< sec*44100;i++){
	    System.out.println(10000*(Math.sin(rad1)+Math.sin(rad2)));
	    rad1=rad1+2*Math.PI*hz1/44100;
	    rad2=rad2+2*Math.PI*hz2/44100;
	}
	return rad1;
    }
    public static void main(String[] args){
        double rad=0.0;
	// http://www.digion.com/dspark/waza/vol4/5.htm
        // 各音の周波数
	double DO=261.6; // 小文字にすると予約語doと重なる
	double RE=293.6;
	double MI=329.6;
	double FA=349.2;
	rad=sinWave2(rad,DO,MI,1);
	rad=sinWave2(rad,DO,FA,1);
	rad=sinWave(rad,RE,1);
	rad=sinWave2(rad,DO,MI,1);
	rad=sinWave2(rad,DO,FA,1);
    }
}

Q.
HTMLファイルにmakePPM.javaとmakeWAV.javaへのリンクを入れたのですが、リンクをクリックすると、そのファイルではなく、jousho04のディレクトリに移ってしまいます。どうしてでしょうか。
A.
Safariの中では,"*.java"という拡張子に対しては Finderを開くというアクションが関連づけられているよう ですね.このまま提出して構いません.

共通試験について

「情報処理」共通試験の出題範囲は,はいぱーワークブック(HWB:
http://hwb.ecc.u-tokyo.ac.jp/current/ )の「3章(まず知っておく)」
から「21章(コンピュータと社会)」までですが,「7章(はいぱーワーク
ブックの歩き方)」と「17章(情報の処理)」は出題範囲に含みません.
同じく,各章にある「上級項目」も出題範囲に含みません.
マークシート方式(50問),時間は30分です.

今回の目標