| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
 

Оглавление

Звук в аплетах 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

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz