Воспроизвести звук с помощью SoundPool - PullRequest
11 голосов
/ 18 июня 2011

Мне нужно воспроизвести короткий звук в моем приложении. Я написал следующий код, но у меня нет звука, и на моем телефоне Samsung появилась странная вибрация. Но в то же время этот код хорошо работает на моем симуляторе 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 Ответ

7 голосов
/ 18 июня 2011

Может возникнуть проблема с регулятором громкости или с правильным воспроизведением звукового файла: если вы измените функцию 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)+"]");
    };
...