summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100308.html
blob: e9654e5e1b92243aaaa0a8e0418107bb76fcc679 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<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,k100307.html;106,k100307.html;107,k100309.html;108,k100312.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">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100307.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100307.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100309.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100312.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">Kapitel 49 - Sound
</table>
<hr>


<!-- Section -->
<a name="sectlevel2id049001"></a>
<h2>49.1 Grundlagen und Konzepte </h2>
<hr>
<ul>
<li><a href="k100308.html#sectlevel2id049001">49.1 Grundlagen und Konzepte</a>
</ul>
<hr>

<p>
Seit der Version 1.3 besitzt das JDK Sound-F&auml;higkeiten, die weit
&uuml;ber die in <a href="k100251.html#appletsound">Abschnitt 39.3</a>
erl&auml;uterten M&ouml;glichkeiten hinausgehen. Mit Hilfe des Sound-APIs
k&ouml;nnen Samples abgespielt oder aufgenommen werden. Es k&ouml;nnen
Midi-Dateien erzeugt oder wiedergegeben werden, und es ist m&ouml;glich,
direkt auf angeschlossene oder eingebaute Tonerzeuger zuzugreifen.
Das API abstrahiert alle f&uuml;r das Erzeugen und Bearbeiten von
Sounds wesentlichen Konzepte und unterst&uuml;tzt die Erkennung und
Verwendung unterschiedlichster Hardware-Komponenten. 

<p>
Das Sound-API ist allerdings nicht ganz leicht zu bedienen und wird
in der Literatur sehr stiefm&uuml;tterlich behandelt. Die Schwierigkeiten
haben mehrere Ursachen: 
<ul>
<li>Einerseits handelt es sich um ein Low-Level-API, also eines, bei
dem schon zur Erzielung relativ einfacher Effekte recht viel Programmieraufwand
n&ouml;tig ist.
<li>Andererseits kann das API wenig Annahmen &uuml;ber standardm&auml;&szlig;ig
verf&uuml;gbare Hardware machen. Soll beispielsweise eine Fl&ouml;tenmelodie
erklingen, muss das Programm erst einmal herausfinden, ob ein Synthesizer
eingebaut oder &uuml;ber einen der Midi-Ports erreichbar ist. Zudem
muss er das entsprechende Instrument zur Verf&uuml;gung stellen k&ouml;nnen.
Erst dann kann dieser konfiguriert und mit den entsprechenden Tonerzeugungs-Kommandos
beschickt werden.
<li>Zu guter Letzt erfordert der Umgang mit dem Sound-API ein grundlegendes
Verst&auml;ndnis f&uuml;r viele der auf diesem Gebiet relevanten Konzepte.
Das API ist sehr eng an Begriffe angelehnt, die direkte Pendants in
der elektronischen oder elektronikunterst&uuml;tzten Musik haben.
Ohne ein Basiswissen in Themenbereichen wie <a name="ixa103526"><i>Samples</i></a>,
<a name="ixa103527"><i>Midi</i></a>, <a name="ixa103528"><i>Tracks</i></a>,
<a name="ixa103529"><i>Timecodes</i></a>, <a name="ixa103530"><i>Sequencer</i></a>,
<a name="ixa103531"><i>Synthesizer</i></a> <a name="ixa103532"><i>Soundbanks</i></a>
oder <a name="ixa103533"><i>Mixer</i></a> sind die korrespondierenden
Klassen und Interfaces schwerlich korrekt zu verwenden.
</ul>

<p>
Wir wollen deshalb in diesem Kapitel einen sehr pragmatischen Ansatz
w&auml;hlen. Erforderliche Begriffe werden, wo n&ouml;tig, lediglich
kurz erkl&auml;rt, denn wir gehen davon aus, dass beim Leser bereits
ein Grundstock an einschl&auml;gigen Grundkenntnissen vorhanden ist.
Oder wenigstens die Bereitschaft, sich diese w&auml;hrend des Lesens
und Experimentierens anzueignen. Auch werden wir die APIs nur ansatzweise
erl&auml;utern, denn mehr ist aus Platzgr&uuml;nden nicht m&ouml;glich.

<p>
Die Beispielprogramme wurden so gew&auml;hlt, dass sie einen unmittelbaren
Praxisnutzen haben. Sie stellen leicht einzusetzende Routinen zum
Abspielen von Samples sowie zum Erzeugen einfacher Midi-Sequenzen
und zum Abspielen von Midi-Files zur Verf&uuml;gung. Damit werden
die wichtigsten Standardf&auml;lle beim Einsatz von Sound abgedeckt.

<p>
Das Sound-API dient als Basis f&uuml;r alle Arten von Sound-Support
in Java. Seine Anwendungsgebiete reichen von interaktiven Applikationen
oder Spielen mit Sound-Unterst&uuml;tzung &uuml;ber Media-Player und
Musik-Tools bis hin zu Telefonie- und Konferenz-Applikationen. Des
weiteren ist das Sound-API Basis h&ouml;herer Programmierschnittstellen,
wie etwa des <a name="ixa103534"><i>Java Media Framework</i></a>,
das eine Schnittstelle zum Abspielen und Erzeugen einer ganzen Reihe
von Audio- und Videoformaten zur Verf&uuml;gung stellt. 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Die Beispiele in diesem Buch funktionieren nat&uuml;rlich nur dann,
wenn auf dem Computer, an dem sie nachvollzogen werden sollen, eine
geeignete (und vom Java-Sound-API unterst&uuml;tzte) Sound-Hardware
vorhanden ist. Dabei handelt es sich typischerweise um eine Sound-Karte,
es kann aber (wenigstens beim Midi-API) auch eine Midi-Schnittstelle
mit angeschlossenem Synthesizer verwendet werden. Ist eine solche
Hardware nicht verf&uuml;gbar, erklingt beim Ausf&uuml;hren der Beispielprogramme
entweder gar nichts (oder das Falsche) oder es wird eine Ausnahme
ausgel&ouml;st.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
<tr>
<td><font color="#FFFFFF">&nbsp;Warnung&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
</tr>
</table>
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</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="k100307.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100307.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100309.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100312.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>