Android MediaPlayer没有准备。错误(1,-4)

问题描述:

所以我一直在尝试为android制作一个简单的音效应用程序。 下面是相关代码:Android MediaPlayer没有准备。错误(1,-4)

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; 
} 

基本上它得到了一组“设置数据源”标签,但从未完成准备。错误代码是(1,4)1显然是未知错误。我已经使用了多种声音文件,其中一个我知道作品的玩家只要使用mp.create(等)

我不知道这是怎么回事就提前

由于工作时

编辑: 所以我跟着亚历克西斯卡地亚给出的链接的例子,现在没有错误。但是,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"); 
    } 

看到这个问题的答案修改代码:MediaPlayer.setDataSource causes IOException for valid file

但你不能做mp.setDataSource("R.raw.sound1");

+0

好,谢谢!这是有道理的。我现在似乎还有另一个问题。没有错误,但程序只是永远不会完成设置FileInputStream。这里是新的代码: – user1600704 2012-08-16 14:47:04

+0

但是你想玩什么类型的声音?如果它的短裤听起来,它更好地使用SoundPool类:http://developer.android.com/reference/android/media/SoundPool.html – 2012-08-16 14:49:39

+0

有些会更长......在20-30秒左右。我可以在'FileInputStream = new FileInputStream(file);'行之前获得日志消息,但它永远不会结束。该文件只是R.raw.music1文件 – user1600704 2012-08-16 14:54:27