使用SoundPool播放声音

11

我需要在我的应用程序中播放一个短音频。我编写了以下代码,但是没有任何声音,并且在我的三星手机上出现了奇怪的震动。但与此同时,此代码在我的Android模拟器上运行良好。我的代码如下:

package com.samplers;

import android.app.Activity;
import android.media.SoundPool;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class FixVibroActivity extends Activity {
    /** Called when the activity is first created. */

    private Button white;
    private SoundPool spool;
    private int soundID;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
        spool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
        soundID = spool.load(this, R.raw.error, 1);

        white = (Button)findViewById(R.id.whiteBtn);
        white.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Sound();
            }
        });
    }

    public void Sound(){
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        spool.play(soundID, volume, volume, 1, 0, 1f);
    };
}

请帮我解决这个问题,谢谢!:)


1
你能否检查一下logcat是否打印了任何有趣的错误? - FeatureCreep
1个回答

7

您的音量控制可能存在问题,或者您的声音文件无法正确播放:如果将Sound()函数更改为以下内容,它会做什么?如果您的手机未正确处理R.raw.error文件格式,但模拟器可以正确处理,那将非常奇怪。

public void Sound(){
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        android.util.Log.v("SOUND","["+volume+"]["+spool.play(soundID, volume, volume, 1, 0, 1f)+"]");
    };

2
谢谢您的回复!问题已解决!: )我将文件格式从*.ogg更改为*.wav,然后就可以了!!:)感谢您的帮助! :) - lubart
4
啊,电话不支持ogg格式,但模拟器支持。好知道。本以为是文件格式的问题。 - Femi
手机支持这种格式。这个文件使用MediaPlayer播放了一次,之后就没有声音了。无论如何,对我来说是好消息 :) 再次感谢! :) - lubart
2
啊,我犯了一个错误:SoundPool / Audiotrack 需要 PCM 数据,这是 wav 给你的。 MediaPlayer 对 ogg 进行解码,但是 SoundPool 不支持。 - Femi
我明白了,现在一切都清楚了!!!我会在以后的工作中考虑这些信息。谢谢。 :) - lubart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接