人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

効果音を鳴らす

宝箱を空けたらガチャ、ドアを開けたらギ〜、階段を下りたらザッザッザッと鳴るようにしてみます。基本的にサウンドエンジン(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();

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