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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа со звуками в J2me 
:(
    Опции темы
voltaren
Дата 12.1.2008, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Возникла следующая проблема, в игре вообщем то всего 3 звука, они загружаются до начала игры, и потом проигрываются использую метод start()
но к сожалению...это все очень подтормаживает, вернее когда мы вызываем в потоке игрового цикла проигрывание звуков, то игра замирает на некоторое время( то есть игровые объекты перестают двигаться) а потом все отмирает звук проигрывается и все работает как работало и так каждый раз, подскажите как решить проблему можно?
Формат звуков используется wav, и телефон на котором тестируется nokia 5500d.
И еще хотелось бы узнать какие форматы наиболее желательно использовать для воспроизведения звуков, именно звуков а не мелодии, какие наиболее распространненые,
и вообще имеет ли смысл в j2me реализовывать звуковые эффекты в игре, ну так скажем в реалтайме, то есть когда время исполенения игры критично!
Заранее благодарен!
PM MAIL   Вверх
Dancer
Дата 14.1.2008, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



лучше используй amr - самый правильный стандарт для мобильника smile (если конечно твоя мобилка его поддерживает), ну и как уже сам сказал, нефиг в игровом потоке пытаться ещё и звучок играть, ты это дело вынеси в отдельный поток, должно помочь. Удачи.


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
math64
Дата 29.2.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



А что писать вместо "audio/x-wav" при использовании amr?
Код

Manager.createPlayer (is, "audio/x-wav");

PM   Вверх
W0LF
Дата 29.2.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



У мну када-то на работе учили гуглом пользоваццо программистов =)
по логике должно быть так = Manager.createPlayer (is, "audio/x-amr");
теперь строку (Manager.createPlayer (is, "audio/x-amr");) наберем в гуле и проверим результат smile
ну, по идее так должно работать


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
eugine_s
Дата 29.2.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

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



voltaren, еще совет, кроме того, что звуки в другом потоке воспроизводить: создай звуки до начала игры и держи их в состоянии prefetch, а когда нужно проиграть какой-то звук, то уже вызывай start. Но учитывай, что в большинстве телефонов только один звук может проигрываться: т.е. перед тем как проиграть новый звук, нужно старый остановить (stop()).
PM MAIL   Вверх
rooman
Дата 19.11.2008, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Код

public void playMelody(String name){
    try{
      stopMelody();
      song=name;
      InputStream in=name.getClass().getResourceAsStream(name);
      player=Manager.createPlayer(in,"audio/midi");
      player.setLoopCount(-1);
      player.start();
      volumeControl=(VolumeControl)player.getControl("VolumeControl");
      volumeControl.setLevel(0);
      
    }catch(MediaException me){
      System.out.println("MediaException!!!!!!!");
    }catch(IOException ioe){
      System.out.println("IOException!!!!!!!");
    }
}


А наростает звук в цикле

Код

public void run() {
        
    int timeStep = 300;
    
    while (!game_is_play) {
      long start = System.currentTimeMillis();
            

      if(volumeControl!=null&&volume<100){
        volume+=5;
        volumeControl.setLevel(volume);
      }
             
      long end = System.currentTimeMillis();
      int duration = (int)(end - start);
      
      if (duration < timeStep) {
        try { Thread.sleep(timeStep - duration); }
        catch (InterruptedException ie) {}
      }
    }
 }


Только перед наростанием звук почему-то подпрыгивает(при каждом включении), в этом вся проблема. При выключении volume сбрасывается на 0.Буду рад любому совету.
PM MAIL   Вверх
Dummy
Дата 20.11.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(rooman @  19.11.2008,  21:57 Найти цитируемый пост)
Только перед наростанием звук почему-то подпрыгивает(при каждом включении), в этом вся проблема. При выключении volume сбрасывается на 0.Буду рад любому совету. 

Думается мне, дело в том, что VolumeControl.setVolume() вызывается уже после Player.start(), в результате чего звучок изначально начинает проигрываться на некотором дефолтном ненулевом уровне. Попробуй поменять строчки 8-10 первого куска кода на примерно следующее (написано на коленке, так что надо проверять):

Код

player.prefetch();
final Object synch  = new Object();
PlayerListener plrListener = new MyPlayerListener(synch);
player.setListener(plrListener);

volumeControl=(VolumeControl)player.getControl("VolumeControl");
volumeControl.setLevel(0);

synchronized (synch) {
    synch.wait(500); // думается, здесь опасно ставить бесконечное ожидание, полагаясь на нотификацию VOLUME_CHANGED от платформы...
}

player.start();

...

class MyPlayerListener implements PlayerListener {
     private Object synch;

     public MyPlayerListener(Object synch) {
          this.synch = synch;
     }

     void playerUpdate(Player player, String event, Object eventData) {
            if (PlayerListener.VOLUME_CHANGED.equals(event)) {
                   synchronized (synch) {
                        synch.notify();
                   }
            }
     }
}


Это сообщение отредактировал(а) Dummy - 20.11.2008, 12:05
PM MAIL   Вверх
rooman
Дата 21.11.2008, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо ,но дело не только в этом было как выяснилось ,метод setLevel() с 0 в качестве аргумента не воспринимался.
PM MAIL   Вверх
RomkaRomka
Дата 4.12.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(eugine_s @ 29.2.2008,  14:07)
...создай звуки до начала игры и держи их в состоянии prefetch, а когда нужно проиграть какой-то звук...

Помнится, у Нокий не мало устройств, которые позволяют держать в префетченом состоянии всего 1-2 плеера :(

С уважением, Роман.
PM MAIL   Вверх
eugine_s
Дата 4.12.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

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



Цитата(RomkaRomka @  4.12.2008,  10:17 Найти цитируемый пост)
Помнится, у Нокий не мало устройств, которые позволяют держать в префетченом состоянии всего 1-2 плеера


Если точнее, то Nokia S40. Для них достаточно держать плееры в released состоянии.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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