Android MediaPlayer не готовится. Ошибка (1, -4)

Поэтому я пытался сделать простое приложение со звуковыми эффектами для 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");
    } 

person user1600704    schedule 15.08.2012    source источник


Ответы (1)


См. ответ на этот вопрос, чтобы изменить код: файл

Но вы не можете сделать mp.setDataSource("R.raw.sound1");

person Alexis C.    schedule 15.08.2012
comment
Хорошо спасибо! Это имеет смысл. Кажется, у меня сейчас другая проблема. Никаких ошибок, но программа просто никогда не заканчивает установку FileInputStream. Вот новый код: - person user1600704; 16.08.2012
comment
Но какой тип звука вы хотите воспроизвести? Если его короткие звуки звучат, лучше использовать класс SoundPool: developer.android.com /reference/android/media/SoundPool.html - person Alexis C.; 16.08.2012
comment
Некоторые будут длиннее... например, до 20-30 секунд. Я могу получить сообщение журнала перед строкой FileInputStream is = new FileInputStream(file);, но оно никогда не заканчивается. Файл - это просто файл R.raw.music1. - person user1600704; 16.08.2012
comment
извините, я понял, что забыл скопировать код в... 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"); надеюсь все еще читаем, извините - person user1600704; 16.08.2012