Урок 127. Медиа. SoundPool
Урок 127. Медиа. SoundPool
В этом уроке:
- работаем с SoundPool
Click here to read this article!
- работаем с SoundPool
Click here to read this article!
Последний раз редактировалось damager82 26 май 2017, 13:44, всего редактировалось 2 раза.
-
- Сообщения: 40
- Зарегистрирован: 22 апр 2013, 21:28
Re: Урок 127. Медиа. SoundPool
Скажите, пожалуйста, как вместе использовать и OnClickListener, и OnLoadCompleteListener?
Т.е. у меня
а в уроке
В уроке только одна кнопка, поэтому тут все хорошо, а в проектах за кнопками надо следить, как объединить эти методы?
Т.е. у меня
Код: Выделить всё
public class MainActivity extends Activity implements OnClickListener {
Код: Выделить всё
public class MainActivity extends Activity implements OnLoadCompleteListener {
Re: Урок 127. Медиа. SoundPool
интерфейсы прописываются через запятую
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 127. Медиа. SoundPool
Подскажите пожалуйста, как лучше сделать синхронный load а затем play в одной функции
Re: Урок 127. Медиа. SoundPool
Ещё вопрос: как отследить окончание проигрывания потока ?
Re: Урок 127. Медиа. SoundPool
как сделать чтобы при нажатии на кнопку включить а на другую кнопку отключить файл мп3 из проекта? не совсем понятен этот урок...есть ли видео версия этого урока?
-
- Сообщения: 6
- Зарегистрирован: 23 сен 2013, 20:42
Re: Урок 127. Медиа. SoundPool
Здравствуйте,помогите пожайлуста.
например у меня есть Sound Pool и кнопка со звуком
могу ли я записать этот звук на флеш карту телефона?
например у меня есть Sound Pool и кнопка со звуком
могу ли я записать этот звук на флеш карту телефона?
-
- Сообщения: 42
- Зарегистрирован: 18 дек 2013, 14:54
Re: Урок 127. Медиа. SoundPool
По моему коду последовательность такая:
1. Вызываю метод load.
2. Вызываю метод play.
Почему-то метод onLoadComplete вызывается после метода play. Разве метод onLoadComplete не должен вклиниваться между play и load? Какой тогда смысл в этом методе, если программа пытается проиграть звуковой файл не знаю загружен он или нет? Метод onLoadComplete выполняется в другом потоке что ли? Теперь мне, чтобы узнать загружен файл или нет, я должен запихнуть вызов play в which по условию (status=0) метода onLoadComplete?
Ничего не понимаю.
1. Вызываю метод load.
2. Вызываю метод play.
Почему-то метод onLoadComplete вызывается после метода play. Разве метод onLoadComplete не должен вклиниваться между play и load? Какой тогда смысл в этом методе, если программа пытается проиграть звуковой файл не знаю загружен он или нет? Метод onLoadComplete выполняется в другом потоке что ли? Теперь мне, чтобы узнать загружен файл или нет, я должен запихнуть вызов play в which по условию (status=0) метода onLoadComplete?
Ничего не понимаю.
-
- Сообщения: 42
- Зарегистрирован: 18 дек 2013, 14:54
Re: Урок 127. Медиа. SoundPool
Сам разобрался. Так бы и удалил этот вопрос, но вдруг кому-нибудь это поможет.kirka_scant писал(а):По моему коду последовательность такая:
1. Вызываю метод load.
2. Вызываю метод play.
Почему-то метод onLoadComplete вызывается после метода play. Разве метод onLoadComplete не должен вклиниваться между play и load? Какой тогда смысл в этом методе, если программа пытается проиграть звуковой файл не знаю загружен он или нет? Метод onLoadComplete выполняется в другом потоке что ли? Теперь мне, чтобы узнать загружен файл или нет, я должен запихнуть вызов play в which по условию (status=0) метода onLoadComplete?
Ничего не понимаю.
Метод play нужно вызывать внутри своей реализации onLoadComplete, потому что onLoadComplete по окончании загрузки точно вызовется и ВОТ ТОГДА уже и нужно вызывать метод play.
-
- Сообщения: 1
- Зарегистрирован: 07 май 2014, 08:08
Re: Урок 127. Медиа. SoundPool
Добрый день. Помогите разобраться. Насколько я понял метод setVolume() устанавливает громкость от 0 до максимума заданного в самом андроид. А можно ли изменять этот самый максимум из своего приложения?
Re: Урок 127. Медиа. SoundPool
Как лучше поступить, юзаю sound pool в приложении, инициализирую в активити, беда в том что на одной (конечно их может быть больше) модели телефона при переходе на новую активити предыдущая уничтожается с вызовом onDestroy(), а я там как вы догадались релизаю soundpool, и в следующей активити он уже нул. Какой выход? Переинициализировать саундпул в каждой активити или может делать это в унаследованном классе приложения? или может ещё как?
Re: Урок 127. Медиа. SoundPool
Даже если вы унаследуете данный класс, все равно его придется инициализировать.Можно объявить экземпляр класса SoundPoll как static, но если по каким-то причинам он не инициализируется, то вы получите NullPointerException, и соответственно краш приложения.Где и как вы будете использовать данный экземпляр, я не знаю, поэтому если вы на 100% уверены в том, что он будет объявлен делайте его статическим.Альтернативный вариант - сервис.brucemax писал(а):Какой выход? Переинициализировать саундпул в каждой активити или может делать это в унаследованном классе приложения? или может ещё как?
Re: Урок 127. Медиа. SoundPool
Я создал свой класс SoundManager, синглтон, в гет инстанс проверяю не занулён ли сам саунд пул, если занулён заново создаю и инициализирую все звуки. Вообщем вот так решил. Работает.
Медиа. SoundPool
Здравствуйте, создаю приложение, в котором использую очень много звуков.
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) программа начинает долго думать. Нет ли какого иного метода воспроизведения? Например, что бы в память грузить не все, а лишь тот который нужно воспроизвести. Заранее благодарен.
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
почему у меня звук обрывается всегда через опредленное время,будь с любым форматом или продолжительностью звука ? (
[/quote]
Код: Выделить всё
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);
}
}
Re: Урок 127. Медиа. SoundPool
с этим кодом звук тоже обрывается
Код: Выделить всё
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
"опредленное время" это сколько? SoundPool на сколько я знаю предназначен для воспроизведения коротких звуков (на so говорят о 5 секундах), если нужно воспроизвести что-то продолжительное, то вероятно стоит обратить внимание на предыдущий урок.
Re: Урок 127. Медиа. SoundPool
извините,а как с MediaPlayer реализовать рандомную песню при клике на картинку ? мне очень сложно разобраться как устроен код в уроках,да и уроков я подобных не нашел,только где плеер написать,но там соотствественно очень нагроможден код из-за трех кнопок и несколько функций воспроизведения и паузы!klblk писал(а):"опредленное время" это сколько? SoundPool на сколько я знаю предназначен для воспроизведения коротких звуков (на so говорят о 5 секундах), если нужно воспроизвести что-то продолжительное, то вероятно стоит обратить внимание на предыдущий урок.