Оглавление

Звук в аплетах Java
Загрузка и проигрывание
Аплет PlayClip

    Аплет PlayClip

    Аплет PlayClip демонстрирует использование интерфейса AudioClip. В его окне (рис. 1) имеются три кнопки с названиями Play, Loop и Stop.

    pic01.gif (1685 bytes)

    Рис. 1. Окно аплета PlayClip

    Сразу после запуска аплета кнопка Stop находится в заблокированном состоянии. Если нажать кнопку Play или Loop, начнется, соответственно, однократное проигрывание или проигрывание в цикле файла с именем kaas.au, распложенного в том же каталоге, что и двоичный файл аплета PlayClip.

    Когда начинается проигрывание звукового файла, кнопка Stop разблокируется, что позволяет остановить проигрывание.

    Исходные тексты приложения

    Основной файл исходных текстов приложения приведен в листинге 1.

    Листинг 1. Файл PlayClip.java

    import java.applet.*;
    
    import java.awt.*;
    public class PlayClip extends Applet
    
    {
    
      private String m_ClipName = "kaas.au";
    
      private final String 
    
        PARAM_ClipName = "ClipName";
    
      AudioClip auClip;
    
      Button btPlay;
    
      Button btLoop;
    
      Button btStop;
    
      boolean fLoopPlay = false;
      public String getAppletInfo()
    
      {
    
        return "Name: PlayClip";
    
      }
      public String[][] getParameterInfo()
    
      {
    
        String[][] info =
    
        {
    
          { 
    
    	PARAM_ClipName, 
    
    	"String", 
    
    	"Audioclip filename" 
    
          },
    
        };
    
        return info;
    
      }
      public void init()
    
      {
    
        String param;
    
        param = getParameter(PARAM_ClipName);
    
        if (param != null)
    
          m_ClipName = param;
        btPlay = new Button("Play");
    
        btLoop = new Button("Loop");
    
        btStop = new Button("Stop");
        btStop.disable();
        add(btPlay);
    
        add(btLoop);
    
        add(btStop);
        auClip = this.getAudioClip(getCodeBase(),
    
          m_ClipName);
    
      }
      public boolean action(Event evt,
    
        Object obj)
    
      {
    
        Button btn;
        if(evt.target instanceof Button)
    
        {
    
          btn = (Button)evt.target;
          if(evt.target.equals(btPlay))
    
          {
    
            auClip.play();
    
            btStop.enable();
    
          }
          else if(evt.target.equals(btLoop))
    
          {
    
            auClip.loop();
    
            fLoopPlay = true;
    
            btStop.enable();
    
          }
          else if(evt.target.equals(btStop))
    
          {
    
            auClip.stop();
    
            fLoopPlay = false;
    
            btStop.disable();
    
          }
          else
    
          {
    
            return false;
    
          }
          return true;
    
        }
        return false;
    
      }
      public void paint(Graphics g)
    
      {
    
        Dimension dimAppWndDimension = size(); 
        g.setColor(Color.yellow);
    
        g.fillRect(0, 0, 
    
          dimAppWndDimension.width  - 1, 
    
          dimAppWndDimension.height - 1);
        g.setColor(Color.black);
    
        g.drawRect(0, 0, 
    
          dimAppWndDimension.width  - 1, 
    
          dimAppWndDimension.height - 1);
    
      }
      public void start()
    
      {
    
        if(fLoopPlay)
    
          auClip.loop();
    
      }	
      public void stop()
    
      {
    
        if(fLoopPlay)
    
          auClip.stop();
    
      }
    
    }

    В листинге 2 вы найдете исходный текст документа HTML, созданного автоматически для нашего приложения системой Java WorkShop.

    Листинг 2. Файл PlayClip.tmp.html

    <applet name="PlayClip"
    
      code="PlayClip"
    
      codebase=
    
    "file:/e:/sun/articles/vol14/src/PlayClip"
    
     width="200"
    
     height="100"
    
     align="Top"
    
      alt="If you had a java-enabled browser,
    
     you would see an applet here.">
    
    <param name="ClipName" value="kaas.au">
    
    <hr>
    
    If your browser recognized the applet tag,
    
     you would see an applet here. 
    
    <hr>
    
    </applet>

    Описание исходного текста

    В главном классе аплета определено несколько полей и методов. Рассмотрим эти поля и наиболее важные методы.

    Поля класса PlayClip

    В поле m_ClipName хранится имя звукового файла, которое передается через параметр ClipName из документа HTML. По умолчанию для этого параметра используется значение kaas.au.

    Строка PARAM_ClipName хранит имя указанного выше параметра.

    Ссылка на интерфейс AudioClip хранится в поле auClip:

    AudioClip auClip;

    Следующие три поля хранят ссылки на кнопки, предназначенные для управления проигрыванием звукового файла:

    Button btPlay;
    
    Button btLoop;
    
    Button btStop;

    Поле fLoopPlay типа boolean используется для флага, которым отмечается режим проигрывания звукового файла в цикле.

    Метод getParameterInfo

    Метод getParameterInfo возвращает описание единственного параметра нашего аплета, через который передается имя звукового файла.

    Метод init

    Сразу после запуска аплета метод init получает значение параметра - имя звукового файла, и если этот параметр задан в документе HTML, записывает полученное имя в поле m_ClipName:

    param = getParameter(PARAM_ClipName);
    
    if(param != null)
    
      m_ClipName = param;

    Далее создаются три кнопки, управляющие звучанием аплета:

    btPlay = new Button("Play");
    
    btLoop = new Button("Loop");
    
    btStop = new Button("Stop");

    Кнопка Stop блокируется, так как на данный момент проигрывание еще не запущено:

    btStop.disable();

    Для блокирования вызывается метод disable, определенный в классе Button.

    Подготовленные таким образом кнопки добавляются в окно аплета:

    add(btPlay);
    
    add(btLoop);
    
    add(btStop);

    Последнее, что делает метод init перед тем как возвратить управление, это получение ссылки на интерфейс AudioClip:

    auClip = this.getAudioClip(
    
      getCodeBase(),m_ClipName);

    Адрес URL каталога, в котором расположен аплет, определяется с помощью метода getCodeBase, о котором мы говорили в предыдущей главе.

    Метод action

    Метод action получает управление, когда пользователь нажимает на одну из кнопок, расположенных в окне аплета. В зависимости от того, какая именно кнопка была нажата, выполняются различные действия.

    Если пользователь нажал кнопку Play, вызывается метод play для запуска однократного проигрывания звукового файла:

    auClip.play();
    
    btStop.enable();

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

    В том случае, когда пользователь нажал кнопку Loop, вызывается метод loop, запусчкающий проигрывание звукового файла в цикле:

    auClip.loop();
    
    fLoopPlay = true;
    
    btStop.enable();

    После запуска устанавливается флаг fLoopPlay и разблокируется кнопка Stop.

    И, наконец, если пользователь нажимает кнопку Stop, выполняется остановка проигрывания методом stop:

    auClip.stop();
    
    fLoopPlay = false;
    
    btStop.disable();

    Флаг fLoopPlay сбрасывается, после чего кнопка Stop блокируется.

    Метод start

    Метод start получает управление при первом запуска аплета, а также когда страница документа появляется вновь после того как пользователь временно переходил к просмотру другой страницы.

    Наша реализация метода start возобновляет циклическое проигрывание, если оно выполнялось, когда пользователь покинул страницу с аплетом:

    if(fLoopPlay)
    
      auClip.loop();

    Метод stop

    Если пользователь запустил проигрывание звукового файла в цикле, а затем перешел к просмотру другой страницы, метод stop останавливает циклическое проигрывание:

    if(fLoopPlay)
    
      auClip.stop();

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



Java | Продукты и решения | Технологии | Сервис и обучение
О компании | Партнеры | Новости | Поиск
Sun Microsystems Inc. Corporate Information Our partners News and Events Search on site Java Computing Products and Solutions Technologies and Researches Education and Service Content
Используются технологии uCoz