Страница 1 из 1

Урок 127. Медиа. SoundPool

Добавлено: 26 май 2013, 23:00
damager82
В этом уроке:
- работаем с SoundPool


Click here to read this article!

Re: Урок 127. Медиа. SoundPool

Добавлено: 18 авг 2013, 20:42
Mr. Nobody
Скажите, пожалуйста, как вместе использовать и OnClickListener, и OnLoadCompleteListener?
Т.е. у меня

Код: Выделить всё

public class MainActivity extends Activity implements OnClickListener {
а в уроке

Код: Выделить всё

public class MainActivity extends Activity implements OnLoadCompleteListener {
В уроке только одна кнопка, поэтому тут все хорошо, а в проектах за кнопками надо следить, как объединить эти методы?

Re: Урок 127. Медиа. SoundPool

Добавлено: 18 авг 2013, 21:03
rezak90
интерфейсы прописываются через запятую

Re: Урок 127. Медиа. SoundPool

Добавлено: 03 сен 2013, 00:57
popov_db
Подскажите пожалуйста, как лучше сделать синхронный load а затем play в одной функции

Re: Урок 127. Медиа. SoundPool

Добавлено: 21 сен 2013, 20:42
popov_db
Ещё вопрос: как отследить окончание проигрывания потока ?

Re: Урок 127. Медиа. SoundPool

Добавлено: 30 сен 2013, 07:46
Anton30
как сделать чтобы при нажатии на кнопку включить а на другую кнопку отключить файл мп3 из проекта? не совсем понятен этот урок...есть ли видео версия этого урока?

Re: Урок 127. Медиа. SoundPool

Добавлено: 01 окт 2013, 13:49
kokaqwerty
Здравствуйте,помогите пожайлуста. :ugeek:

например у меня есть Sound Pool и кнопка со звуком
могу ли я записать этот звук на флеш карту телефона?

Re: Урок 127. Медиа. SoundPool

Добавлено: 22 мар 2014, 15:54
kirka_scant
По моему коду последовательность такая:
1. Вызываю метод load.
2. Вызываю метод play.

Почему-то метод onLoadComplete вызывается после метода play. Разве метод onLoadComplete не должен вклиниваться между play и load? Какой тогда смысл в этом методе, если программа пытается проиграть звуковой файл не знаю загружен он или нет? Метод onLoadComplete выполняется в другом потоке что ли? Теперь мне, чтобы узнать загружен файл или нет, я должен запихнуть вызов play в which по условию (status=0) метода onLoadComplete?
Ничего не понимаю.

Re: Урок 127. Медиа. SoundPool

Добавлено: 22 мар 2014, 16:18
kirka_scant
kirka_scant писал(а):По моему коду последовательность такая:
1. Вызываю метод load.
2. Вызываю метод play.

Почему-то метод onLoadComplete вызывается после метода play. Разве метод onLoadComplete не должен вклиниваться между play и load? Какой тогда смысл в этом методе, если программа пытается проиграть звуковой файл не знаю загружен он или нет? Метод onLoadComplete выполняется в другом потоке что ли? Теперь мне, чтобы узнать загружен файл или нет, я должен запихнуть вызов play в which по условию (status=0) метода onLoadComplete?
Ничего не понимаю.
Сам разобрался. Так бы и удалил этот вопрос, но вдруг кому-нибудь это поможет.
Метод play нужно вызывать внутри своей реализации onLoadComplete, потому что onLoadComplete по окончании загрузки точно вызовется и ВОТ ТОГДА уже и нужно вызывать метод play.

Re: Урок 127. Медиа. SoundPool

Добавлено: 07 май 2014, 08:17
Granddad_Pehto
Добрый день. Помогите разобраться. Насколько я понял метод setVolume() устанавливает громкость от 0 до максимума заданного в самом андроид. А можно ли изменять этот самый максимум из своего приложения?

Re: Урок 127. Медиа. SoundPool

Добавлено: 12 авг 2014, 18:17
brucemax
Как лучше поступить, юзаю sound pool в приложении, инициализирую в активити, беда в том что на одной (конечно их может быть больше) модели телефона при переходе на новую активити предыдущая уничтожается с вызовом onDestroy(), а я там как вы догадались релизаю soundpool, и в следующей активити он уже нул. Какой выход? Переинициализировать саундпул в каждой активити или может делать это в унаследованном классе приложения? или может ещё как?

Re: Урок 127. Медиа. SoundPool

Добавлено: 12 авг 2014, 20:11
Don77
brucemax писал(а):Какой выход? Переинициализировать саундпул в каждой активити или может делать это в унаследованном классе приложения? или может ещё как?
Даже если вы унаследуете данный класс, все равно его придется инициализировать.Можно объявить экземпляр класса SoundPoll как static, но если по каким-то причинам он не инициализируется, то вы получите NullPointerException, и соответственно краш приложения.Где и как вы будете использовать данный экземпляр, я не знаю, поэтому если вы на 100% уверены в том, что он будет объявлен делайте его статическим.Альтернативный вариант - сервис.

Re: Урок 127. Медиа. SoundPool

Добавлено: 12 авг 2014, 22:07
brucemax
Я создал свой класс SoundManager, синглтон, в гет инстанс проверяю не занулён ли сам саунд пул, если занулён заново создаю и инициализирую все звуки. Вообщем вот так решил. Работает.

Медиа. SoundPool

Добавлено: 14 фев 2015, 04:59
ahill
Здравствуйте, создаю приложение, в котором использую очень много звуков.

public class MainShow extends Activity implements OnClickListener, OnTouchListener{

//переменные для работы со звуком
private SoundPool sounds;
private int voice_1,.......voice_n;
//-----------------------------------------
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_show);

//работа со звуком
sounds = new SoundPool(10, AudioManager.STREAM_MUSIC,0);
//назначаем звуки
voice_1 = sounds.load(this, R.raw.voice_sound_1, 1);
...
voice_n = sounds.load(this, R.raw.sound_n, 1);
}

@Override
public void onClick(View v) {
//в зависимости от неких условий вывожу один из звуков
switch (v.getId()) {
sounds.play(voice_obj_1_1, 1.0f, 1.0f, 0, 0, 1.5f);
break;
}//onClick
}
Но когда звуков становиться много (примерно 60) программа начинает долго думать. Нет ли какого иного метода воспроизведения? Например, что бы в память грузить не все, а лишь тот который нужно воспроизвести. Заранее благодарен.

Re: Урок 127. Медиа. SoundPool

Добавлено: 04 фев 2016, 07:27
Houck
почему у меня звук обрывается всегда через опредленное время,будь с любым форматом или продолжительностью звука ? :((

Код: Выделить всё

package com.alex.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity implements OnLoadCompleteListener {

    final String LOG_TAG = "myLogs";
    final int MAX_STREAMS = 5;

    SoundPool sp;
    int soundIdlol;

    int streamIDlol;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sp = new SoundPool(MAX_STREAMS, AudioManager.STREAM_MUSIC, 0);
        sp.setOnLoadCompleteListener(this);

        soundIdlol = sp.load(this, R.raw.lol, 1);
        Log.d(LOG_TAG, "soundIdlol = " + soundIdlol);
    }

    public void onClick(View view) {
        sp.play(soundIdlol, 1, 1, 0, 0, 1);
    }

    @Override
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
        Log.d(LOG_TAG, "onLoadComplete, sampleId = " + sampleId + ", status = " + status);
    }
}
[/quote]

Re: Урок 127. Медиа. SoundPool

Добавлено: 04 фев 2016, 08:23
Houck
с этим кодом звук тоже обрывается :(

Код: Выделить всё

package com.alex.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    private SoundPool mSound;
    private int mMelody=1;
    private int mPlay;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSound = new SoundPool(1, AudioManager.STREAM_MUSIC,0);
        mSound.load(this, R.raw.lol, 1);

    }

    public void Play(View view) {
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        mPlay = mSound.play(mMelody,1,1,1,0,1);
    }
}

Re: Урок 127. Медиа. SoundPool

Добавлено: 04 фев 2016, 09:28
klblk
"опредленное время" это сколько? SoundPool на сколько я знаю предназначен для воспроизведения коротких звуков (на so говорят о 5 секундах), если нужно воспроизвести что-то продолжительное, то вероятно стоит обратить внимание на предыдущий урок.

Re: Урок 127. Медиа. SoundPool

Добавлено: 04 фев 2016, 10:12
Houck
klblk писал(а):"опредленное время" это сколько? SoundPool на сколько я знаю предназначен для воспроизведения коротких звуков (на so говорят о 5 секундах), если нужно воспроизвести что-то продолжительное, то вероятно стоит обратить внимание на предыдущий урок.
извините,а как с MediaPlayer реализовать рандомную песню при клике на картинку ? мне очень сложно разобраться как устроен код в уроках,да и уроков я подобных не нашел,только где плеер написать,но там соотствественно очень нагроможден код из-за трех кнопок и несколько функций воспроизведения и паузы!