0

そこで、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");
    } 
4

1 に答える 1

0

コードを変更するには、この質問の回答を参照してください: MediaPlayer.setDataSource は有効なファイルに対して IOException を引き起こします

しかし、あなたはできませんmp.setDataSource("R.raw.sound1");

于 2012-08-15T14:00:29.170 に答える