【问题标题】:Android MediaPlayer not preparing. Error (1, -4)Android MediaPlayer 未准备好。错误 (1, -4)
【发布时间】:2012-08-15 13:54:58
【问题描述】:

所以我一直在尝试为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;
}

基本上它会到达设置的“设置数据源”标签,但从未完成准备。错误代码是 (1, 4) 1 显然是未知错误。我使用了多个声音文件,我知道其中一个声音文件在仅使用 mp.create(etc...) 时就像播放器一样工作

我不确定这里发生了什么

提前致谢

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

【问题讨论】:

    标签: java android media-player prepare


    【解决方案1】:

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

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

    【讨论】:

    • 好的,谢谢!这是有道理的。我现在似乎有另一个问题。没有错误,但程序永远不会完成 FileInputStream 的设置。这是新代码:
    • 但是你想播放什么类型的声音?如果它的短裤听起来,最好使用 SoundPool 类:developer.android.com/reference/android/media/SoundPool.html
    • 有些会更长...最多大约 20-30 秒。我可以在FileInputStream is = new FileInputStream(file); 行之前收到一条日志消息,但它永远不会结束。该文件只是 R.raw.music1 文件
    • 抱歉,我意识到我忘记将代码复制到... File file = new File("R.raw.chewy"); 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"); 希望仍然可读,抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多