(18) 画面タップしたら音を鳴らす。

投稿者: | 2018年10月4日

1. やりたいこと

画面をタップしたら音を鳴らしたい。

それだけ…

2. やってみる!

今回キーとなる要素は三つある。
(1) 音楽ファイルのリソース登録
(2) 画面タップの検知
(3) 音楽再生

Androidではどれも簡単に実装できるようにしてくれている。

(1) 音楽ファイルのリソース登録

Projectペインの res配下に raw ディレクトリを作り、そこに MP3なり WAVなりを登録すればよい。

rawディレクトリへの音楽ファイルの登録方法は、drawableディレクトリへの画像ファイル追加と同じ容量だ。
Explorerなどでファイルをコピーし、Projectペイン上の rawディレクトリでペーストすればよい。

(2) 画面タップの検知

onTouchEvent で通知される。
基本形は以下の通り。

@Override public boolean onTouchEvent( MotionEvent event ) {
    float x = event.getX();
    float y = event.getY();
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
       // 押されたときの処理を書く。
       break;
    case MotionEvent.ACTION_MOVE:
       // ドラッグされたときの処理を書く。
       break;
    case MotionEvent.ACTION_UP:
       // 離されたときの処理を書く。
       break;
    }
    return true;
}

(3) 音楽再生

SoundPool を使えばよい。
基本的な使い方は以下の通り。

SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
int sound_id = soundPool.load(context, R.raw.mysound, 1);
soundPool.play(sound_id,  1.0F, 1.0F, 0, 0, 1.0F);

SoundPoolの使い方はこちらを参照のこと。

(4) 実装

たったのこれだけだ。

import android.media.AudioManager;
import android.media.SoundPool;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;

public class MainActivity extends AppCompatActivity {
    private SoundPool m_soundPool;
    private int m_soundID;

    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        m_soundPool = new SoundPool(1,AudioManager.STREAM_MUSIC,0);
        m_soundID = m_soundPool.load(this.getApplicationContext(), R.raw.cheer, 1);
    }

    @Override public boolean onTouchEvent( MotionEvent event ) {
        if(event.getAction() == MotionEvent.ACTION_UP){
            
            m_soundPool.play(m_soundID, 1.0F, 1.0F, 0, 0, 1.0F);    // 音楽再生
        }
        return true;
    }
}

3. 所感

・ゲームの効果音にはこの方法が使えそうだ。
・アプリを一般公開する場合、WEB上で拾った音楽ファイルの使用は著作権に注意すること。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)