Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Звук в игре 
:(
    Опции темы
SatanClaus
Дата 9.7.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2007

Репутация: 3
Всего: 3



  Привет всем!
Задача у меня следующая: в игре нужно реализовать звук.
Причем, звуков должно быть минимум 2...
Не мог бы мне кто нибудь подсказать, как мне это сделать.
С одним звуком я как бы разобрался, и то, не знаю правильно ли...  smile 
И еще, как мне сделать, чтобы я не загружал постоянно ресурсы (звуковые файлы), а только
при инициализациию. Ато у меня получается, что нужно каждый раз вызывать

Код

     input_win = getClass().getRessourceAsStream("/win.mid");       
     player = Manager.createPlayer(input_win, "audio/midi");


Заранее спасибо!
PM MAIL   Вверх
hamsterKSU
Дата 10.7.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 401
Регистрация: 20.10.2006
Где: Украина, Херсон

Репутация: 7
Всего: 11



в пинцепе можено создать 2 плеера сразу. сделать их статичискими и final.т.е ты их загрузишь при инициализации.
 провести всю подготовку т.е. релиз и прифетч, но с этим могут быть грабли т.к. в некоторых телефонах заприфетчиным может быть тольк один плеер.(на SE вроде проблем с этим нет).
а потом включать и выключать какой тебе надо плеер.
PM MAIL ICQ   Вверх
SatanClaus
Дата 12.7.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2007

Репутация: 3
Всего: 3



Написал class
Код

import javax.microedition.media.*;
import java.io.InputStream;
import java.io.IOException;

public class PlayerManager implements Runnable{

    private static Player lose;
    private static Player win;

    private static InputStream is;
    private static PlayerManager instance;
    private Thread thread;

    public static final byte WIN = 1;
    public static final byte LOSE = 0;
    public static final byte ALL = 2;

    public static byte win_state = 0;        // выигрыш или проигрыш

    public static PlayerManager getInstance(){
        if (instance == null) instance = new PlayerManager();
        return instance;
    }

    public synchronized void stopSound(byte sound){
        try{
            switch (sound){
                case WIN:{
                    win.stop();
                    win.deallocate();
                    win.setMediaTime(0);
                    break;}
                case LOSE:{
                    lose.stop();
                    lose.deallocate();
                    lose.setMediaTime(0);
                    break;}
                case ALL:{
                    lose.stop();
                    lose.deallocate();
                    lose.setMediaTime(0);
                    win.stop();
                    win.deallocate();
                    win.setMediaTime(0);
                    break;}
            }
        } catch (MediaException me){}
    }

    private synchronized void startSound(byte sound){
        try{
            switch(sound){
                case LOSE:{
                    lose.prefetch();
                    lose.start();
                    break;}
                case WIN:{
                    win.prefetch();
                    win.start();
                    break;}
            }
        } catch (MediaException me){System.out.println("Media Exception in <<startSound()>>");}
    }

    public void loadData(){
        try{
            is = getClass().getResourceAsStream("/win.mid");
            win = Manager.createPlayer(is, "audio/midi");
            win.realize();
            
            is = getClass().getResourceAsStream("/lose.mid");
            lose = Manager.createPlayer(is, "audio/midi");
            lose.realize();
        } catch (MediaException mex){System.out.println("MediaException in <<loadData>>");
        } catch (IOException ioe){System.out.println("IOException in <<loaddata>>");}
    }

    public void start(){
        thread = new Thread(this);
        thread.start();
    }

    public void run(){
        switch(win_state){
            case 1: startSound(WIN);
                break;
            case 0: startSound(LOSE);
                break;
        }
    }
}

Проблема в том, что звук играется только один при любом событии (WIN/LOSE). не могу понять, в чем проблема... А запрефетченым действительно может быть только один плеер, и в SE тоже...
Подскажите, как мне решить проблему со звуком.  smile 
PM MAIL   Вверх
SatanClaus
Дата 12.7.2007, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2007

Репутация: 3
Всего: 3



Мучался, мучался и все-таки нашел решение!  smile 
Пишу для тех, кому интересно!

Вот что у меня получилось:
Код

import javax.microedition.media.*;
import java.io.InputStream;
import java.io.IOException;

public class PlayerManager implements Runnable{

    private static Player player;

    private static InputStream win, lose, curent;
    private static PlayerManager instance;
    private Thread thread;

    public static final byte WIN = 1;
    public static final byte LOSE = 0;

    public static byte win_state = 0;        // выигрыш или проигрыш

    public static PlayerManager getInstance(){
        if (instance == null) instance = new PlayerManager();
        return instance;
    }

/*
   Здесь я загружаю 2 плеера для того чтобы при событии в игре у меня не случалось тормозов.
   Может и не правильно, но другого решения я не нашел. Может найдет кто, так пишите...
*/

    public void loadSound(){                            
        win = getClass().getResourceAsStream("/win.mid");
        lose = getClass().getResourceAsStream("/lose.mid");
        try{
            player = Manager.createPlayer(win,"audio/midi");
            player.prefetch();
            defplayer(player);
            player = Manager.createPlayer(lose,"audio/midi");
            player.prefetch();
            defplayer(player);
        } catch (IOException ioe){System.out.println("IOException in <<loadSound>>");
        } catch (MediaException me){System.out.println("MediaException in <<loadSound>>");}
        Setting.levelLoad += 5;
    }

    public synchronized void stopSound(){
        try{
            defplayer(player);
        } catch (Throwable th){
            reset(player);
        }
    }

    private synchronized void startSound(byte sound){
            String filename;
            switch(sound){
                case LOSE: filename = "/lose.mid"; break;
                default: filename = "/win.mid"; break;
            }
                    try{
                        defplayer(player);
                    } catch (Throwable th){System.out.println("Throwable in startSound");}

                    try{
                        curent = getClass().getResourceAsStream(filename);
                        player = Manager.createPlayer(curent, "audio/midi");
                        player.prefetch();
                        player.start();
        } catch (IOException ioe){System.out.println("IOException in <<startSound>>");
        } catch (MediaException me){System.out.println("MediaException in <<startSound>>");
    }}

    private void defplayer(Player player) throws MediaException {
      if (player != null) {
         if(player.getState() == Player.STARTED) {
            player.stop();
         }
         if(player.getState() == Player.PREFETCHED) {
            player.deallocate();
         }
         if(player.getState() == Player.REALIZED ||
            player.getState() == Player.UNREALIZED) {
            player.close();
         }
      }
      player = null;
   }

    private void reset(Player player){
        player = null;
    }


    public void start(){
            thread = new Thread(this);
            thread.start();
    }

    public void run(){
        switch(win_state){
            case WIN: startSound(WIN);
                break;
            case LOSE: startSound(LOSE);
                break;
        }
    }
}

Буду рад почитать любые комментарии!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0907 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.