Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/30: Рейтинг темы: голосов - 30, средняя оценка - 4.70
SlashX6
16 / 16 / 9
Регистрация: 16.03.2012
Сообщений: 437
1

Воспроизвести звук по нажатию кнопки

13.05.2013, 13:46. Просмотров 5584. Ответов 2
Метки нет (Все метки)

Добрый день!

Используя пример, написал приложение, которое по нажатию на кнопку воспроизводит определённый звук.
Но загвоздка в том, что на все строки такого типа, Eclipse выдаёт ошибку.

Java
1
playSound(factory1);
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package com.example.clicktolisten;
 
import java.io.IOException;
 
import android.app.Activity;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
public class MainActivity extends Activity {
    
    SoundPool soundPool;
    AssetManager assets;
    int factory1, factory2, factory3, traffic;
    Context context;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        context = this;
        soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
        assets = getAssets();
        
        // Прикручиваем путь к звуку
        factory1 = loadSound("factorywhistle_01.mp3");
        factory2 = loadSound("factorywhistle_02.mp3");
        factory3 = loadSound("factorywhistle_03.mp3");
        traffic  = loadSound("traffic_02.mp3");
        
        
        Button factory1 = (Button) this.findViewById(R.id.button1);
        factory1.setOnClickListener( new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                playSound(factory1);
            }
        });
        
        Button factory2 = (Button) this.findViewById(R.id.button2);
        factory2.setOnClickListener( new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                playSound(factory2);
            }
        });
        
        Button factory3 = (Button) this.findViewById(R.id.button3);
        factory3.setOnClickListener( new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                playSound(factory3);
            }
        });
        
        Button traffic  = (Button) this.findViewById(R.id.button4);
        traffic.setOnClickListener( new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                playSound(traffic);
            }
        });
    }
    
    
    protected void playSound( int sound ) {
        // TODO Auto-generated method stub
        if ( sound > 0 )
            soundPool.play(sound, 1, 1, 1, 0, 1);
    }
 
    private int loadSound(String fileName) {
        // TODO Auto-generated method stub
        AssetFileDescriptor aFileDescriptor = null;
        try {
            aFileDescriptor = assets.openFd(fileName);
        } catch ( IOException e ) {
            e.printStackTrace();
            Toast.makeText( this, "Could't load file"+ fileName, Toast.LENGTH_SHORT).show();
            return -1;
        }
        return soundPool.load(aFileDescriptor, 1);
    }
    
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

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

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2013, 13:46
Ответы с готовыми решениями:

Воспроизвести звук
Доброго времени суток. Как воспроизвести звук при нажатии на кнопку?...

Выбрать звук из списка доступных и воспроизвести его
Никак не могу по поиску найти, везде только MediaPlayer и AudioManager, а как...

Как воспроизвести фоновый звой звук при разговоре по телефону?
Например я беру трубку и мой собеседник слышит звук который я буду...

Звук по нажатию на button
Привет. Я повесил OnTouch на button, но теперь по клику нет звука, как...

Авторизация по нажатию кнопки
Привет всем! В Android Studio создаю приложение с Login Activity. Там есть...

2
proggamer12
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 509
Завершенные тесты: 1
25.07.2015, 23:12 2
Не уверен, что проблема в этом, но лучше использовать вместо конструктора фабричный метод: http://developer.android.com/reference/android/media/SoundPool.html
(This constructor was deprecated in API level 21. use SoundPool.Builder instead to create and configure a SoundPool instance)
0
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,002
26.07.2015, 13:37 3
Цитата Сообщение от SlashX6 Посмотреть сообщение
Но загвоздка в том, что на все строки такого типа, Eclipse выдаёт ошибку
1 не мешало бы показать текст ошибки
2 не ясно как вы хотите что бы это работало - получаете локальную ссылку на кнопку, в обработчике нажатия пытаетесь передать эту ссылку (скорее всего будет ошибка области видимости или времени жизни или как то так) в функцию которая кроме того ждет аргумент типа int
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2015, 13:37

Повтор кода по нажатию кнопки
Всем привет! Я написал программу, в которой есть такой, повторяющийся 4 раза...

Очистка StringBuilder по нажатию кнопки
Добрый день, подскажите как полностью очистить StringBuilder по нажатию кнопки....

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru