◆ Lego Mindstomes NXT - leJOS - (10) ミュージック
今回は、NXT を使って音を鳴らします。
rsoファイル関係の記述を修正(2010-02-17)
■ wavrso ファイル
2 つのサウンドファイル(.rso)を鳴らします。
最初は、NTX の起動音を 2 秒間。つぎに、"Good Job" を 2 秒間繰り
返します(実際には、2回と少し)。
"ringin.wav" を鳴らします。
□ 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ファイル名
■ ビープ音を鳴らす
ビープ音を鳴らすだけであれば、それ用のメソッドが用意されています。
□ Sound.setVolume(Sound.VOL_MAX); // (1)
最大音量を設定します。
□ Sound.beep(); // (2)
ビープ音を鳴らします。
□ Sound.twoBeeps(); // (3)
ビープ音を2回鳴らします。
□ Sound.buzz(); // (4)
バズ音を鳴らします。
■ システム音を鳴らす
ビープ音だけでなく、システムが用意した音を鳴らすメソッドが用意さ
れています。
□ Sound.systemSound(true, 0); // (1)
指定されたコードの音を鳴らす。
□ メソッド
---
static void systemSound(boolean aQueued, int aCode)
指定されたコードの音を鳴らす。
---
コードは、次の値を持っています。
以上
今回は、NXT を使って音を鳴らします。
rsoファイル関係の記述を修正(2010-02-17)
■ wav
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 ----- -------------------- -------------
以上