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

Обсуждение уроков
Ответить
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 26 май 2013, 23:00

В этом уроке:
- работаем с SoundPool


Click here to read this article!
Последний раз редактировалось damager82 26 май 2017, 13:44, всего редактировалось 2 раза.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Mr. Nobody
Сообщения: 40
Зарегистрирован: 22 апр 2013, 21:28

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

Сообщение Mr. Nobody » 18 авг 2013, 20:42

Скажите, пожалуйста, как вместе использовать и OnClickListener, и OnLoadCompleteListener?
Т.е. у меня

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

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

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

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 18 авг 2013, 21:03

интерфейсы прописываются через запятую
R.id.team
Политика на форуме запрещена

popov_db
Сообщения: 2
Зарегистрирован: 03 сен 2013, 00:52

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

Сообщение popov_db » 03 сен 2013, 00:57

Подскажите пожалуйста, как лучше сделать синхронный load а затем play в одной функции

popov_db
Сообщения: 2
Зарегистрирован: 03 сен 2013, 00:52

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

Сообщение popov_db » 21 сен 2013, 20:42

Ещё вопрос: как отследить окончание проигрывания потока ?

Anton30
Сообщения: 7
Зарегистрирован: 26 сен 2013, 18:03

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

Сообщение Anton30 » 30 сен 2013, 07:46

как сделать чтобы при нажатии на кнопку включить а на другую кнопку отключить файл мп3 из проекта? не совсем понятен этот урок...есть ли видео версия этого урока?

kokaqwerty
Сообщения: 6
Зарегистрирован: 23 сен 2013, 20:42

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

Сообщение kokaqwerty » 01 окт 2013, 13:49

Здравствуйте,помогите пожайлуста. :ugeek:

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

kirka_scant
Сообщения: 42
Зарегистрирован: 18 дек 2013, 14:54

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

Сообщение kirka_scant » 22 мар 2014, 15:54

По моему коду последовательность такая:
1. Вызываю метод load.
2. Вызываю метод play.

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

kirka_scant
Сообщения: 42
Зарегистрирован: 18 дек 2013, 14:54

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

Сообщение kirka_scant » 22 мар 2014, 16:18

kirka_scant писал(а):По моему коду последовательность такая:
1. Вызываю метод load.
2. Вызываю метод play.

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

Granddad_Pehto
Сообщения: 1
Зарегистрирован: 07 май 2014, 08:08

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

Сообщение Granddad_Pehto » 07 май 2014, 08:17

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

brucemax
Сообщения: 117
Зарегистрирован: 01 апр 2012, 16:09
Откуда: Минск
Контактная информация:

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

Сообщение brucemax » 12 авг 2014, 18:17

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

Аватара пользователя
Don77
Сообщения: 13
Зарегистрирован: 02 июл 2014, 00:21

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

Сообщение Don77 » 12 авг 2014, 20:11

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

brucemax
Сообщения: 117
Зарегистрирован: 01 апр 2012, 16:09
Откуда: Минск
Контактная информация:

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

Сообщение brucemax » 12 авг 2014, 22:07

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

ahill
Сообщения: 2
Зарегистрирован: 28 сен 2014, 15:55

Медиа. SoundPool

Сообщение ahill » 14 фев 2015, 04:59

Здравствуйте, создаю приложение, в котором использую очень много звуков.

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) программа начинает долго думать. Нет ли какого иного метода воспроизведения? Например, что бы в память грузить не все, а лишь тот который нужно воспроизвести. Заранее благодарен.

Houck
Сообщения: 3
Зарегистрирован: 03 фев 2016, 21:05

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

Сообщение Houck » 04 фев 2016, 07:27

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

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

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]

Houck
Сообщения: 3
Зарегистрирован: 03 фев 2016, 21:05

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

Сообщение Houck » 04 фев 2016, 08:23

с этим кодом звук тоже обрывается :(

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

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);
    }
}

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

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

Сообщение klblk » 04 фев 2016, 09:28

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

Houck
Сообщения: 3
Зарегистрирован: 03 фев 2016, 21:05

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

Сообщение Houck » 04 фев 2016, 10:12

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

Ответить