ユーザーが画面に触れるたびにランダムなサウンドを再生したいと考えています。これらの他の投稿を見つけて使用することで、プロジェクトをセットアップし、正しい方向に進むことができました。
ボタンを押してランダムなサウンド ファイルを再生する - Android
ランダム ファイルを再生するサウンド マネージャーに関する問題
ランダム ファイルを再生するサウンド マネージャーに関する問題
問題は、現在のコードで NullPointerException が発生することです。LogCat は、それが 2 つの場所から来ていることを示しています。
メインクラスでは
int x = r.nextInt(1);
そしてSoundManagerクラスで
mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f);
これは私が見落としているだけであることは知っていますが、理解できないようです。Android と Java の開発はかなり新しいので、それが理由です。Main クラスと SoundManager クラスの両方を含めました。どんな助けでも大歓迎です!
メインクラス
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
public class Main extends Activity implements OnTouchListener
{
Random r = new Random();
int x = r.nextInt(1);
private SoundManager mSoundManager;
@Override public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView image = (ImageView) findViewById(R.id.mIll);
image.setOnTouchListener(this);
mSoundManager = new SoundManager();
mSoundManager.initSounds(getBaseContext());
mSoundManager.addSound(1, R.raw.m1);
mSoundManager.addSound(2, R.raw.m2);
mSoundManager.addSound(3, R.raw.m3);
mSoundManager.addSound(4, R.raw.m4);
mSoundManager.addSound(5, R.raw.m5);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
{
mSoundManager.playSound(x);
}
break;
}
return true;
}
}
サウンドマネージャー
import java.util.HashMap;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
public class SoundManager {
private SoundPool mSoundPool;
private HashMap<Integer, Integer> mSoundPoolMap;
private AudioManager mAudioManager;
private Context mContext;
public static final int maxSounds = 1;
public SoundManager() {
}
public void initSounds(Context theContext) {
mContext = theContext;
mSoundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
mSoundPoolMap = new HashMap<Integer, Integer>();
mAudioManager = (AudioManager) mContext
.getSystemService(Context.AUDIO_SERVICE);
}
public void addSound(int Index, int SoundID) {
mSoundPoolMap.put(Index, mSoundPool.load(mContext, SoundID, 1));
}
public void playSound(int index) {
int streamVolume = mAudioManager
.getStreamVolume(AudioManager.STREAM_MUSIC);
mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume,
1, 0, 1f);
}
}