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
|
/**
* Copyright (c) 2010-2023 JogAmp Community. All rights reserved.
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* -Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* -Redistribution in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of Sun Microsystems, Inc. or the names of contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* This software is provided "AS IS," without a warranty of any kind.
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
* NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS
* LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A
* RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
* IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT
* OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
* ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS
* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* You acknowledge that this software is not designed or intended for use in the
* design, construction, operation or maintenance of any nuclear facility.
*/
package com.jogamp.openal.sound3d;
import com.jogamp.openal.*;
import com.jogamp.openal.util.ALHelpers;
/**
* This class provides a handle to a specific audio device.
*
* @author Athomas Goldberg, Sven Gothel, et al.
*/
public final class Device {
private String name;
private ALCdevice alDev;
/**
* Create a new device by {@link #open()}'ing the named audio device.
*
* @param deviceName The specified device name, null for default.
*/
public Device(final String deviceName) {
this.name = deviceName;
this.alDev = null;
open();
}
/** Returns the device name. */
public String getName() { return name; }
/** Returns the OpenAL {@link ALCdevice}. */
public ALCdevice getALDevice() { return alDev; }
/** Return {@link ALC#alcGetError(ALCdevice)} */
public int getALCError() {
return AudioSystem3D.alc.alcGetError(alDev);
}
/** Returns whether {@link #getALDevice()} is open and valid, i.e. not null, e.g. not {@link #close()}. */
public boolean isValid() { return null != alDev; }
/**
* Returns whether `ALC_EXT_debug` is available for this device.
* <p>
* This context may or may not be current.
* </p>
* @see Context#isDebugAvail()
*/
public boolean isDebugAvail() {
return AudioSystem3D.alc.alcIsExtensionPresent(alDev, ALHelpers.ALC_EXT_debug);
}
/**
* Opens the device if not yet opened
* @return true if already open or newly opened
* @see #isValid()
* @see #clone()
*/
public boolean open() {
if( null == alDev ) {
alDev = AudioSystem3D.alc.alcOpenDevice(name);
if( null != alDev && null == name ) {
name = AudioSystem3D.alc.alcGetString(alDev, ALCConstants.ALC_DEVICE_SPECIFIER);
}
}
return isValid();
}
/**
* closes the device, freeing its resources.
*/
public void close() {
if( null != alDev ) {
AudioSystem3D.alc.alcCloseDevice(alDev);
alDev = null;
}
}
@Override
public String toString() {
final String alStr = null != alDev ? "0x"+Integer.toHexString(alDev.hashCode()) : "null";
return "ALDevice[this 0x"+Integer.toHexString(hashCode())+", name '"+name+"', alDev "+alStr+"]";
}
}
|