2012-03-12 2 views
0

Итак, я делаю игру, и музыка меняется, когда вы находитесь в разных регионах, или если есть перерыв, например, с AI.Музыка в Java (начало/остановка)

Итак, я узнал, как сделать музыку в моей программе, и теперь я пытаюсь остановить ее, но я не уверен, как это сделать, ниже - фрагмент кода, в котором играет музыка, а затем я пытаюсь перезагружайте его новой музыкой, когда происходит действие.

public static void songs(String word) { 
     String temp = word; 
     if (temp.equals("start")) { 

      try { 

       try { 
        blah = new FileInputStream("C:/Users/Austin/Desktop/Storage/programimages/game/battle.wav"); 

       } catch (Throwable e) { 
        e.printStackTrace(); 
       } 
       AudioStream as = new AudioStream(blah); 

       AudioPlayer.player.start(as); 
       System.out.println("going"); 

      } catch (IOException e) { 
       System.err.println(e); 
      } 
     } 

     if (temp.equals("stop")) { 

      try { 

       try { 
        blah = new FileInputStream("C:/Users/Austin/Desktop/Storage/programimages/game/silence.wav"); 

       } catch (Throwable e) { 
        e.printStackTrace(); 
       } 
       AudioStream as = new AudioStream(blah); 

       AudioPlayer.player.stop(as); 
       System.out.println("stopping"); 

      } catch (IOException e) { 
       System.err.println(e); 
      } 
     } 
    } 

Это единственный метод, который я смог найти, что есть музыка играет, но если вы, ребята, есть какие-либо другие предложения, пожалуйста, дайте мне знать.

Опять же, я хочу, чтобы звуковые эффекты и музыка шли, и сейчас все, что происходит, будет играть одна песня, и она не остановится ни при каких обстоятельствах, пока она не ударит по самому краю ее длины. Я хочу иметь возможность останавливать песни всякий раз, когда появляется новый, а также позволять звуковым эффектам всплывать.

Спасибо! (так как я застрял на этом и мне нужен ответ сейчас, я, вероятно, отправлю на один или два других java-сайта, чтобы я мог получить ответ как можно скорее, спасибо !!!!)

EDITED CODE: не остановить текущий поток, все больше предложений оценили)

public static void songs(String word) throws IOException { 
    String temp = word; 


    if (temp.equals("go")) { 
     try { 
      blah = new FileInputStream("C:/Users/Austin/Desktop/Storage/programimages/game/battle.wav"); 
     } catch (Throwable e) { 
      e.printStackTrace(); 
     } 

     AudioStream as = new AudioStream(blah); 
     AudioPlayer.player.start(as); 
     System.out.println("going"); 
    } 

    if (temp.equals("stop")) { 

     //don't try and do things with a null object! 
     if (as != null) { 
      AudioPlayer.player.stop(as); 
      System.out.println("stopping1"); 
     } 
     System.out.println("stopping2"); 
     AudioPlayer.player.stop(as); 
    } 
} 
+0

'AudioStream' Что такое .. что конкретно? Где JavaDocs для класса «AudioStream»? –

ответ

1

в настоящее время вы создаете в вашем стоп ветви новый AudioStream и вызова метода остановки с помощью этого. Это другой объект тот, который в данный момент играет. Попробуйте сделать переменную класса AudioStream и вместо этого вызовите стоп.

EDIT: в верхней части класса, содержащего код ...

class YourClass { 
    //the class member variable 
    private AudioStream as; 
    //[etc...] 

В вашей начальной ветви:

// 'as' has already been defined above 
as = new AudioStream(blah); 
AudioPlayer.player.start(as); 
System.out.println("going"); 

В вашей остановки отрасли:

try 
{ 
    //don't try and do things with a null object! 
    if (as != null) 
    { 
     AudioPlayer.player.stop(as); 
    } 
    System.out.println("stopping"); 
} 
catch (IOException e) 
{ 
    System.err.println(e); 
} 

You может возникнуть проблема с идентификатором static в вашем методе - если вы вызываете это из экземпляра класса y Это не нужно.

+0

ну, я сейчас пытаюсь, но у меня много ошибок, слишком много, чтобы действительно объяснить и сделать его полезным вообще. Можете ли вы дать мне базовый макет, где вы хотите попробовать и реализовать переменную аудиопотока и с чего начать ее останавливать? И мне лучше «остановить» его, или просто сыграть на некотором «тихом» треке. Спасибо! – Austin

+0

Остин: надеюсь, мое редактирование поможет. wds: вызывается остановка на AudioPlayer.player. Если он пытался вызвать метод, который не существовал, код даже не компилируется. Просто пытаюсь быть полезной с информацией, которую мы имеем. – raveturned

+0

Хорошо, вот что у меня есть ... Все еще не работает кстати. Теперь, когда я нажимаю кнопку остановки или уезжаю или что-то изменяет, он печатает значение «stopping2», что не равно нулю. Музыка orignal по-прежнему играет, и это не происходит. Я попытался переставить остановку с воспроизведением файла музыки без звука, и все, что он делает, запускается поверх другого звука. Мне нужно как-то СКАЗАТЬ поток. Я редактировал свой пост с новым кодом – Austin

0

Я не могу даже получить доступ к этим sun.audio Объектам на моей Eclipse IDE - Я знаю, что они находятся в rt.jar, но есть информация о заголовках о том, что они являются проприетарными и такими.

Может ли библиотека звука Java (javax.sound.sampled) обрабатывать то, что вы хотите сделать? Оба Clip и SourceDataLine позволяют остановить воспроизведение. Это более обычный способ воспроизведения звука, если вы хотите использовать родную Java.

Воспроизведение в здесь:

http://docs.oracle.com/javase/tutorial/sound/playing.html

Но документация, в целом, не совсем богата примерами. Там пример кода на этом сайте

http://www.jsresources.org/

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

Смежные вопросы