>>もっと見る
Androidでサウンドが流れるアプリ
サウンドの実装
サウンドにはSoundPoolとMediaPlayerがあります。
それぞれの使い勝手としては
SoundPool
・比較的再生時間が短い音声ファイル
・ゲームのSEや効果音など
・ボタンクリックやエフェクトに合わせたSEや効果音など
MediaPlayer
・比較的再生時間が長い音声ファイル
・オーディオプレイヤーなどのアプリケーション
・ゲームなどのBGM
・URL指定によるストリーミング再生
今回はSoundPoolを使用しました。
音声ファイルは、Androidアプリを作っているにもかかわらず、
iPhoneのボイスメモで録音しメールで投げたものを使用しちゃいました。
おそらく何でもいいのですが、対応ファイルを挙げると
・3GPP(.3PP)
・MPEG-4(.mpまたは.m4a)
・MP3(.mp3)
・Ogg(.ogg)
・WAVE(.wav)
・MIDI(.midなど)
です。
準備としては先ほどiPhoneで録音しメールで投げたものをres/rawディレクトリ
にぶち込みます。
そうしたらメインのアクティビティで次のようにします。やっていることは自作
のSoundクラスを作って
第一引数に音声ファイルを格納した配列の番号と第二引数に再生時の速度を指定
しdoplay()というメソッドを呼び出したいます。
//////////////////////////////////////////
Sound sound;
private Float speed;
private int soundCount;
sound = new Sound(this);
speed = 2.0F;
soundCount = 0;
sound.doplay(soundCount, speed);
//////////////////////////////////////////
では、Soundクラスはどういったものなのかというと、
//////////////////////////////////////////
package jp.co.kts;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
public class Sound {
// プールする音源の最大数
private static final int MAX_SOUNDS_COUNT = 5;
// サウンドプールの定義
SoundPool soundPool;
// サウンド格納配列
int[] sounds = new int[MAX_SOUNDS_COUNT];
public Sound(Context context) {
// インスタンス生成
// 第一引数 プールする音源の最大数
// 第二引数 ストリームのタイプ通jy等はSTREAM_MUSICでOK
// 第三引数 サンプリングレートのクオリティ(デフォルトは0)
soundPool = new SoundPool(MAX_SOUNDS_COUNT, AudioManager.STREAM_MUSIC,0);
// 音声ファイルのロード
// 第一引数 コンテキスト
// 第二引数 リソースID
// 第三引数 プライオリティ(今は何も効果がないが将来の互換性のために1にする。)
sounds[0] = soundPool.load(context, R.raw.onsei1, 1);
sounds[1] = soundPool.load(context, R.raw.onsei2, 1);
sounds[2] = soundPool.load(context,R.raw.onsei3,1);
sounds[3]= soundPool.load(context,R.raw.onsei4,1);
}
public void doplay(int soundCount,Float speed) {
// 再生します
// 第一引数 サウンドID(ロードメソッドの戻り値を使う。)
// 第二引数 左スピーカのボリューム(0.0から1.0の間)
// 第三引数 →スピーカのボリューム(0.0から1.0の間)
// 第四引数 プライオリティ(0は優先度が低い?とりあえず0にしておく)
// 第五引数 ループ回数(0ならループなし、-1なら無限ループ)
// 第六引数 再生速度(0.5から2.0の値で0.5なら半分のスピード2.0は倍速)
soundPool.play(sounds[soundCount], 1.0F, 1.0F, 0, 0, speed);
}
}
//////////////////////////////////////////
こんな感じです。やっていることはコンストラクタでSoundPoolを作り、配列に
音声ファイルを格納しています。
doPlay()でsoundPool.play()を呼び出してあげています。
やっていることは単純で簡単。
以上でできるはずなので皆さんぜひやってみてください。
サウンドの実装
サウンドにはSoundPoolとMediaPlayerがあります。
それぞれの使い勝手としては
SoundPool
・比較的再生時間が短い音声ファイル
・ゲームのSEや効果音など
・ボタンクリックやエフェクトに合わせたSEや効果音など
MediaPlayer
・比較的再生時間が長い音声ファイル
・オーディオプレイヤーなどのアプリケーション
・ゲームなどのBGM
・URL指定によるストリーミング再生
今回はSoundPoolを使用しました。
音声ファイルは、Androidアプリを作っているにもかかわらず、
iPhoneのボイスメモで録音しメールで投げたものを使用しちゃいました。
おそらく何でもいいのですが、対応ファイルを挙げると
・3GPP(.3PP)
・MPEG-4(.mpまたは.m4a)
・MP3(.mp3)
・Ogg(.ogg)
・WAVE(.wav)
・MIDI(.midなど)
です。
準備としては先ほどiPhoneで録音しメールで投げたものをres/rawディレクトリ
にぶち込みます。
そうしたらメインのアクティビティで次のようにします。やっていることは自作
のSoundクラスを作って
第一引数に音声ファイルを格納した配列の番号と第二引数に再生時の速度を指定
しdoplay()というメソッドを呼び出したいます。
//////////////////////////////////////////
Sound sound;
private Float speed;
private int soundCount;
sound = new Sound(this);
speed = 2.0F;
soundCount = 0;
sound.doplay(soundCount, speed);
//////////////////////////////////////////
では、Soundクラスはどういったものなのかというと、
//////////////////////////////////////////
package jp.co.kts;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
public class Sound {
// プールする音源の最大数
private static final int MAX_SOUNDS_COUNT = 5;
// サウンドプールの定義
SoundPool soundPool;
// サウンド格納配列
int[] sounds = new int[MAX_SOUNDS_COUNT];
public Sound(Context context) {
// インスタンス生成
// 第一引数 プールする音源の最大数
// 第二引数 ストリームのタイプ通jy等はSTREAM_MUSICでOK
// 第三引数 サンプリングレートのクオリティ(デフォルトは0)
soundPool = new SoundPool(MAX_SOUNDS_COUNT, AudioManager.STREAM_MUSIC,0);
// 音声ファイルのロード
// 第一引数 コンテキスト
// 第二引数 リソースID
// 第三引数 プライオリティ(今は何も効果がないが将来の互換性のために1にする。)
sounds[0] = soundPool.load(context, R.raw.onsei1, 1);
sounds[1] = soundPool.load(context, R.raw.onsei2, 1);
sounds[2] = soundPool.load(context,R.raw.onsei3,1);
sounds[3]= soundPool.load(context,R.raw.onsei4,1);
}
public void doplay(int soundCount,Float speed) {
// 再生します
// 第一引数 サウンドID(ロードメソッドの戻り値を使う。)
// 第二引数 左スピーカのボリューム(0.0から1.0の間)
// 第三引数 →スピーカのボリューム(0.0から1.0の間)
// 第四引数 プライオリティ(0は優先度が低い?とりあえず0にしておく)
// 第五引数 ループ回数(0ならループなし、-1なら無限ループ)
// 第六引数 再生速度(0.5から2.0の値で0.5なら半分のスピード2.0は倍速)
soundPool.play(sounds[soundCount], 1.0F, 1.0F, 0, 0, speed);
}
}
//////////////////////////////////////////
こんな感じです。やっていることはコンストラクタでSoundPoolを作り、配列に
音声ファイルを格納しています。
doPlay()でsoundPool.play()を呼び出してあげています。
やっていることは単純で簡単。
以上でできるはずなので皆さんぜひやってみてください。

