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"> 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="k100307.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100307.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100309.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100312.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 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ähigkeiten, die weit
über die in <a href="k100251.html#appletsound">Abschnitt 39.3</a>
erläuterten Möglichkeiten hinausgehen. Mit Hilfe des Sound-APIs
können Samples abgespielt oder aufgenommen werden. Es können
Midi-Dateien erzeugt oder wiedergegeben werden, und es ist möglich,
direkt auf angeschlossene oder eingebaute Tonerzeuger zuzugreifen.
Das API abstrahiert alle für das Erzeugen und Bearbeiten von
Sounds wesentlichen Konzepte und unterstü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ü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ötig ist.
<li>Andererseits kann das API wenig Annahmen über standardmäßig
verfügbare Hardware machen. Soll beispielsweise eine Flötenmelodie
erklingen, muss das Programm erst einmal herausfinden, ob ein Synthesizer
eingebaut oder über einen der Midi-Ports erreichbar ist. Zudem
muss er das entsprechende Instrument zur Verfügung stellen kö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ändnis für viele der auf diesem Gebiet relevanten Konzepte.
Das API ist sehr eng an Begriffe angelehnt, die direkte Pendants in
der elektronischen oder elektronikunterstü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ählen. Erforderliche Begriffe werden, wo nötig, lediglich
kurz erklärt, denn wir gehen davon aus, dass beim Leser bereits
ein Grundstock an einschlägigen Grundkenntnissen vorhanden ist.
Oder wenigstens die Bereitschaft, sich diese während des Lesens
und Experimentierens anzueignen. Auch werden wir die APIs nur ansatzweise
erläutern, denn mehr ist aus Platzgründen nicht möglich.
<p>
Die Beispielprogramme wurden so gewä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ügung. Damit werden
die wichtigsten Standardfälle beim Einsatz von Sound abgedeckt.
<p>
Das Sound-API dient als Basis für alle Arten von Sound-Support
in Java. Seine Anwendungsgebiete reichen von interaktiven Applikationen
oder Spielen mit Sound-Unterstützung über Media-Player und
Musik-Tools bis hin zu Telefonie- und Konferenz-Applikationen. Des
weiteren ist das Sound-API Basis hö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ü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ürlich nur dann,
wenn auf dem Computer, an dem sie nachvollzogen werden sollen, eine
geeignete (und vom Java-Sound-API unterstü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ügbar, erklingt beim Ausführen der Beispielprogramme
entweder gar nichts (oder das Falsche) oder es wird eine Ausnahme
ausgelö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"> Warnung </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"> 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="k100307.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100307.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100309.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100312.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>
|