UNPKG

epubjs

Version:

Render ePub documents in the browser, across many devices

59 lines (54 loc) 8.38 kB
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head><title>Simple Audio</title><link rel="stylesheet" href="core.css" type="text/css"/><meta name="generator" content="DocBook XSL Stylesheets V1.74.0"/></head><body><div class="sect1" title="Simple Audio"><div class="titlepage"><div><div><h1 class="title"><a id="learnjava3-CHP-21-SECT-5"/>Simple Audio</h1></div></div></div><p><a id="I_indexterm21_id819290" class="indexterm"/> <a id="I_indexterm21_id819296" class="indexterm"/> <a id="idx11131" class="indexterm"/> <a id="idx11139" class="indexterm"/> <a id="I_indexterm21_id819325" class="indexterm"/>Now we’ll turn from images and open our ears to audio. Java Sound API provides fine-grained support for the creation and manipulation of both sampled audio and MIDI music, as well as control over MIDI devices. There’s space here only to scratch the surface by examining how to play simple sampled sound and MIDI music files. With the standard Java Sound support bundled with Java, you can play a wide range of file formats including AIFF, AU, Windows WAV, standard <a id="I_indexterm21_id819337" class="indexterm"/>MIDI files, and <a id="I_indexterm21_id819343" class="indexterm"/><a id="I_indexterm21_id819349" class="indexterm"/>Rich Music Format (RMF) files. We’ll discuss other formats (such as MP3) along with video media in the next section.</p><p><a id="I_indexterm21_id819359" class="indexterm"/> <code class="literal">java.applet.AudioClip</code> defines the simplest interface for objects that can play sound. An object that implements <code class="literal">AudioClip</code> can be told to <a id="I_indexterm21_id819377" class="indexterm"/><code class="literal">play()</code> its sound data, <a id="I_indexterm21_id819387" class="indexterm"/><code class="literal">stop()</code> playing the sound, or <a id="I_indexterm21_id819398" class="indexterm"/><code class="literal">loop()</code> continuously.</p><p>The <code class="literal">Applet</code> class provides a handy static method, <a id="I_indexterm21_id819417" class="indexterm"/><code class="literal">newAudioClip()</code>, that retrieves sounds from files or over the network. (And there is no reason we can’t use it in a non-applet application.) The method takes an absolute or relative URL to specify where the audio file is located and returns an <code class="literal">AudioClip</code>. The following application, <code class="literal">NoisyButton</code>, gives a simple example:</p><a id="I_21_tt1204"/><pre class="programlisting"> <code class="c1">//file: NoisyButton.java</code> <code class="kn">import</code> <code class="nn">java.applet.*</code><code class="o">;</code> <code class="kn">import</code> <code class="nn">java.awt.*</code><code class="o">;</code> <code class="kn">import</code> <code class="nn">java.awt.event.*</code><code class="o">;</code> <code class="kn">import</code> <code class="nn">javax.swing.*</code><code class="o">;</code> <code class="kd">public</code> <code class="kd">class</code> <code class="nc">NoisyButton</code> <code class="o">{</code> <code class="kd">public</code> <code class="kd">static</code> <code class="kt">void</code> <code class="nf">main</code><code class="o">(</code><code class="n">String</code><code class="o">[]</code> <code class="n">args</code><code class="o">)</code> <code class="kd">throws</code> <code class="n">Exception</code> <code class="o">{</code> <code class="n">JFrame</code> <code class="n">frame</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JFrame</code><code class="o">(</code><code class="s">"NoisyButton"</code><code class="o">);</code> <code class="n">java</code><code class="o">.</code><code class="na">io</code><code class="o">.</code><code class="na">File</code> <code class="n">file</code> <code class="o">=</code> <code class="k">new</code> <code class="n">java</code><code class="o">.</code><code class="na">io</code><code class="o">.</code><code class="na">File</code><code class="o">(</code> <code class="n">args</code><code class="o">[</code><code class="mi">0</code><code class="o">]</code> <code class="o">);</code> <code class="kd">final</code> <code class="n">AudioClip</code> <code class="n">sound</code> <code class="o">=</code> <code class="n">Applet</code><code class="o">.</code><code class="na">newAudioClip</code><code class="o">(</code><code class="n">file</code><code class="o">.</code><code class="na">toURL</code><code class="o">());</code> <code class="n">JButton</code> <code class="n">button</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JButton</code><code class="o">(</code><code class="s">"Woof!"</code><code class="o">);</code> <code class="n">button</code><code class="o">.</code><code class="na">addActionListener</code><code class="o">(</code><code class="k">new</code> <code class="n">ActionListener</code><code class="o">()</code> <code class="o">{</code> <code class="kd">public</code> <code class="kt">void</code> <code class="nf">actionPerformed</code><code class="o">(</code><code class="n">ActionEvent</code> <code class="n">e</code><code class="o">)</code> <code class="o">{</code> <code class="n">sound</code><code class="o">.</code><code class="na">play</code><code class="o">();</code> <code class="o">}</code> <code class="o">});</code> <code class="n">Container</code> <code class="n">content</code> <code class="o">=</code> <code class="n">frame</code><code class="o">.</code><code class="na">getContentPane</code><code class="o">();</code> <code class="n">content</code><code class="o">.</code><code class="na">setBackground</code><code class="o">(</code><code class="n">Color</code><code class="o">.</code><code class="na">pink</code><code class="o">);</code> <code class="n">content</code><code class="o">.</code><code class="na">setLayout</code><code class="o">(</code><code class="k">new</code> <code class="n">GridBagLayout</code><code class="o">());</code> <code class="n">content</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">button</code><code class="o">);</code> <code class="n">frame</code><code class="o">.</code><code class="na">setVisible</code><code class="o">(</code><code class="kc">true</code><code class="o">);</code> <code class="n">frame</code><code class="o">.</code><code class="na">setSize</code><code class="o">(</code><code class="mi">200</code><code class="o">,</code> <code class="mi">200</code><code class="o">);</code> <code class="n">frame</code><code class="o">.</code><code class="na">setDefaultCloseOperation</code><code class="o">(</code> <code class="n">JFrame</code><code class="o">.</code><code class="na">EXIT_ON_CLOSE</code> <code class="o">);</code> <code class="n">frame</code><code class="o">.</code><code class="na">setVisible</code><code class="o">(</code><code class="kc">true</code><code class="o">);</code> <code class="o">}</code> <code class="o">}</code></pre><p>Run <code class="literal">NoisyButton</code>, passing the name of the audio file you wish to use as the argument. (We’ve supplied one called <span class="emphasis"><em>bark.aiff</em></span>.)</p><p><code class="literal">NoisyButton</code> retrieves the <code class="literal">AudioClip</code> using a <code class="literal">File</code> and the <a id="I_indexterm21_id819488" class="indexterm"/><code class="literal">toURL()</code>method to reference it as a URL. When the button is pushed, we call the <code class="literal">play()</code> method of the <code class="literal">AudioClip</code> to start things. After that, it plays to completion unless we call the <code class="literal">stop()</code> method to interrupt it.</p><p>This interface is simple, but there is a lot of machinery behind the scenes. Next, we’ll look at the Java Media Framework, which supports a wider range of media types.<a id="I_indexterm21_id819522" class="indexterm"/><a id="I_indexterm21_id819529" class="indexterm"/></p></div></body></html>