Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.62
Т_Ё_М_А
23 / 6 / 2
Регистрация: 14.12.2009
Сообщений: 282
#1

Воспроизвести звук - Android

25.02.2013, 12:47. Просмотров 4645. Ответов 14
Метки нет (Все метки)

Доброго времени суток.
Как воспроизвести звук при нажатии на кнопку? playsound(sound.mp3); или что-то вроде?


public void onClick(View v){

???


}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2013, 12:47     Воспроизвести звук
Посмотрите здесь:

Как можно воспроизвести видео Android
Как записать аудио с микрофона и воспроизвести? Android
Воспроизвести звук по нажатию кнопки Android
Android Выбрать звук из списка доступных и воспроизвести его
Как воспроизвести фоновый звой звук при разговоре по телефону? Android
Android Распознать 1 звук
Как воспроизвести потоковое видео, можно ли? Basic4Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.02.2013, 16:29     Воспроизвести звук #2
http://java.dzone.com/articles/playing-sounds-android
Т_Ё_М_А
23 / 6 / 2
Регистрация: 14.12.2009
Сообщений: 282
25.02.2013, 22:41  [ТС]     Воспроизвести звук #3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import android.media.SoundPool;
// other imports
// ...
public class OurSoundPlayer{
 
    public static final int S1 = R.raw.s1;
    public static final int S2 = R.raw.s2;
    public static final int S3 = R.raw.s3;
    private static SoundPool soundPool;
    private static HashMap soundPoolMap;
 
    /** Populate the SoundPool*/
    public static void initSounds(Context context) {
        soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 100);
    soundPoolMap = new HashMap(3);     
 
    soundPoolMap.put( S1, soundPool.load(context, R.raw.s1, 1) );
    soundPoolMap.put( S2, soundPool.load(context, R.raw.s2, 2) );
    soundPoolMap.put( S3, soundPool.load(context, R.raw.s3, 3) );
    }
    /** Play a given sound in the soundPool */
    public static void playSound(Context context, int soundID) {
   if(soundPool == null || soundPoolMap == null){
      initSounds(context);
   }
       float volume = 1;// whatever in the range = 0.0 to 1.0
 
       // play sound with same right and left volume, with a priority of 1, 
       // zero repeats (i.e play once), and a play back rate of 1f
       soundPool.play(soundPoolMap.get(soundID), volume, volume, 1, 0, 1f);
       
    }
}
попробовал... пишет ошибку в последней строке "soundPoolMap.get(soundID)" должно быть int
Я так понимаю методу playSound надо передать 2 значения "context" и "int soundID"
Как пользоваться этим?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.02.2013, 23:37     Воспроизвести звук #4
замените
Java
1
soundPoolMap = new HashMap(3);
на
Java
1
soundPoolMap = new HashMap<Integer, Integer>(3);
Т_Ё_М_А
23 / 6 / 2
Регистрация: 14.12.2009
Сообщений: 282
26.02.2013, 01:52  [ТС]     Воспроизвести звук #5
Это ничего не поменяло, пишет что "soundPoolMap.get(soundID)" - типа Object, а должно быть int
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.02.2013, 02:14     Воспроизвести звук #6
сори, сюда тоже
Java
1
private static HashMap soundPoolMap<Integer, Integer>;
элементарные вещи не знаете, учите основы джавы.
Т_Ё_М_А
23 / 6 / 2
Регистрация: 14.12.2009
Сообщений: 282
26.02.2013, 02:39  [ТС]     Воспроизвести звук #7
Не работает.

private static HashMap soundPoolMap<Integer, Integer>; пишет неверный синтаксис

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package ru.artem.hellowooorld;
 
import java.util.HashMap;
 
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
// other imports
// ...
public class OurSoundPlayer{
 
    public static final int S1 = R.raw.s1;
    public static final int S2 = R.raw.s2;
    public static final int S3 = R.raw.s3;
    private static SoundPool soundPool;
    private static HashMap soundPoolMap<Integer, Integer>;
 
 
    /** Populate the SoundPool*/
    public static void initSounds(Context context) {
        soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 100);
        soundPoolMap = new HashMap<Integer, Integer>(3);     
 
    soundPoolMap.put( S1, soundPool.load(context, R.raw.s1, 1) );
    soundPoolMap.put( S2, soundPool.load(context, R.raw.s2, 2) );
    soundPoolMap.put( S3, soundPool.load(context, R.raw.s3, 3) );
    }
    /** Play a given sound in the soundPool */
    public static void playSound(Context context, int soundID) {
   if(soundPool == null || soundPoolMap == null){
      initSounds(context);
   }
       float volume = 1;// whatever in the range = 0.0 to 1.0
 
       // play sound with same right and left volume, with a priority of 1, 
       // zero repeats (i.e play once), and a play back rate of 1f
       soundPool.play(soundPoolMap.get(soundID), volume, volume, 1, 0, 1f);
       
    }
}
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.02.2013, 02:46     Воспроизвести звук #8
еще раз сори

Java
1
private static HashMap<Integer, Integer> soundPoolMap;
Т_Ё_М_А
23 / 6 / 2
Регистрация: 14.12.2009
Сообщений: 282
26.02.2013, 03:01  [ТС]     Воспроизвести звук #9
V0v1k, спасибо, класс работает. Осталось разобраться как им пользоваться. Не подскажете?
Нужно вызвать его из MainActivity.

Java
1
OurSoundPlayer.playSound(context, soundID);
Так? Я так понимаю методу playSound надо передать 2 значения "context" и "int soundID"
прочитал это, но так и не понял, что именно надо вписать. Можете привести пример?

Добавлено через 2 минуты
context это this?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.02.2013, 03:09     Воспроизвести звук #10
если this это активити, то да.
Т_Ё_М_А
23 / 6 / 2
Регистрация: 14.12.2009
Сообщений: 282
26.02.2013, 03:21  [ТС]     Воспроизвести звук #11
В одном источнике видел что context - это this, если его не определять как переменную. Но это видимо не так.

V0v1k, Вы знаете как заставить всё выше написанное работать?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.02.2013, 03:34     Воспроизвести звук #12
OurSoundPlayer.playSound(context, OurSoundPlayer.S1);
Т_Ё_М_А
23 / 6 / 2
Регистрация: 14.12.2009
Сообщений: 282
26.02.2013, 18:10  [ТС]     Воспроизвести звук #13
V0v1k, спасибо. Всё работает OurSoundPlayer.playSound(this, OurSoundPlayer.S1);

А что кроме this может быть? Можете объяснить?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.02.2013, 19:56     Воспроизвести звук #14
вы понимаете что такое this?

Добавлено через 39 секунд
само по себе this без контекста ничего не говорит о том, чем он является.

Добавлено через 8 минут
смотрим объявления метода - public static void playSound(Context context, int soundID), как видите, там где вы написали this, может быть объект класса Context, а также его потомки(Subclasses). Subclasses можно посмотреть в документации - http://developer.android.com/referen...t/Context.html
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 17:35     Воспроизвести звук
Еще ссылки по теме:

Android Воспроизвести видео из внешнего файла
Android Не воспроизводит звук
Звук в игре Android
MediaPlayer: не получается воспроизвести музыкальный файл из списка Android
Воспроизвести аудио по интернет-ссылке Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Т_Ё_М_А
23 / 6 / 2
Регистрация: 14.12.2009
Сообщений: 282
21.03.2013, 17:35  [ТС]     Воспроизвести звук #15
А как прервать воспроизведение? Пробовал так, не выходит:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class OurSoundPlayer{
 
    public static final int S1 = R.raw.but7;
    public static final int S2 = R.raw.but8;
    public static final int S3 = R.raw.rbutton17;
    private static SoundPool soundPool;
    private static HashMap<Integer, Integer> soundPoolMap;
 
    /** Populate the SoundPool*/
    public static void initSounds(Context context) {
        soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 100);
        soundPoolMap = new HashMap<Integer, Integer>(3);     
 
    soundPoolMap.put( S1, soundPool.load(context, R.raw.but7, 1) );
    soundPoolMap.put( S2, soundPool.load(context, R.raw.but8, 2) );
    soundPoolMap.put( S3, soundPool.load(context, R.raw.rbutton17, 3) );
    }
    /** Play a given sound in the soundPool */
    public static void playSound(Context context, int soundID, int st) {
   if(soundPool == null || soundPoolMap == null){
      initSounds(context);
   }
   if(st==1){ soundPool.stop(soundPoolMap.get(soundID));}
   else{
       float volume = 1;// whatever in the range = 0.0 to 1.0
 
       // play sound with same right and left volume, with a priority of 1, 
       // zero repeats (i.e play once), and a play back rate of 1f
       soundPool.play(soundPoolMap.get(soundID), volume, volume, 1, 0, 1f);
       st=0;
      
   }
    }
}
Кнопки
Java
1
2
3
4
5
6
public void Play(View v) {
            OurSoundPlayer.playSound(this, OurSoundPlayer.S3,0);
        }
        public void StopPlay(View v){ 
            OurSoundPlayer.playSound(this, OurSoundPlayer.S3,1);
        }
Yandex
Объявления
21.03.2013, 17:35     Воспроизвести звук
Ответ Создать тему
Опции темы

Текущее время: 22:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru