The Intent 加载时声音不响

Posted

技术标签:

【中文标题】The Intent 加载时声音不响【英文标题】:Sound not ringing on load of The Intent 【发布时间】:2014-10-28 06:46:15 【问题描述】:

我正在使用意图从另一个班级调用这个班级,我想在班级加载时播放这首歌“song.ogg”..请帮助我如何??

public class DetlsActivity extends Activity 
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.detls_layout);

        getActionBar().setDisplayHomeAsUpEnabled(true);

        SoundPool soundPool;
        int soundID;
        soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
        soundID = soundPool.load(this,R.raw.song, 1);
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        //soundPool.play(soundID,1f,1f,1,0,1f);
        Toast.makeText(this,"Ringing Song",Toast.LENGTH_LONG).show();
        try 
        AssetFileDescriptor assetFileDescriptor = this.getAssets().openFd("song.ogg");
        soundPool.load(assetFileDescriptor,1);
            Toast.makeText(this,"Played",Toast.LENGTH_LONG).show();
        
        catch (Exception e) 
            Log.d("LOGCAT","Exception Song");
        

【问题讨论】:

您在 LogCat 中是否遇到任何异常? 不,我没有得到任何异常,所以这段代码正确吗?? 我得到的是“响铃”的吐司,而不是“播放”的吐司 你要播放 song.ogg 还是 R.raw.song ?? 我在 res 中创建了一个原始文件夹,并将一个名为 song.ogg 的文件放在 taht 文件夹中。我想播放那个文件.. 【参考方案1】:
    SoundPool soundPool;
    int soundID;
    soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
    Toast.makeText(this,"Ringing Song",Toast.LENGTH_LONG).show();
    try 
        soundID = soundPool.load(this,R.raw.song, 1);
        int waitLimit = 1000;
        int waitCounter = 0;
        int throttle = 10;
        while(soundPool.play(soundID, 1.f, 1.f, 1, 0, 1.f) == 0 && waitCounter < waitLimit)
          waitCounter++; SystemClock.sleep(throttle);
        Toast.makeText(this,"Played "+soundID,Toast.LENGTH_LONG).show();

    
    catch (Exception e) 
        Log.d("LOGCAT","Exception Song");
        Toast.makeText(this,"Exception "+e,Toast.LENGTH_LONG).show();
    

用上面的代码替换你的代码。当前代码给出警告 soundpool sample 1 not ready 所以使用 while 条件检查。

在这里,您的资源位于原始文件夹中,这就是我们使用soundID = soundPool.load(this,R.raw.song, 1); 的原因。如果您的资源当时在 assets 文件夹中,您可以使用 soundID = soundPool.load(getAssets().openFd("song.ogg"),1);

【讨论】:

谢谢老兄.. 工作得很好:)

以上是关于The Intent 加载时声音不响的主要内容,如果未能解决你的问题,请参考以下文章

在 Soundpool 中使用许多声音时,应用程序加载时间是如此缓慢……任何替换?

iphone快速加载声音文件

每当我使用“playsound”在后台播放声音时,我的游戏的其余部分都不会加载

预加载通过 iPhone AudioServices 播放的声音

SpriteKit:播放前将声音文件预加载到内存中?

加载关卡后声音不会播放