Mercurial > sdl-ios-xcode
annotate src/audio/macosx/SDL_coreaudio.c @ 3798:c8b3d3d13ed1 SDL-ryan-multiple-audio-device
Audio bootstraps can now specify that a driver is only to be used if
explicitly requested (for things like the "disk" driver that is always
available but you would never want to default to using).
Trimmed out code that can be handled by stubs in the core. The "dummy" driver
is pretty damned small now. :)
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Wed, 04 Oct 2006 21:27:53 +0000 |
parents | b19680c84cdf |
children | f424927138ff |
rev | line source |
---|---|
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
936
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
936
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
936
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
936
diff
changeset
|
13 Lesser General Public License for more details. |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
936
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
936
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
936
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
22 #include "SDL_config.h" |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
24 #include <CoreAudio/CoreAudio.h> |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 #include <AudioUnit/AudioUnit.h> |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 #include "SDL_audio.h" |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
28 #include "../SDL_audio_c.h" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
29 #include "../SDL_sysaudio.h" |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 #include "SDL_coreaudio.h" |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 |
3790
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
32 #define DEBUG_COREAUDIO 0 |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
34 typedef struct COREAUDIO_DeviceList |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
35 { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
36 AudioDeviceID id; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
37 const char *name; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
38 } COREAUDIO_DeviceList; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
39 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
40 static COREAUDIO_DeviceList *inputDevices = NULL; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
41 static int inputDeviceCount = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
42 static COREAUDIO_DeviceList *outputDevices = NULL; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
43 static int outputDeviceCount = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
44 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
45 static void |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
46 free_device_list(COREAUDIO_DeviceList **devices, int *devCount) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
47 { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
48 if (*devices) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
49 int i = *devCount; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
50 while (i--) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
51 SDL_free((void *) (*devices)[i].name); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
52 SDL_free(*devices); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
53 *devices = NULL; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
54 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
55 *devCount = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
56 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
57 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
58 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
59 static void |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
60 build_device_list(int iscapture, COREAUDIO_DeviceList **devices, int *devCount) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
61 { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
62 Boolean outWritable = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
63 OSStatus result = noErr; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
64 UInt32 size = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
65 AudioDeviceID *devs = NULL; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
66 UInt32 i = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
67 UInt32 max = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
68 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
69 free_device_list(devices, devCount); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
70 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
71 result = AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
72 &size, &outWritable); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
73 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
74 if (result != kAudioHardwareNoError) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
75 return; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
76 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
77 devs = (AudioDeviceID *) alloca(size); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
78 if (devs == NULL) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
79 return; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
80 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
81 max = size / sizeof (AudioDeviceID); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
82 *devices = (COREAUDIO_DeviceList *) SDL_malloc(max * sizeof (**devices)); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
83 if (*devices == NULL) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
84 return; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
85 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
86 result = AudioHardwareGetProperty(kAudioHardwarePropertyDevices, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
87 &size, devs); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
88 if (result != kAudioHardwareNoError) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
89 return; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
90 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
91 for (i = 0; i < max; i++) { |
3788
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
92 CFStringRef cfstr = NULL; |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
93 char *ptr = NULL; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
94 AudioDeviceID dev = devs[i]; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
95 AudioBufferList *buflist = NULL; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
96 int usable = 0; |
3788
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
97 CFIndex len = 0; |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
98 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
99 result = AudioDeviceGetPropertyInfo(dev, 0, iscapture, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
100 kAudioDevicePropertyStreamConfiguration, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
101 &size, &outWritable); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
102 if (result != noErr) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
103 continue; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
104 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
105 buflist = (AudioBufferList *) SDL_malloc(size); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
106 if (buflist == NULL) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
107 continue; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
108 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
109 result = AudioDeviceGetProperty(dev, 0, iscapture, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
110 kAudioDevicePropertyStreamConfiguration, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
111 &size, buflist); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
112 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
113 if (result == noErr) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
114 UInt32 j; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
115 for (j = 0; j < buflist->mNumberBuffers; j++) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
116 if (buflist->mBuffers[j].mNumberChannels > 0) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
117 usable = 1; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
118 break; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
119 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
120 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
121 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
122 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
123 SDL_free(buflist); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
124 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
125 if (!usable) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
126 continue; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
127 |
3788
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
128 size = sizeof (CFStringRef); |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
129 result = AudioDeviceGetProperty(dev, 0, iscapture, |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
130 kAudioObjectPropertyName, |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
131 &size, &cfstr); |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
132 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
133 if (result != kAudioHardwareNoError) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
134 continue; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
135 |
3788
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
136 len = CFStringGetMaximumSizeForEncoding(CFStringGetLength(cfstr), |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
137 kCFStringEncodingUTF8); |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
138 |
3788
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
139 ptr = (char *) SDL_malloc(len + 1); |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
140 usable = ( (ptr != NULL) && |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
141 (CFStringGetCString(cfstr,ptr,len+1,kCFStringEncodingUTF8)) ); |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
142 |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
143 CFRelease(cfstr); |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
144 |
3788
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
145 if (usable) { |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
146 len = strlen(ptr); |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
147 /* Some devices have whitespace at the end...trim it. */ |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
148 while ((len > 0) && (ptr[len-1] == ' ')) { |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
149 len--; |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
150 } |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
151 usable = (len > 0); |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
152 } |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
153 |
3788
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
154 if (!usable) { |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
155 SDL_free(ptr); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
156 } else { |
3788
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
157 ptr[len] = '\0'; |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
158 |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
159 #if DEBUG_COREAUDIO |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
160 printf("COREAUDIO: Found %s device #%d: '%s' (devid %d)\n", |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
161 ((iscapture) ? "capture" : "output"), |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
162 (int) *devCount, ptr, (int) dev); |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
163 #endif |
7006b176ef4f
More work on the 1.3 CoreAudio code.
Ryan C. Gordon <icculus@icculus.org>
parents:
3787
diff
changeset
|
164 |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
165 (*devices)[*devCount].id = dev; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
166 (*devices)[*devCount].name = ptr; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
167 (*devCount)++; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
168 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
169 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
170 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
171 |
3790
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
172 static inline void |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
173 build_device_lists(void) |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
174 { |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
175 build_device_list(0, &outputDevices, &outputDeviceCount); |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
176 build_device_list(1, &inputDevices, &inputDeviceCount); |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
177 } |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
178 |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
179 |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
180 static inline void |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
181 free_device_lists(void) |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
182 { |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
183 free_device_list(&outputDevices, &outputDeviceCount); |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
184 free_device_list(&inputDevices, &inputDeviceCount); |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
185 } |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
186 |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
187 |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
188 static int |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
189 find_device_id(const char *devname, int iscapture, AudioDeviceID *id) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
190 { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
191 int i = ((iscapture) ? inputDeviceCount : outputDeviceCount); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
192 COREAUDIO_DeviceList *devs = ((iscapture) ? inputDevices : outputDevices); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
193 while (i--) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
194 if (SDL_strcmp(devname, devs->name) == 0) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
195 *id = devs->id; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
196 return 1; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
197 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
198 devs++; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
199 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
200 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
201 return 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
202 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
203 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
204 |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
205 /* Audio driver functions */ |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
206 |
3790
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
207 static int COREAUDIO_DetectDevices(int iscapture); |
3792
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
208 static const char *COREAUDIO_GetDeviceName(int index, int iscapture); |
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
209 static int COREAUDIO_OpenDevice(_THIS, const char *devname, int iscapture); |
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
210 static void COREAUDIO_WaitDevice(_THIS); |
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
211 static void COREAUDIO_PlayDevice(_THIS); |
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
212 static Uint8 *COREAUDIO_GetDeviceBuf(_THIS); |
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
213 static void COREAUDIO_CloseDevice(_THIS); |
3787
8d74a4721ca9
Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents:
3786
diff
changeset
|
214 static void COREAUDIO_Deinitialize(void); |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 /* Audio driver bootstrap functions */ |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
218 static int |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
219 COREAUDIO_Available(void) |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
220 { |
3798
c8b3d3d13ed1
Audio bootstraps can now specify that a driver is only to be used if
Ryan C. Gordon <icculus@icculus.org>
parents:
3796
diff
changeset
|
221 return 1; /* always available on Mac OS X. */ |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
222 } |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
223 |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
224 static int |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
225 COREAUDIO_Init(SDL_AudioDriverImpl *impl) |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 { |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
227 /* Set the function pointers */ |
3790
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
228 impl->DetectDevices = COREAUDIO_DetectDevices; |
3792
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
229 impl->GetDeviceName = COREAUDIO_GetDeviceName; |
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
230 impl->OpenDevice = COREAUDIO_OpenDevice; |
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
231 impl->CloseDevice = COREAUDIO_CloseDevice; |
3787
8d74a4721ca9
Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents:
3786
diff
changeset
|
232 impl->Deinitialize = COREAUDIO_Deinitialize; |
3796
b19680c84cdf
Bunch of 1.3 audio cleanups to remove FIXMEs, get driver specific crap out of
Ryan C. Gordon <icculus@icculus.org>
parents:
3795
diff
changeset
|
233 impl->ProvidesOwnCallbackThread = 1; |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
234 return 1; |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 } |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
237 AudioBootStrap COREAUDIO_bootstrap = { |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 "coreaudio", "Mac OS X CoreAudio", |
3798
c8b3d3d13ed1
Audio bootstraps can now specify that a driver is only to be used if
Ryan C. Gordon <icculus@icculus.org>
parents:
3796
diff
changeset
|
239 COREAUDIO_Available, COREAUDIO_Init, 0 |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 }; |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 |
3787
8d74a4721ca9
Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents:
3786
diff
changeset
|
242 |
3790
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
243 static int |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
244 COREAUDIO_DetectDevices(int iscapture) |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
245 { |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
246 if (iscapture) { |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
247 build_device_list(1, &inputDevices, &inputDeviceCount); |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
248 return inputDeviceCount; |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
249 } else { |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
250 build_device_list(0, &outputDevices, &outputDeviceCount); |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
251 return outputDeviceCount; |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
252 } |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
253 |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
254 return 0; /* shouldn't ever hit this. */ |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
255 } |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
256 |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
257 |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
258 static const char * |
3792
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
259 COREAUDIO_GetDeviceName(int index, int iscapture) |
3790
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
260 { |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
261 if ((iscapture) && (index < inputDeviceCount)) { |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
262 return inputDevices[index].name; |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
263 } else if ((!iscapture) && (index < outputDeviceCount)) { |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
264 return outputDevices[index].name; |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
265 } |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
266 |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
267 SDL_SetError("No such device"); |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
268 return NULL; |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
269 } |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
270 |
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
271 |
3787
8d74a4721ca9
Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents:
3786
diff
changeset
|
272 static void |
8d74a4721ca9
Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents:
3786
diff
changeset
|
273 COREAUDIO_Deinitialize(void) |
8d74a4721ca9
Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents:
3786
diff
changeset
|
274 { |
3790
8f8209f8da6d
Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents:
3788
diff
changeset
|
275 free_device_lists(); |
3787
8d74a4721ca9
Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents:
3786
diff
changeset
|
276 } |
8d74a4721ca9
Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents:
3786
diff
changeset
|
277 |
8d74a4721ca9
Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents:
3786
diff
changeset
|
278 |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 /* The CoreAudio callback */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
280 static OSStatus |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
281 outputCallback(void *inRefCon, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
282 AudioUnitRenderActionFlags *ioActionFlags, |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
283 const AudioTimeStamp * inTimeStamp, |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
284 UInt32 inBusNumber, UInt32 inNumberFrames, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
285 AudioBufferList *ioDataList) |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
287 SDL_AudioDevice *this = (SDL_AudioDevice *) inRefCon; |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
288 AudioBuffer *ioData = &ioDataList->mBuffers[0]; |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 UInt32 remaining, len; |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 void *ptr; |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 |
3786
b70f4e9291bb
High level now lets user select a specific audio device with an environment
Ryan C. Gordon <icculus@icculus.org>
parents:
3785
diff
changeset
|
292 /* |
b70f4e9291bb
High level now lets user select a specific audio device with an environment
Ryan C. Gordon <icculus@icculus.org>
parents:
3785
diff
changeset
|
293 * !!! FIXME: I'm not sure if you can ever have more than one |
b70f4e9291bb
High level now lets user select a specific audio device with an environment
Ryan C. Gordon <icculus@icculus.org>
parents:
3785
diff
changeset
|
294 * buffer, or what this signifies, or what to do with it... |
b70f4e9291bb
High level now lets user select a specific audio device with an environment
Ryan C. Gordon <icculus@icculus.org>
parents:
3785
diff
changeset
|
295 */ |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
296 if (ioDataList->mNumberBuffers != 1) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
297 return noErr; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
298 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
299 |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 /* Only do anything if audio is enabled and not paused */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
301 if (!this->enabled || this->paused) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
302 SDL_memset(ioData->mData, this->spec.silence, ioData->mDataByteSize); |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 return 0; |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
305 |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 /* No SDL conversion should be needed here, ever, since we accept |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 any input format in OpenAudio, and leave the conversion to CoreAudio. |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 */ |
1338
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
309 /* |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
310 assert(!this->convert.needed); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
311 assert(this->spec.channels == ioData->mNumberChannels); |
1338
604d73db6802
Removed uses of stdlib.h and string.h
Sam Lantinga <slouken@libsdl.org>
parents:
1336
diff
changeset
|
312 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
313 |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
314 remaining = ioData->mDataByteSize; |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 ptr = ioData->mData; |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 while (remaining > 0) { |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
317 if (this->hidden->bufferOffset >= this->hidden->bufferSize) { |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 /* Generate the data */ |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
319 SDL_memset(this->hidden->buffer, this->spec.silence, |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
320 this->hidden->bufferSize); |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 SDL_mutexP(this->mixer_lock); |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
322 (*this->spec.callback) (this->spec.userdata, this->hidden->buffer, |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
323 this->hidden->bufferSize); |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 SDL_mutexV(this->mixer_lock); |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
325 this->hidden->bufferOffset = 0; |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
327 |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
328 len = this->hidden->bufferSize - this->hidden->bufferOffset; |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 if (len > remaining) |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 len = remaining; |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
331 SDL_memcpy(ptr, |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
332 (char *) this->hidden->buffer + this->hidden->bufferOffset, |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
333 len); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
334 ptr = (char *) ptr + len; |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 remaining -= len; |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
336 this->hidden->bufferOffset += len; |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
338 |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 return 0; |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
340 } |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
342 static OSStatus |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
343 inputCallback(void *inRefCon, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
344 AudioUnitRenderActionFlags *ioActionFlags, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
345 const AudioTimeStamp * inTimeStamp, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
346 UInt32 inBusNumber, UInt32 inNumberFrames, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
347 AudioBufferList *ioData) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
348 { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
349 //err = AudioUnitRender(afr->fAudioUnit, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, afr->fAudioBuffer); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
350 // !!! FIXME: write me! |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
351 return noErr; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
352 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
353 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
354 |
3795
589bc3d060cd
More 1.3 audio work...moved dsp and dma drivers over to new model. Untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
3792
diff
changeset
|
355 static void |
3792
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
356 COREAUDIO_CloseDevice(_THIS) |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
357 { |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
358 if (this->hidden != NULL) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
359 OSStatus result = noErr; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
360 AURenderCallbackStruct callback; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
361 const AudioUnitElement output_bus = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
362 const AudioUnitElement input_bus = 1; |
3796
b19680c84cdf
Bunch of 1.3 audio cleanups to remove FIXMEs, get driver specific crap out of
Ryan C. Gordon <icculus@icculus.org>
parents:
3795
diff
changeset
|
363 const int iscapture = this->iscapture; |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
364 const AudioUnitElement bus = ((iscapture) ? input_bus : output_bus); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
365 const AudioUnitScope scope = ((iscapture) ? kAudioUnitScope_Output : |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
366 kAudioUnitScope_Input); |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
367 |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
368 /* stop processing the audio unit */ |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
369 result = AudioOutputUnitStop(this->hidden->audioUnit); |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
370 |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
371 /* Remove the input callback */ |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
372 memset(&callback, '\0', sizeof (AURenderCallbackStruct)); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
373 result = AudioUnitSetProperty(this->hidden->audioUnit, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
374 kAudioUnitProperty_SetRenderCallback, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
375 scope, bus, &callback, sizeof (callback)); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
376 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
377 CloseComponent(this->hidden->audioUnit); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
378 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
379 SDL_free(this->hidden->buffer); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
380 SDL_free(this->hidden); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
381 this->hidden = NULL; |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
382 } |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
383 } |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
384 |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
385 |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
386 #define CHECK_RESULT(msg) \ |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
387 if (result != noErr) { \ |
3792
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
388 COREAUDIO_CloseDevice(this); \ |
2017
df06e6eb65c6
Fixed macosx audio initialization (passed wrong struct to CoreAudio).
Ryan C. Gordon <icculus@icculus.org>
parents:
2016
diff
changeset
|
389 SDL_SetError("CoreAudio error (%s): %d", msg, (int) result); \ |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
390 return 0; \ |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
391 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
392 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
393 static int |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
394 find_device_by_name(_THIS, const char *devname, int iscapture) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
395 { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
396 AudioDeviceID devid = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
397 OSStatus result = noErr; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
398 UInt32 size = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
399 UInt32 alive = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
400 pid_t pid = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
401 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
402 if (devname == NULL) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
403 size = sizeof (AudioDeviceID); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
404 const AudioHardwarePropertyID propid = |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
405 ((iscapture) ? kAudioHardwarePropertyDefaultInputDevice : |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
406 kAudioHardwarePropertyDefaultOutputDevice); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
407 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
408 result = AudioHardwareGetProperty(propid, &size, &devid); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
409 CHECK_RESULT("AudioHardwareGetProperty (default device)"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
410 } else { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
411 if (!find_device_id(devname, iscapture, &devid)) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
412 SDL_SetError("CoreAudio: No such audio device."); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
413 return 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
414 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
415 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
416 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
417 size = sizeof (alive); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
418 result = AudioDeviceGetProperty(devid, 0, iscapture, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
419 kAudioDevicePropertyDeviceIsAlive, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
420 &size, &alive); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
421 CHECK_RESULT("AudioDeviceGetProperty (kAudioDevicePropertyDeviceIsAlive)"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
422 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
423 if (!alive) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
424 SDL_SetError("CoreAudio: requested device exists, but isn't alive."); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
425 return 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
426 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
427 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
428 size = sizeof (pid); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
429 result = AudioDeviceGetProperty(devid, 0, iscapture, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
430 kAudioDevicePropertyHogMode, &size, &pid); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
431 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
432 /* some devices don't support this property, so errors are fine here. */ |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
433 if ((result == noErr) && (pid != -1)) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
434 SDL_SetError("CoreAudio: requested device is being hogged."); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
435 return 0; |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
436 } |
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
437 |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
438 this->hidden->deviceID = devid; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
439 return 1; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
440 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
441 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
442 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
443 static int |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
444 prepare_audiounit(_THIS, const char *devname, int iscapture, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
445 const AudioStreamBasicDescription *strdesc) |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
446 { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
447 OSStatus result = noErr; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
448 AURenderCallbackStruct callback; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
449 ComponentDescription desc; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
450 Component comp = NULL; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
451 int use_system_device = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
452 UInt32 enableIO = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
453 const AudioUnitElement output_bus = 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
454 const AudioUnitElement input_bus = 1; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
455 const AudioUnitElement bus = ((iscapture) ? input_bus : output_bus); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
456 const AudioUnitScope scope = ((iscapture) ? kAudioUnitScope_Output : |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
457 kAudioUnitScope_Input); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
458 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
459 if (!find_device_by_name(this, devname, iscapture)) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
460 SDL_SetError("Couldn't find requested CoreAudio device"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
461 return 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
462 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
463 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
464 memset(&desc, '\0', sizeof(ComponentDescription)); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
465 desc.componentType = kAudioUnitType_Output; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
466 desc.componentSubType = kAudioUnitSubType_HALOutput; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
467 desc.componentManufacturer = kAudioUnitManufacturer_Apple; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
468 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
469 comp = FindNextComponent(NULL, &desc); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
470 if (comp == NULL) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
471 SDL_SetError("Couldn't find requested CoreAudio component"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
472 return 0; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
473 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
474 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
475 /* Open & initialize the audio unit */ |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
476 result = OpenAComponent(comp, &this->hidden->audioUnit); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
477 CHECK_RESULT("OpenAComponent"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
478 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
479 // !!! FIXME: this is wrong? |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
480 enableIO = ((iscapture) ? 1 : 0); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
481 result = AudioUnitSetProperty(this->hidden->audioUnit, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
482 kAudioOutputUnitProperty_EnableIO, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
483 kAudioUnitScope_Input, input_bus, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
484 &enableIO, sizeof (enableIO)); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
485 CHECK_RESULT("AudioUnitSetProperty (kAudioUnitProperty_EnableIO input)"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
486 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
487 // !!! FIXME: this is wrong? |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
488 enableIO = ((iscapture) ? 0 : 1); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
489 result = AudioUnitSetProperty(this->hidden->audioUnit, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
490 kAudioOutputUnitProperty_EnableIO, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
491 kAudioUnitScope_Output, output_bus, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
492 &enableIO, sizeof (enableIO)); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
493 CHECK_RESULT("AudioUnitSetProperty (kAudioUnitProperty_EnableIO output)"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
494 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
495 result = AudioUnitSetProperty(this->hidden->audioUnit, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
496 kAudioOutputUnitProperty_CurrentDevice, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
497 kAudioUnitScope_Global, 0, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
498 &this->hidden->deviceID, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
499 sizeof (AudioDeviceID)); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
500 CHECK_RESULT("AudioUnitSetProperty (kAudioOutputUnitProperty_CurrentDevice)"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
501 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
502 /* Set the data format of the audio unit. */ |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
503 result = AudioUnitSetProperty(this->hidden->audioUnit, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
504 kAudioUnitProperty_StreamFormat, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
505 scope, bus, strdesc, sizeof (*strdesc)); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
506 CHECK_RESULT("AudioUnitSetProperty (kAudioUnitProperty_StreamFormat)"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
507 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
508 /* Set the audio callback */ |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
509 memset(&callback, '\0', sizeof (AURenderCallbackStruct)); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
510 callback.inputProc = ((iscapture) ? inputCallback : outputCallback); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
511 callback.inputProcRefCon = this; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
512 result = AudioUnitSetProperty(this->hidden->audioUnit, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
513 kAudioUnitProperty_SetRenderCallback, |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
514 scope, bus, &callback, sizeof (callback)); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
515 CHECK_RESULT("AudioUnitSetProperty (kAudioUnitProperty_SetInputCallback)"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
516 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
517 /* Calculate the final parameters for this audio specification */ |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
518 SDL_CalculateAudioSpec(&this->spec); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
519 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
520 /* Allocate a sample buffer */ |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
521 this->hidden->bufferOffset = this->hidden->bufferSize = this->spec.size; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
522 this->hidden->buffer = SDL_malloc(this->hidden->bufferSize); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
523 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
524 result = AudioUnitInitialize(this->hidden->audioUnit); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
525 CHECK_RESULT("AudioUnitInitialize"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
526 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
527 /* Finally, start processing of the audio unit */ |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
528 result = AudioOutputUnitStart(this->hidden->audioUnit); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
529 CHECK_RESULT("AudioOutputUnitStart"); |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
530 |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
531 /* We're running! */ |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
532 return 1; |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
533 } |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
534 |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
535 |
3795
589bc3d060cd
More 1.3 audio work...moved dsp and dma drivers over to new model. Untested!
Ryan C. Gordon <icculus@icculus.org>
parents:
3792
diff
changeset
|
536 static int |
3792
866c310e2cb5
Changed some 1.3 audio symbol names.
Ryan C. Gordon <icculus@icculus.org>
parents:
3790
diff
changeset
|
537 COREAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
538 { |
2016 | 539 AudioStreamBasicDescription strdesc; |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
540 SDL_AudioFormat test_format = SDL_FirstAudioFormat(this->spec.format); |
2003
506851d3efa4
Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
541 int valid_datatype = 0; |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
542 |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
543 /* Initialize all variables that we clean on shutdown */ |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
544 this->hidden = (struct SDL_PrivateAudioData *) |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
545 SDL_malloc((sizeof *this->hidden)); |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
546 if (this->hidden == NULL) { |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
547 SDL_OutOfMemory(); |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
548 return (0); |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
549 } |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
550 SDL_memset(this->hidden, 0, (sizeof *this->hidden)); |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
551 |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
552 /* Setup a AudioStreamBasicDescription with the requested format */ |
2043 | 553 memset(&strdesc, '\0', sizeof(AudioStreamBasicDescription)); |
2016 | 554 strdesc.mFormatID = kAudioFormatLinearPCM; |
555 strdesc.mFormatFlags = kLinearPCMFormatFlagIsPacked; | |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
556 strdesc.mChannelsPerFrame = this->spec.channels; |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
557 strdesc.mSampleRate = this->spec.freq; |
2016 | 558 strdesc.mFramesPerPacket = 1; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
559 |
2003
506851d3efa4
Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
560 while ((!valid_datatype) && (test_format)) { |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
561 this->spec.format = test_format; |
2003
506851d3efa4
Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
562 /* Just a list of valid SDL formats, so people don't pass junk here. */ |
506851d3efa4
Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
563 switch (test_format) { |
2043 | 564 case AUDIO_U8: |
565 case AUDIO_S8: | |
566 case AUDIO_U16LSB: | |
567 case AUDIO_S16LSB: | |
568 case AUDIO_U16MSB: | |
569 case AUDIO_S16MSB: | |
570 case AUDIO_S32LSB: | |
571 case AUDIO_S32MSB: | |
572 case AUDIO_F32LSB: | |
573 case AUDIO_F32MSB: | |
574 valid_datatype = 1; | |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
575 strdesc.mBitsPerChannel = SDL_AUDIO_BITSIZE(this->spec.format); |
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
576 if (SDL_AUDIO_ISBIGENDIAN(this->spec.format)) |
2043 | 577 strdesc.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian; |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
578 |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
579 if (SDL_AUDIO_ISFLOAT(this->spec.format)) |
2043 | 580 strdesc.mFormatFlags |= kLinearPCMFormatFlagIsFloat; |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
581 else if (SDL_AUDIO_ISSIGNED(this->spec.format)) |
2043 | 582 strdesc.mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; |
583 break; | |
2003
506851d3efa4
Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
584 } |
506851d3efa4
Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
585 } |
506851d3efa4
Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
586 |
2043 | 587 if (!valid_datatype) { /* shouldn't happen, but just in case... */ |
2003
506851d3efa4
Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
588 SDL_SetError("Unsupported audio format"); |
3784
37c9c4590689
First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents:
2043
diff
changeset
|
589 return 0; |
2003
506851d3efa4
Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
590 } |
506851d3efa4
Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
591 |
2016 | 592 strdesc.mBytesPerFrame = |
593 strdesc.mBitsPerChannel * strdesc.mChannelsPerFrame / 8; | |
594 strdesc.mBytesPerPacket = | |
595 strdesc.mBytesPerFrame * strdesc.mFramesPerPacket; | |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
596 |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
597 if (!prepare_audiounit(this, devname, iscapture, &strdesc)) { |
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
598 return 0; /* prepare_audiounit() will call SDL_SetError()... */ |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
599 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
600 |
3785
da2ea0694d11
Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents:
3784
diff
changeset
|
601 return 1; /* good to go. */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
602 } |
935
f8d5ddc7aef1
Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
603 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
604 /* vi: set ts=4 sw=4 expandtab: */ |