diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100251.html | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100251.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100251.html | 413 |
1 files changed, 413 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100251.html b/Master/Reference Architectures and Patterns/hjp5/html/k100251.html new file mode 100644 index 0000000..aa4c6de --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100251.html @@ -0,0 +1,413 @@ +<html>
+<head>
+<title>
+Handbuch der Java-Programmierung, 5. Auflage
+</title>
+</head>
+<body>
+<a name="startofbody"></a>
+<script language="JavaScript" src="hjp4lib.js">
+</script>
+<script language="JavaScript">
+installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100248.html;106,k100250.html;107,k100252.html;108,k100254.html");
+</script>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100248.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100250.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100252.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100254.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">Kapitel 39 - Applets I
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="appletsound"></a>
+<h2>39.3 Die <a name="ixa102931">Ausgabe von Sound</a><a name="ixa102932"></a>
+</h2>
+<hr>
+<ul>
+<li><a href="k100251.html#appletsound">39.3 Die Ausgabe von Sound</a>
+<ul>
+<li><a href="k100251.html#sectlevel3id039003001">39.3.1 Soundausgabe in Applets</a>
+<li><a href="k100251.html#sectlevel3id039003002">39.3.2 Soundausgabe in Applikationen</a>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel3id039003001"></a>
+<h3>39.3.1 Soundausgabe in Applets </h3>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Das JDK bietet auch einige Möglichkeiten, Sound auszugeben. Hierbei
+muss klar zwischen dem JDK 1.2 und seinen Vorgängern unterschieden
+werden. Während das JDK 1.2 die Soundausgabe sowohl Applikationen
+als auch Applets ermöglicht, war diese vorher nur für Applets
+möglich. Dabei war die Ausgabe auf gesampelte Sounds beschränkt,
+die im <a name="ixa102933">AU-Format</a><a name="ixa102934"></a> vorliegen
+mußten. Das AU-Format stammt aus der SUN-Welt und legt ein Sample
+im Format 8 Bit Mono, Sampling-Rate 8 kHz, µ-law-Kompression
+ab. Seit dem JDK 1.2 werden dagegen auch die Sample-Formate <a name="ixa102935">WAV</a>
+<a name="ixa102936"></a> und <a name="ixa102937">AIFF</a> <a name="ixa102938"></a>
+sowie die Midi-Formate <a name="ixa102939"></a> <i>Typ 0</i> und <i>Typ
+1</i><a name="ixa102940"></a> und <a name="ixa102941">RMF</a> unterstützt.
+Zudem gibt es einige Shareware- oder Freeware-Tools, die zwischen
+verschiedenen Formaten konvertieren können (z.B. <a name="ixa102942">CoolEdit</a>
+oder <a name="ixa102943">GoldWave</a>). Mit dem JDK 1.3 wurden die
+Fähigkeiten erneut erweitert. Mit der nun im JDK enthaltenen
+Sound-Engine kann Musik nicht nur wiedergegeben, sondern auch aufgenommen
+und bearbeitet werden, und es ist möglich, Zusatzgeräte
+wie Mixer, Synthesizer oder andere Audiogeräte anzusteuern.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
+<tr>
+<td><font color="#FFFFFF"> JDK1.1-6.0 </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Die Ausgabe von Sound ist denkbar einfach und kann auf zwei unterschiedliche
+Arten erfolgen. Zum einen stellt die Klasse <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>
+die Methode <a name="ixa102944"><a href="index_p.html#ixb102180"><font color=#000080><tt>play</tt></font></a></a>
+zur Verfügung, mit der eine Sound-Datei geladen und abgespielt
+werden kann:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void play(URL url)
+
+public void play(URL url, String name)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/applet/Applet.html" onClick="this.href=getApiDoc('java.applet.Applet')"><font color="#660066" size=-1>java.applet.Applet</font></a></td>
+</tr>
+</table>
+
+<p>
+Hierbei kann entweder der <i>URL</i> einer Sound-Datei (siehe nächster
+Abschnitt) oder die Kombination von Verzeichnis-URL und Dateinamen
+angegeben werden. Üblicherweise wird zur Übergabe des Verzeichnis-URLs
+eine der <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>-Methoden
+<a name="ixa102945"><a href="index_g.html#ixb102181"><font color=#000080><tt>getCodeBase</tt></font></a></a>
+oder <a name="ixa102946"><a href="index_g.html#ixb102182"><font color=#000080><tt>getDocumentBase</tt></font></a></a>
+verwendet. Diese liefern einen URL des Verzeichnisses, aus dem das
+Applet gestartet wurde bzw. in dem die aktuelle HTML-Seite liegt:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public URL getCodeBase()
+
+public URL getDocumentBase()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/applet/Applet.html" onClick="this.href=getApiDoc('java.applet.Applet')"><font color="#660066" size=-1>java.applet.Applet</font></a></td>
+</tr>
+</table>
+
+<p>
+Der Nachteil dieser Vorgehensweise ist, dass die Sound-Datei bei jedem
+Aufruf neu geladen werden muss. In der zweiten Variante wird zunächst
+durch einen Aufruf von <a name="ixa102947"><a href="index_g.html#ixb102183"><font color=#000080><tt>getAudioClip</tt></font></a></a>
+ein Objekt der Klasse <a name="ixa102948"><a href="index_a.html#ixb102184"><font color=#000080><tt>AudioClip</tt></font></a></a>
+beschafft, das dann beliebig oft abgespielt werden kann:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public getAudioClip(URL url, String name)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/applet/Applet.html" onClick="this.href=getApiDoc('java.applet.Applet')"><font color="#660066" size=-1>java.applet.Applet</font></a></td>
+</tr>
+</table>
+
+<p>
+<a href="index_a.html#ixb102184"><font color=#000080><tt>AudioClip</tt></font></a>
+stellt die drei Methoden <a name="ixa102944"><a href="index_p.html#ixb102180"><font color=#000080><tt>play</tt></font></a></a>,
+<a name="ixa102949"><a href="index_l.html#ixb102185"><font color=#000080><tt>loop</tt></font></a></a>
+und <a name="ixa102950"><a href="index_s.html#ixb101115"><font color=#000080><tt>stop</tt></font></a></a>
+zur Verfügung:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void play()
+
+public void loop()
+
+public void stop()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/applet/AudioClip.html" onClick="this.href=getApiDoc('java.applet.AudioClip')"><font color="#660066" size=-1>java.applet.AudioClip</font></a></td>
+</tr>
+</table>
+
+<p>
+<a href="index_p.html#ixb102180"><font color=#000080><tt>play</tt></font></a>
+startet die zuvor geladene Sound-Datei und spielt sie genau einmal
+ab. <a href="index_l.html#ixb102185"><font color=#000080><tt>loop</tt></font></a>
+startet sie ebenfalls, spielt den Sound in einer Endlosschleife aber
+immer wieder ab. Durch Aufruf von <a href="index_s.html#ixb101115"><font color=#000080><tt>stop</tt></font></a>
+kann diese Schleife beendet werden. Es ist auch möglich, mehr
+als einen Sound gleichzeitig abzuspielen. So kann beispielsweise eine
+Hintergrundmelodie in einer Schleife immer wieder abgespielt werden,
+ohne dass die Ausgabe von zusätzlichen Vordergrund-Sounds beeinträchtigt
+würde.
+
+<p>
+Das folgende Beispiel ist eine neue Variante des »Hello, World«-Programms.
+Anstatt der textuellen Ausgabe stellt das Applet zwei Buttons zur
+Verfügung, mit denen die Worte »Hello« und »World«
+abgespielt werden können:
+<p>
+<a name="imageid039003"></a>
+<img src="images/HWApplet.gif">
+<p>
+
+<p><i>
+Abbildung 39.3: Das sprechende »Hello, World«-Programm</i></p>
+
+<p>
+Hier ist der Sourcecode des Programms:
+<a name="hwapplet"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* HWApplet.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">import</font> java.awt.*;
+<font color="#555555">004 </font><font color="#0000AA">import</font> java.awt.event.*;
+<font color="#555555">005 </font><font color="#0000AA">import</font> java.applet.*;
+<font color="#555555">006 </font>
+<font color="#555555">007 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> HWApplet
+<font color="#555555">008 </font><font color="#0000AA">extends</font> Applet
+<font color="#555555">009 </font><font color="#0000AA">implements</font> ActionListener
+<font color="#555555">010 </font>{
+<font color="#555555">011 </font> Button hello;
+<font color="#555555">012 </font> Button world;
+<font color="#555555">013 </font> AudioClip helloClip;
+<font color="#555555">014 </font> AudioClip worldClip;
+<font color="#555555">015 </font>
+<font color="#555555">016 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> init()
+<font color="#555555">017 </font> {
+<font color="#555555">018 </font> <font color="#006699">super</font>.init();
+<font color="#555555">019 </font> setLayout(<font color="#0000AA">new</font> FlowLayout());
+<font color="#555555">020 </font> hello = <font color="#0000AA">new</font> Button(<font color="#0000FF">"Hello"</font>);
+<font color="#555555">021 </font> hello.addActionListener(<font color="#006699">this</font>);
+<font color="#555555">022 </font> add(hello);
+<font color="#555555">023 </font> world = <font color="#0000AA">new</font> Button(<font color="#0000FF">"World"</font>);
+<font color="#555555">024 </font> world.addActionListener(<font color="#006699">this</font>);
+<font color="#555555">025 </font> add(world);
+<font color="#555555">026 </font> helloClip = getAudioClip(getCodeBase(),<font color="#0000FF">"hello.au"</font>);
+<font color="#555555">027 </font> worldClip = getAudioClip(getCodeBase(),<font color="#0000FF">"world.au"</font>);
+<font color="#555555">028 </font> }
+<font color="#555555">029 </font>
+<font color="#555555">030 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> actionPerformed(ActionEvent event)
+<font color="#555555">031 </font> {
+<font color="#555555">032 </font> String cmd = event.getActionCommand();
+<font color="#555555">033 </font> <font color="#0000AA">if</font> (cmd.equals(<font color="#0000FF">"Hello"</font>)) {
+<font color="#555555">034 </font> helloClip.play();
+<font color="#555555">035 </font> } <font color="#0000AA">else</font> <font color="#0000AA">if</font> (cmd.equals(<font color="#0000FF">"World"</font>)) {
+<font color="#555555">036 </font> worldClip.play();
+<font color="#555555">037 </font> }
+<font color="#555555">038 </font> }
+<font color="#555555">039 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/HWApplet.java"><font color="#000055" size=-1>HWApplet.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 39.7: Das sprechende »Hello, World«</i></p>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Eine HTML-Datei <font color="#660099">HWApplet.html</font> zum Aufruf
+dieses Applets findet sich in <a href="k100323.html#jarwerkzeug">Abschnitt 51.6</a>.
+Sie wird dort als Beispiel für die Einbindung von Applets in
+jar-Dateien verwendet.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel3id039003002"></a>
+<h3>39.3.2 Soundausgabe in Applikationen </h3>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Seit dem JDK 1.2 kann nicht nur in Applets, sondern auch in Applikationen
+Sound ausgegeben werden. Dazu bietet die Klasse <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>
+eine statische Methode <a name="ixa102951"><a href="index_n.html#ixb102186"><font color=#000080><tt>newAudioClip</tt></font></a></a>:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public static AudioClip newAudioClip(URL url)
+</pre>
+</font>
+</td>
+</tr>
+</table>
+</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
+<tr>
+<td><font color="#FFFFFF"> JDK1.1-6.0 </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Da es sich um eine Klassenmethode handelt, kann sie auch außerhalb
+eines Applets aufgerufen werden. Das folgende Beispiel zeigt ein einfaches
+Programm, das in der Kommandozeile den URL einer Sounddatei erwartet
+und diese dann maximal 10 Sekunden lang abspielt:
+<a name="listingid039008"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* PlaySound.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">import</font> java.net.*;
+<font color="#555555">004 </font><font color="#0000AA">import</font> java.applet.*;
+<font color="#555555">005 </font>
+<font color="#555555">006 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> PlaySound
+<font color="#555555">007 </font>{
+<font color="#555555">008 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">009 </font> {
+<font color="#555555">010 </font> <font color="#0000AA">if</font> (args.length >= 1) {
+<font color="#555555">011 </font> <font color="#0000AA">try</font> {
+<font color="#555555">012 </font> URL url = <font color="#0000AA">new</font> URL(args[0]);
+<font color="#555555">013 </font> AudioClip clip = Applet.newAudioClip(url);
+<font color="#555555">014 </font> clip.play();
+<font color="#555555">015 </font> <font color="#0000AA">try</font> {
+<font color="#555555">016 </font> Thread.sleep(10000);
+<font color="#555555">017 </font> } <font color="#0000AA">catch</font> (InterruptedException e) {
+<font color="#555555">018 </font> }
+<font color="#555555">019 </font> System.exit(0);
+<font color="#555555">020 </font> } <font color="#0000AA">catch</font> (MalformedURLException e) {
+<font color="#555555">021 </font> System.out.println(e.toString());
+<font color="#555555">022 </font> }
+<font color="#555555">023 </font> }
+<font color="#555555">024 </font> }
+<font color="#555555">025 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/PlaySound.java"><font color="#000055" size=-1>PlaySound.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 39.8: Soundausgabe aus einer Applikation</i></p>
+
+<p>
+Das Programm kann beispielsweise dazu verwendet werden, einige der
+Standard-Sounddateien unter Windows abzuspielen:
+<font color="#333300">
+<pre>
+java PlaySound file:///c:/windows\media\passport.mid
+
+java PlaySound file:///c:/windows\media\dermic~1.wav
+</pre>
+</font>
+<hr>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
+Wesley, Version 5.0.1
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100248.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100250.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100252.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100254.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">© 1998, 2007 Guido Krüger & Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>
|
