Soundpool 停止问题?

Posted

技术标签:

【中文标题】Soundpool 停止问题?【英文标题】:Soundpool stop issue? 【发布时间】:2012-09-30 17:33:47 【问题描述】:

Soundpool 停止功能不起作用。我有很多图像,当我需要播放与图像相关的声音时,我有很多图像,我尝试使用 soundpool 对象音乐播放得很好。但是如果我快速将 1 个图像移动到第 1 个图像的 2 个图像,我的问题是滚动时间,2 图像相关的声音被播放。 但我需要设置当 2 图像是视图位置时自动我需要停止 1 图像相关的声音,我只需要播放 2 图像相关的声音。

谢谢,

package com.example.pictures;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class Pictures extends Activity implements OnPageChangeListener
SoundManager snd; 
int sound1,sound2,sound3;
View view=null;
@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.picturespage);
 MyPagerAdapter adapter = new MyPagerAdapter();
 ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
 myPager.setAdapter(adapter);
 myPager.setCurrentItem(0); 
 myPager.setOnPageChangeListener(this);
snd = new SoundManager(this);
 sound1 = snd.load(R.raw.sound1);
 sound2 = snd.load(R.raw.sound2);
 sound3 = snd.load(R.raw.sound3);


public void onPageScrollStateChanged(int arg0) 
    // TODO Auto-generated method stub



public void onPageScrolled(int arg0, float arg1, int arg2) 
    // TODO Auto-generated method stub



public void onPageSelected(int position) 
    // TODO Auto-generated method stub

    switch (position) 
    case 0:                
            snd.play(sound1);
            lastPlayed = sound1;
        break;
    case 1:
            snd.stop(lastPlayed);
        snd.play(sound2);
            lastPlayed = sound2;
        break;
    case 2:
            snd.stop(lastPlayed);
            snd.play(sound3);
            lastPlayed = sound3;
        break;
    case 3:
        Toast.makeText(this, "test", Toast.LENGTH_SHORT).show();
        break;
    case 4:
       Toast.makeText(this, "test2", Toast.LENGTH_SHORT).show();
        break;
    case 5:
        Toast.makeText(this, "5", Toast.LENGTH_SHORT).show();
        break;
    

;

声音管理器类;

public class SoundManager 
//....
//....
//....

    public SoundManager(Context appContext)
    
      sndPool = new SoundPool(16, AudioManager.STREAM_MUSIC, 0);
      pContext = appContext;
    

    // Load up a sound and return the id
    public int load(int sound_id)
    
        return sndPool.load(pContext, sound_id, 1);
    

    // Play a sound
    public int play(int sound_id)
    
         return sndPool.play(sound_id, leftVolume, rightVolume, 1, 0,rate);     

    

    public void stop(int sound_id) 
           sndPool.stop(sound_id);           
    

【问题讨论】:

【参考方案1】:

我不太明白你在说什么,但只是看看你的代码,你错误地使用了 stop 函数。

stop 函数应该接收 stream id,而不是 sound id

流 id 是从 play 函数返回的值,用于标识播放曲目的特定实例。

声音 id 是从 load 函数返回的值,用于标识已加载的资源。

【讨论】:

以上是关于Soundpool 停止问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何停止 SoundPool 中的所有声音?

SoundPool 停止功能未停止

Seekbar 控制 Soundpool,停止工作

SoundPool 和 MediaPlayer 在一段时间后循环播放的哔声停止

SoundPool 与 ImageView 的用法类似 Switch

如何从动作栏上的soundpool中停止声音