示例1尚未就绪 - Android 2.1中的Soundpool

时间:2012-03-02 17:35:57

标签: android soundpool

我有一个音频文件,我正在从SD卡读取它。点击一个按钮,我正在播放sdcard的音频文件。它成功播放音频文件6至7次,但之后显示{{1 }}

我在Android 2.1工作,即API 7。

unable to load (null)  sample 1 not ready

什么是soundpool表示我无法加载(null)样本1未准备好? 我怎么能解决这个问题,请帮助我,我很长时间都在苦苦挣扎。

4 个答案:

答案 0 :(得分:8)

我遇到过与wav文件类似的问题。让我们开始丢弃一些东西:

这不是等待的问题,尽管可能在另一种情况下。请注意,您发布了两条不同的错误消息,例如:

  1. 无法加载(null)
  2. 样品1未准备好
  3. 当您尝试将样本加载到SoundPool时会引发第一个错误,第二个错误是在您尝试播放它时。但在这种情况下,第二个错误显然是第一个错误的结果:如果样本尚未加载,则样本无法就绪。

    所以你应该在第一次错误之前集中注意力。

    它与MediaPlayer无关,因为您使用的是与AFAIK不同的SoundPool。

    因此问题的根源可能是,并且应该按顺序丢弃:

    1. 文件不存在。
    2. 该文件存在,但由于某种原因无法读取。
    3. 文件在那里,它是可读的,但它已损坏或不是音频文件。
    4. 文件在那里,它是可读的,它是一个没有损坏的音频文件,但SoundPool不喜欢它。
    5. 最后一次是我的情况。由于某些原因,SoundPool无法加载一个wav样本,实际上该样本适用于我使用的其他所有播放器。所以我只是结束使用另一种格式不同的文件。这是违规文件的格式,由mplayer在我的GNU / LiNUX盒子上讲述:

      Opening audio decoder: [pcm] Uncompressed PCM audio decoder
      AUDIO: 96000 Hz, 1 ch, s16le, 1536.0 kbit/100.00% (ratio: 192000->192000)
      Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
      

      这是另一个文件的工作原理:

      Opening audio decoder: [pcm] Uncompressed PCM audio decoder
      AUDIO: 22050 Hz, 2 ch, s16le, 705.6 kbit/100.00% (ratio: 88200->88200)
      Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
      

      有许多不同之处,但关键是第二个有效,所以我只是放弃了第一个并进入第二个。知道这一点,如果我需要第一个声音样本,我只需要调整其速率和通道,使用像Audacity这样的音频编辑器来解决问题。

      为什么它不仅仅适用于第一种情况?谁知道,但如果我能解决它那么容易......谁在乎呢?

      此致

答案 1 :(得分:1)

在使用SoundPool.setOnLoadCompleteListener

播放文件之前,您需要检查文件是否已成功加载
public void loadSound (String strSound, int stream) {
     boolean loaded = false;
     mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId,
                    int status) {
                mSoundPool.play(stream, streamVolume, streamVolume, 1, LOOP_1_TIME, 1f);
            }
        });
    try {
          stream= mSoundPool.load(aMan.openFd(strSound), 1);
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

答案 2 :(得分:0)

您是否尝试过调用mediaplayer.release()并重新初始化?还http://developer.android.com/reference/android/media/MediaPlayer.html

答案 3 :(得分:0)

我认为that's your problem。整个文件未加载,您正在尝试播放它。你必须等一段时间才能玩它。