annotate src/audio/macosx/SDL_coreaudio.c @ 3790:8f8209f8da6d SDL-ryan-multiple-audio-device

Added audio device enumeration for 1.3.
author Ryan C. Gordon <icculus@icculus.org>
date Tue, 03 Oct 2006 20:07:50 +0000
parents 7006b176ef4f
children 866c310e2cb5
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);
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
208 static const char *COREAUDIO_GetAudioDevice(int index, int iscapture);
3784
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
209 static int COREAUDIO_OpenAudio(_THIS, const char *devname, int iscapture);
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
210 static void COREAUDIO_WaitAudio(_THIS);
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
211 static void COREAUDIO_PlayAudio(_THIS);
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
212 static Uint8 *COREAUDIO_GetAudioBuf(_THIS);
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
213 static void COREAUDIO_CloseAudio(_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 {
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
221 return (1);
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;
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
229 impl->GetAudioDevice = COREAUDIO_GetAudioDevice;
3784
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
230 impl->OpenAudio = COREAUDIO_OpenAudio;
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
231 impl->WaitAudio = COREAUDIO_WaitAudio;
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
232 impl->PlayAudio = COREAUDIO_PlayAudio;
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
233 impl->GetAudioBuf = COREAUDIO_GetAudioBuf;
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
234 impl->CloseAudio = COREAUDIO_CloseAudio;
3787
8d74a4721ca9 Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents: 3786
diff changeset
235 impl->Deinitialize = COREAUDIO_Deinitialize;
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
236
3784
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
237 return 1;
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
238 }
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
239
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
240 AudioBootStrap COREAUDIO_bootstrap = {
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
241 "coreaudio", "Mac OS X CoreAudio",
3784
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
242 COREAUDIO_Available, COREAUDIO_Init
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
243 };
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
244
3787
8d74a4721ca9 Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents: 3786
diff changeset
245
3790
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
246 static int
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
247 COREAUDIO_DetectDevices(int iscapture)
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
248 {
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
249 if (iscapture) {
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
250 build_device_list(1, &inputDevices, &inputDeviceCount);
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
251 return inputDeviceCount;
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
252 } else {
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
253 build_device_list(0, &outputDevices, &outputDeviceCount);
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
254 return outputDeviceCount;
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 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
258 }
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
259
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 static const char *
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
262 COREAUDIO_GetAudioDevice(int index, int iscapture)
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
263 {
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
264 if ((iscapture) && (index < inputDeviceCount)) {
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
265 return inputDevices[index].name;
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
266 } else if ((!iscapture) && (index < outputDeviceCount)) {
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
267 return outputDevices[index].name;
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
268 }
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 SDL_SetError("No such device");
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
271 return NULL;
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
272 }
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
273
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
274
3787
8d74a4721ca9 Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents: 3786
diff changeset
275 static void
8d74a4721ca9 Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents: 3786
diff changeset
276 COREAUDIO_Deinitialize(void)
8d74a4721ca9 Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents: 3786
diff changeset
277 {
3790
8f8209f8da6d Added audio device enumeration for 1.3.
Ryan C. Gordon <icculus@icculus.org>
parents: 3788
diff changeset
278 free_device_lists();
3787
8d74a4721ca9 Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents: 3786
diff changeset
279 }
8d74a4721ca9 Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents: 3786
diff changeset
280
8d74a4721ca9 Added deinitialize hook.
Ryan C. Gordon <icculus@icculus.org>
parents: 3786
diff changeset
281
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
282 /* 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
283 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
284 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
285 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
286 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
287 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
288 AudioBufferList *ioDataList)
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
289 {
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
290 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
291 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
292 UInt32 remaining, len;
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
293 void *ptr;
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
294
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
295 /*
b70f4e9291bb High level now lets user select a specific audio device with an environment
Ryan C. Gordon <icculus@icculus.org>
parents: 3785
diff changeset
296 * !!! 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
297 * 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
298 */
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
299 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
300 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
301 }
da2ea0694d11 Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents: 3784
diff changeset
302
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
303 /* 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
304 if (!this->enabled || this->paused) {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
305 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
306 return 0;
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
307 }
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
308
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
309 /* 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
310 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
311 */
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 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
314 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
315 */
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
316
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
317 remaining = ioData->mDataByteSize;
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
318 ptr = ioData->mData;
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
319 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
320 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
321 /* 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
322 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
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_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
325 (*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
326 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
327 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
328 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
329 }
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
330
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 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
332 if (len > remaining)
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
333 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
334 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
335 (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
336 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
337 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
338 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
339 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
340 }
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
341
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
342 return 0;
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
343 }
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
344
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
345 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
346 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
347 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
348 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
349 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
350 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
351 {
da2ea0694d11 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 //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
353 // !!! 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
354 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
355 }
da2ea0694d11 Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents: 3784
diff changeset
356
da2ea0694d11 Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents: 3784
diff changeset
357
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
358 /* Dummy functions -- we don't use thread-based audio */
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
359 void
3784
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
360 COREAUDIO_WaitAudio(_THIS)
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
361 {
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
362 return;
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
363 }
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
364
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
365 void
3784
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
366 COREAUDIO_PlayAudio(_THIS)
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
367 {
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
368 return;
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
369 }
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
370
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
371 Uint8 *
3784
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
372 COREAUDIO_GetAudioBuf(_THIS)
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
373 {
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
374 return (NULL);
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
375 }
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
376
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
377 void
3784
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
378 COREAUDIO_CloseAudio(_THIS)
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
379 {
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
380 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
381 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
382 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
383 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
384 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
385 const int iscapture = this->hidden->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
386 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
387 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
388 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
389
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 /* 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
391 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
392
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
393 /* 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
394 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
395 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
396 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
397 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
398
da2ea0694d11 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 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
400
da2ea0694d11 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 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
402 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
403 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
404 }
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
405 }
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
406
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
407
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
408 #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
409 if (result != noErr) { \
3784
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
410 COREAUDIO_CloseAudio(this); \
2017
df06e6eb65c6 Fixed macosx audio initialization (passed wrong struct to CoreAudio).
Ryan C. Gordon <icculus@icculus.org>
parents: 2016
diff changeset
411 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
412 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
413 }
da2ea0694d11 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 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
416 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
417 {
da2ea0694d11 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 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
419 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
420 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
421 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
422 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
423
da2ea0694d11 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 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
425 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
426 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
427 ((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
428 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
429
da2ea0694d11 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 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
431 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
432 } 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
433 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
434 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
435 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
436 }
da2ea0694d11 Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents: 3784
diff changeset
437 }
da2ea0694d11 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
da2ea0694d11 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 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
440 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
441 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
442 &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
443 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
444
da2ea0694d11 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 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
446 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
447 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
448 }
da2ea0694d11 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
da2ea0694d11 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 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
451 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
452 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
453
da2ea0694d11 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 /* 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
455 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
456 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
457 return 0;
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
458 }
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
459
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
460 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
461 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
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
da2ea0694d11 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 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
466 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
467 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
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 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
470 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
471 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
472 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
473 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
474 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
475 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
476 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
477 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
478 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
479 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
480
da2ea0694d11 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 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
482 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
483 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
484 }
da2ea0694d11 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
da2ea0694d11 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 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
487 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
488 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
489 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
490
da2ea0694d11 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 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
492 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
493 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
494 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
495 }
da2ea0694d11 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
da2ea0694d11 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 /* 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
498 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
499 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
500
da2ea0694d11 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 // !!! 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
502 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
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 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
505 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
506 &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
507 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
508
da2ea0694d11 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 // !!! 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
510 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
511 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
512 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
513 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
514 &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
515 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
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 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
518 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
519 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
520 &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
521 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
522 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
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 /* 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
525 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
526 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
527 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
528 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
529
da2ea0694d11 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 /* 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
531 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
532 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
533 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
534 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
535 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
536 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
537 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
538
da2ea0694d11 Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents: 3784
diff changeset
539 /* 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
540 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
541
da2ea0694d11 Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents: 3784
diff changeset
542 /* 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
543 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
544 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
545
da2ea0694d11 Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents: 3784
diff changeset
546 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
547 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
548
da2ea0694d11 Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents: 3784
diff changeset
549 /* 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
550 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
551 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
552
da2ea0694d11 Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents: 3784
diff changeset
553 /* 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
554 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
555 }
da2ea0694d11 Ton of work on CoreAudio driver for new 1.3 features...most of the
Ryan C. Gordon <icculus@icculus.org>
parents: 3784
diff changeset
556
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
557
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
558 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
559 COREAUDIO_OpenAudio(_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
560 {
2016
72fa74928062 Compile fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 2003
diff changeset
561 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
562 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
563 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
564
3784
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
565 /* 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
566 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
567 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
568 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
569 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
570 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
571 }
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
572 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
573
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
574 this->hidden->isCapture = iscapture;
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
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
576 /* Setup a AudioStreamBasicDescription with the requested format */
2043
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
577 memset(&strdesc, '\0', sizeof(AudioStreamBasicDescription));
2016
72fa74928062 Compile fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 2003
diff changeset
578 strdesc.mFormatID = kAudioFormatLinearPCM;
72fa74928062 Compile fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 2003
diff changeset
579 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
580 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
581 strdesc.mSampleRate = this->spec.freq;
2016
72fa74928062 Compile fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 2003
diff changeset
582 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
583
2003
506851d3efa4 Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
584 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
585 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
586 /* 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
587 switch (test_format) {
2043
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
588 case AUDIO_U8:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
589 case AUDIO_S8:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
590 case AUDIO_U16LSB:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
591 case AUDIO_S16LSB:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
592 case AUDIO_U16MSB:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
593 case AUDIO_S16MSB:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
594 case AUDIO_S32LSB:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
595 case AUDIO_S32MSB:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
596 case AUDIO_F32LSB:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
597 case AUDIO_F32MSB:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
598 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
599 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
600 if (SDL_AUDIO_ISBIGENDIAN(this->spec.format))
2043
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
601 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
602
3784
37c9c4590689 First batch of heavy lifting on supporting multiple audio devices at once.
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
603 if (SDL_AUDIO_ISFLOAT(this->spec.format))
2043
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
604 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
605 else if (SDL_AUDIO_ISSIGNED(this->spec.format))
2043
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
606 strdesc.mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger;
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
607 break;
2003
506851d3efa4 Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
608 }
506851d3efa4 Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
609 }
506851d3efa4 Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
610
2043
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2017
diff changeset
611 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
612 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
613 return 0;
2003
506851d3efa4 Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
614 }
506851d3efa4 Mac OS X audio backend now supports int32/float32.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
615
2016
72fa74928062 Compile fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 2003
diff changeset
616 strdesc.mBytesPerFrame =
72fa74928062 Compile fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 2003
diff changeset
617 strdesc.mBitsPerChannel * strdesc.mChannelsPerFrame / 8;
72fa74928062 Compile fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 2003
diff changeset
618 strdesc.mBytesPerPacket =
72fa74928062 Compile fixes.
Ryan C. Gordon <icculus@icculus.org>
parents: 2003
diff changeset
619 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
620
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
621 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
622 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
623 }
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
624
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
625 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
626 }
935
f8d5ddc7aef1 Audio improvements from Max Horn, including a new CoreAudio driver for MacOSX
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
627
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
628 /* vi: set ts=4 sw=4 expandtab: */