読者です 読者をやめる 読者になる 読者になる

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習・Deep Learningに関する記事が多いです。



効果音を鳴らす

Javagame

宝箱を空けたらガチャ、ドアを開けたらギ〜、階段を下りたらザッザッザッと鳴るようにしてみます。基本的にサウンドエンジン(2005/12/10)のWaveEngineを使うので簡単です。例によって効果音はザ・マッチメイカァズさんからお借りしています。

rpg22.jar

サウンドのロード

MainPanelでサウンド名を定義します。

    // サウンド名
    // サウンド番号は0, 1,・・・というように割り当てられる
    private static final String[] soundNames =
        {"treasure.wav", "door.wav", "step.wav"};

実際にロードしているのはloadSound()です。WaveEngineへロードします。

    /**
     * サウンドをロードする
     */
    private void loadSound() {
        // BGMをロード(略)
        
        // サウンドをロード
        for (int i=0; i<soundNames.length; i++) {
            try {
                WaveEngine.load("sound/" + soundNames[i]);
            } catch (UnsupportedAudioFileException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (LineUnavailableException e) {
                e.printStackTrace();
            }
        }
    }

サウンドの再生

サウンドの再生(play)は適当なところにコードを追加しています。MainPanelのmainWindowCheckInput()を見てください。しらべるととびらのところに再生処理が入ってますね。さて階段を降りるときのサウンドはどこにいれればいいでしょう?

    /**
     * メインウィンドウでのキー入力をチェックする
     */
    private void mainWindowCheckInput() {
        ・・・
        if (spaceKey.isPressed()) { // スペース
            // 移動中は表示できない
            if (hero.isMoving())
                return;

            // しらべる
            TreasureEvent treasure = hero.search();
            if (treasure != null) {
                // かちゃ
                WaveEngine.play(0);
                // メッセージをセットする
                messageWindow.setMessage(
                    treasure.getItemName() + "を てにいれた。");
                // メッセージウィンドウを表示
                messageWindow.show();
                // TODO: ここにアイテム入手処理を入れる
                // 宝箱を削除
                maps[mapNo].removeEvent(treasure);
                return; // しらべた場合ははなさない
            }

            // とびら
            DoorEvent door = hero.open();
            if (door != null) {
                // ぎー
                WaveEngine.play(1);
                // ドアを削除
                maps[mapNo].removeEvent(door);

                return;
            }

            // はなす(略)
        }
    }

サウンドのレンダリング

サウンドエンジンを使う場合はレンダリングする必要があります。ゲームループに

    WaveEngine.render();

を追加します。もっといろいろ効果音追加すると楽しそうです。