marunomaruno-memo

marunomaruno-memo

Lego Mindstoms NXT - leJOS - (10) ミュージック

2008年09月16日 | LEGO
◆ Lego Mindstomes NXT - leJOS - (10) ミュージック

今回は、NXT を使って音を鳴らします。

rsoファイル関係の記述を修正(2010-02-17)

■ wavrso ファイル


2 つのサウンドファイル(.rso)を鳴らします。
最初は、NTX の起動音を 2 秒間。つぎに、"Good Job" を 2 秒間繰り
返します(実際には、2回と少し)。

"ringin.wav" を鳴らします。

------------------------------------------------------
import java.io.File;

import lejos.nxt.Sound;

/**
 * 「トライボット」使用
 * wavrso ファイルを鳴らす。
 * @author maruno
 * @version 2.0, 2010-02-18
 * @version 1.0, 2008-06-26
 * @since 1.0
 */
public class PlayingFile01 {

    static final String WAV_FILE_NAME = "ringin.wav";    // ファイル名
    static final int DURATION = 400;    // 持続時間

    public static void main(String[] args) {
//        Sound.playSample(new File("! Startup.rso")); // (1)
//        Sound.playSample(new File("Good Job.rso")); // (2)

        System.out.println("Press any button to play.");
        Button.waitForPress();
        Sound.playSample(new File(WAV_FILE_NAME)); // wavファイルを鳴らす
        Sound.pause(DURATION);
    }
}

------------------------------------------------------


□ Sound.playSample(new File("! Startup.rso")); // (1)

wav ファイルを鳴らします。このメソッドの後に、
Sound.pause()を使って、時間を指定します。

もともとの NXT の起動音を鳴らします。ファイルは、File オブジェク
トにして指定します。

△ NXC との違い
---
NXC のときは、PlayFileEx 関数を使って鳴らしました。このとき、こ
の関数単独では鳴らず、後ろに、Wait 関数の指定が必須でした。leJOS
では、この playSample メソッド単独で鳴らすことができます。
ただし、繰り返しなどの指定はできないようです。(★)
---


□ Sound クラス

音を鳴らす関連のメソッドをもったクラスです。


□ Sound クラスのおもなメソッド
---
static void beep()
1 回、ビープ音を鳴らします。

static void pause(int t)
指定したミリ秒数分停止(スリープ)します。

static void playNote(int[] inst, int freq, int len)
音符を開始します。

static int playSample(File file)
wav ファイルを演奏します。戻り値は演奏時間で、エラーが発生し
たときは負数。

static int playSample(File file, int vol)
wav ファイルを指定された音量で演奏します。音量は 0-100 の間
で指定します。戻り値は演奏時間で、エラーが発生したときは負数。

static void playTone(int freq, int duration)
トーンを演奏します。

static void playTone(int aFrequency, int aDuration, int aVolume)

トーンを演奏します。

static void setVolume(int vol)
音量を設定します。
---


□ Sound.playSample(new File("Good Job.rso")); // (2)

"Good Job" を鳴らします。

ただし、これは鳴りません。指定されたサウンドファイル
"Good Job.rso" が NXT の中に入っていないからです。



---
サウンドファイルの NXT へのダウンロード方法。
java.io パッケージをつかうのだろうか?
---

このプログラムを動かす前に、wav ファイルを NXT にダウンロードします。
nxjupload wavファイル名

■ ビープ音を鳴らす

ビープ音を鳴らすだけであれば、それ用のメソッドが用意されています。

------------------------------------------------------
import lejos.nxt.Button;
import lejos.nxt.Sound;

/**
 * ビープ音を鳴らすプリケーション。
 * 
 * @author marunomaruno
 * @version 1.0, 2008/06/04
 * @since 1.0
 */
public class Beep01 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Sound.setVolume(Sound.VOL_MAX);                            // (1)
        
        System.out.println("Press any button to beep.");
        Button.waitForPress();
        Sound.beep();                                            // (2)

        System.out.println("Press any button to beep twice.");
        Button.waitForPress();
        Sound.twoBeeps();                                        // (3)

        System.out.println("Press any button to buzz.");
        Button.waitForPress();
        Sound.buzz();                                            // (4)

        System.out.println("Press any button to exit.");
        Button.waitForPress();
    }
}

------------------------------------------------------


□ Sound.setVolume(Sound.VOL_MAX); // (1)

最大音量を設定します。


□ Sound.beep(); // (2)

ビープ音を鳴らします。


□ Sound.twoBeeps(); // (3)

ビープ音を2回鳴らします。


□ Sound.buzz(); // (4)

バズ音を鳴らします。


■ システム音を鳴らす

ビープ音だけでなく、システムが用意した音を鳴らすメソッドが用意さ
れています。

------------------------------------------------------
import lejos.nxt.Button;
import lejos.nxt.Sound;

/**
 * システム音を鳴らすプリケーション。
 * 
 * @author marunomaruno
 * @version 1.0, 2008/06/04
 * @since 1.0
 */
public class SystemSound01 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Sound.setVolume(Sound.VOL_MAX);                        
        
        System.out.println("Press any button to code 0.");
        Button.waitForPress();
        Sound.systemSound(true, 0);                                // (1)

        System.out.println("Press any button to code 1.");
        Button.waitForPress();
        Sound.systemSound(true, 1);                    

        System.out.println("Press any button to code 2.");
        Button.waitForPress();
        Sound.systemSound(true, 2);                    

        System.out.println("Press any button to code 3.");
        Button.waitForPress();
        Sound.systemSound(true, 3);                            

        System.out.println("Press any button to code 4.");
        Button.waitForPress();
        Sound.systemSound(true, 4);                            

        System.out.println("Press any button to exit.");
        Button.waitForPress();
    }
}
------------------------------------------------------


□ Sound.systemSound(true, 0); // (1)

指定されたコードの音を鳴らす。


□ メソッド
---
static void systemSound(boolean aQueued, int aCode)
指定されたコードの音を鳴らす。
---

コードは、次の値を持っています。
----- -------------------- -------------
aCode システム音           代替メソッド
----- -------------------- -------------
  0   short beep           beep
  1   double beep          twoBeeps
  2   descending arpeggio  -
  3   ascending arpeggio   -
  4   long, low buzz       buzz
----- -------------------- -------------


以上