そこで、Android用のシンプルな効果音アプリを作ろうとしました。関連するコードは次のとおりです。
public static final String LOG_TAG = "BCA";
public MediaPlayer mp;
@Override
public void onCreate(Bundle savedInstanceState)
{
Log.v(LOG_TAG, "creating");
super.onCreate(savedInstanceState);
setContentView(R.layout.main_list);
mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
Log.v(LOG_TAG, "set stream type");
playSound();
}
public void playSound()
{
try {
mp.setDataSource("R.raw.sound1");
Log.v(LOG_TAG, "set data source");
mp.setOnPreparedListener(this);
mp.setOnErrorListener(this);
mp.prepareAsync();
Log.v(LOG_TAG, "preparing");
}
catch (IllegalArgumentException e) {
e.printStackTrace();
}
catch (IllegalStateException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
public void onPrepared(MediaPlayer mediaPlayer)
{
Log.v(LOG_TAG, "finished preparing; starting");
mp.start();
Log.v(LOG_TAG, "started music");
}
public boolean onError(MediaPlayer mp, int e, int f)
{
Log.v(LOG_TAG, "There was an error");
Log.v(LOG_TAG, mp + " " + e + " " + f);
mp.reset();
return true;
}
基本的に、設定された「set data source」タグに到達しますが、準備が完了することはありません。エラー コードは (1, 4) で、1 は明らかに不明なエラーです。複数のサウンド ファイルを使用しましたが、そのうちの 1 つは mp.create( etc... ) を使用するだけでプレーヤーが動作するように動作することがわかっています。
ここで何が起こっているのかわかりません
前もって感謝します
編集:だから私は Alexis Cartier が与えたリンクの例に従いましたが、今ではエラーはありません。ただし、FileinputStream は決して終了しません。プログラムが停止しているようです。新しいコードは次のとおりです。
public void playMusic()
{
File file = new File("R.raw.music1");
Log.v(LOG_TAG, "set file");
try {
Log.v(LOG_TAG, "in try block");
FileInputStream is = new FileInputStream(file);
Log.v(LOG_TAG, "set file input stream");
mp.setDataSource(is.getFD());
Log.v(LOG_TAG, "set data source");
mp.setOnPreparedListener(this);
mp.setOnErrorListener(this);
Log.v(LOG_TAG, "set on prepared/error listeners");
mp.prepareAsync();
Log.v(LOG_TAG, "preparing");
}