Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
565 lines (498 loc) · 17.5 KB

SDL_umsaudio.c

File metadata and controls

565 lines (498 loc) · 17.5 KB
 
Oct 17, 2006
Oct 17, 2006
1
2
3
4
5
/* I'm gambling no one uses this audio backend...we'll see who emails. :) */
#error this code has not been updated for SDL 1.3.
#error if no one emails icculus at icculus.org and tells him that this
#error code is needed, this audio backend will eventually be removed from SDL.
Apr 26, 2001
Apr 26, 2001
6
/*
Feb 1, 2006
Feb 1, 2006
7
8
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2006 Sam Lantinga
Apr 26, 2001
Apr 26, 2001
9
10
This library is free software; you can redistribute it and/or
Feb 1, 2006
Feb 1, 2006
11
modify it under the terms of the GNU Lesser General Public
Apr 26, 2001
Apr 26, 2001
12
License as published by the Free Software Foundation; either
Feb 1, 2006
Feb 1, 2006
13
version 2.1 of the License, or (at your option) any later version.
Apr 26, 2001
Apr 26, 2001
14
15
16
17
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Feb 1, 2006
Feb 1, 2006
18
Lesser General Public License for more details.
Apr 26, 2001
Apr 26, 2001
19
Feb 1, 2006
Feb 1, 2006
20
21
22
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Apr 26, 2001
Apr 26, 2001
23
24
25
26
27
28
Carsten Griwodz
griff@kom.tu-darmstadt.de
based on linux/SDL_dspaudio.c by Sam Lantinga
*/
Feb 21, 2006
Feb 21, 2006
29
#include "SDL_config.h"
Apr 26, 2001
Apr 26, 2001
30
31
32
33
34
35
36
37
38
39
40
41
42
/* Allow access to a raw mixing buffer */
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include "SDL_audio.h"
Feb 16, 2006
Feb 16, 2006
43
#include "../SDL_audio_c.h"
Apr 26, 2001
Apr 26, 2001
44
45
46
47
48
49
50
51
#include "SDL_umsaudio.h"
/* The tag name used by UMS audio */
#define UMS_DRIVER_NAME "ums"
#define DEBUG_AUDIO 1
/* Audio driver functions */
Jul 10, 2006
Jul 10, 2006
52
static int UMS_OpenAudio(_THIS, SDL_AudioSpec * spec);
Apr 26, 2001
Apr 26, 2001
53
54
55
56
static void UMS_PlayAudio(_THIS);
static Uint8 *UMS_GetAudioBuf(_THIS);
static void UMS_CloseAudio(_THIS);
Jul 10, 2006
Jul 10, 2006
57
58
static UMSAudioDevice_ReturnCode UADOpen(_THIS, string device, string mode,
long flags);
Apr 26, 2001
Apr 26, 2001
59
static UMSAudioDevice_ReturnCode UADClose(_THIS);
Jul 10, 2006
Jul 10, 2006
60
static UMSAudioDevice_ReturnCode UADGetBitsPerSample(_THIS, long *bits);
Apr 26, 2001
Apr 26, 2001
61
static UMSAudioDevice_ReturnCode UADSetBitsPerSample(_THIS, long bits);
Jul 10, 2006
Jul 10, 2006
62
63
static UMSAudioDevice_ReturnCode UADSetSampleRate(_THIS, long rate,
long *set_rate);
Apr 26, 2001
Apr 26, 2001
64
65
66
67
68
69
static UMSAudioDevice_ReturnCode UADSetByteOrder(_THIS, string byte_order);
static UMSAudioDevice_ReturnCode UADSetAudioFormatType(_THIS, string fmt);
static UMSAudioDevice_ReturnCode UADSetNumberFormat(_THIS, string fmt);
static UMSAudioDevice_ReturnCode UADInitialize(_THIS);
static UMSAudioDevice_ReturnCode UADStart(_THIS);
static UMSAudioDevice_ReturnCode UADStop(_THIS);
Jul 10, 2006
Jul 10, 2006
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
static UMSAudioDevice_ReturnCode UADSetTimeFormat(_THIS,
UMSAudioTypes_TimeFormat
fmt);
static UMSAudioDevice_ReturnCode UADWriteBuffSize(_THIS, long *buff_size);
static UMSAudioDevice_ReturnCode UADWriteBuffRemain(_THIS, long *buff_size);
static UMSAudioDevice_ReturnCode UADWriteBuffUsed(_THIS, long *buff_size);
static UMSAudioDevice_ReturnCode UADSetDMABufferSize(_THIS, long bytes,
long *bytes_ret);
static UMSAudioDevice_ReturnCode UADSetVolume(_THIS, long volume);
static UMSAudioDevice_ReturnCode UADSetBalance(_THIS, long balance);
static UMSAudioDevice_ReturnCode UADSetChannels(_THIS, long channels);
static UMSAudioDevice_ReturnCode UADPlayRemainingData(_THIS, boolean block);
static UMSAudioDevice_ReturnCode UADEnableOutput(_THIS, string output,
long *left_gain,
long *right_gain);
static UMSAudioDevice_ReturnCode UADWrite(_THIS, UMSAudioTypes_Buffer * buff,
long samples,
long *samples_written);
Apr 26, 2001
Apr 26, 2001
88
89
/* Audio driver bootstrap functions */
Jul 10, 2006
Jul 10, 2006
90
91
static int
Audio_Available(void)
Apr 26, 2001
Apr 26, 2001
92
93
94
95
{
return 1;
}
Jul 10, 2006
Jul 10, 2006
96
97
static void
Audio_DeleteDevice(_THIS)
Apr 26, 2001
Apr 26, 2001
98
{
Jul 10, 2006
Jul 10, 2006
99
100
101
102
103
if (this->hidden->playbuf._buffer)
SDL_free(this->hidden->playbuf._buffer);
if (this->hidden->fillbuf._buffer)
SDL_free(this->hidden->fillbuf._buffer);
_somFree(this->hidden->umsdev);
Feb 7, 2006
Feb 7, 2006
104
105
SDL_free(this->hidden);
SDL_free(this);
Apr 26, 2001
Apr 26, 2001
106
107
}
Jul 10, 2006
Jul 10, 2006
108
109
static SDL_AudioDevice *
Audio_CreateDevice(int devindex)
Apr 26, 2001
Apr 26, 2001
110
111
112
113
114
115
116
{
SDL_AudioDevice *this;
/*
* Allocate and initialize management storage and private management
* storage for this SDL-using library.
*/
Jul 10, 2006
Jul 10, 2006
117
118
this = (SDL_AudioDevice *) SDL_malloc(sizeof(SDL_AudioDevice));
if (this) {
Feb 7, 2006
Feb 7, 2006
119
SDL_memset(this, 0, (sizeof *this));
Jul 10, 2006
Jul 10, 2006
120
121
this->hidden = (struct SDL_PrivateAudioData *)
SDL_malloc((sizeof *this->hidden));
Apr 26, 2001
Apr 26, 2001
122
}
Jul 10, 2006
Jul 10, 2006
123
if ((this == NULL) || (this->hidden == NULL)) {
Apr 26, 2001
Apr 26, 2001
124
SDL_OutOfMemory();
Jul 10, 2006
Jul 10, 2006
125
if (this) {
Feb 7, 2006
Feb 7, 2006
126
SDL_free(this);
Apr 26, 2001
Apr 26, 2001
127
}
Jul 10, 2006
Jul 10, 2006
128
return (0);
Apr 26, 2001
Apr 26, 2001
129
}
Feb 7, 2006
Feb 7, 2006
130
SDL_memset(this->hidden, 0, (sizeof *this->hidden));
Apr 26, 2001
Apr 26, 2001
131
132
133
134
135
136
137
#ifdef DEBUG_AUDIO
fprintf(stderr, "Creating UMS Audio device\n");
#endif
/*
* Calls for UMS env initialization and audio object construction.
*/
Jul 10, 2006
Jul 10, 2006
138
this->hidden->ev = somGetGlobalEnvironment();
Apr 26, 2001
Apr 26, 2001
139
140
141
142
143
this->hidden->umsdev = UMSAudioDeviceNew();
/*
* Set the function pointers.
*/
Jul 10, 2006
Jul 10, 2006
144
145
146
this->OpenAudio = UMS_OpenAudio;
this->WaitAudio = NULL; /* we do blocking output */
this->PlayAudio = UMS_PlayAudio;
Apr 26, 2001
Apr 26, 2001
147
this->GetAudioBuf = UMS_GetAudioBuf;
Jul 10, 2006
Jul 10, 2006
148
149
this->CloseAudio = UMS_CloseAudio;
this->free = Audio_DeleteDevice;
Apr 26, 2001
Apr 26, 2001
150
151
152
153
154
155
156
157
#ifdef DEBUG_AUDIO
fprintf(stderr, "done\n");
#endif
return this;
}
AudioBootStrap UMS_bootstrap = {
Sep 24, 2006
Sep 24, 2006
158
UMS_DRIVER_NAME, "AIX UMS audio",
Oct 4, 2006
Oct 4, 2006
159
Audio_Available, Audio_CreateDevice, 0
Apr 26, 2001
Apr 26, 2001
160
161
};
Jul 10, 2006
Jul 10, 2006
162
163
static Uint8 *
UMS_GetAudioBuf(_THIS)
Apr 26, 2001
Apr 26, 2001
164
165
166
167
168
169
170
171
172
173
174
175
176
177
{
#ifdef DEBUG_AUDIO
fprintf(stderr, "enter UMS_GetAudioBuf\n");
#endif
return this->hidden->fillbuf._buffer;
/*
long bufSize;
UMSAudioDevice_ReturnCode rc;
rc = UADSetTimeFormat(this, UMSAudioTypes_Bytes );
rc = UADWriteBuffSize(this, bufSize );
*/
}
Jul 10, 2006
Jul 10, 2006
178
179
static void
UMS_CloseAudio(_THIS)
Apr 26, 2001
Apr 26, 2001
180
181
182
183
184
185
186
187
188
189
190
{
UMSAudioDevice_ReturnCode rc;
#ifdef DEBUG_AUDIO
fprintf(stderr, "enter UMS_CloseAudio\n");
#endif
rc = UADPlayRemainingData(this, TRUE);
rc = UADStop(this);
rc = UADClose(this);
}
Jul 10, 2006
Jul 10, 2006
191
192
static void
UMS_PlayAudio(_THIS)
Apr 26, 2001
Apr 26, 2001
193
194
{
UMSAudioDevice_ReturnCode rc;
Jul 10, 2006
Jul 10, 2006
195
196
197
long samplesToWrite;
long samplesWritten;
UMSAudioTypes_Buffer swpbuf;
Apr 26, 2001
Apr 26, 2001
198
199
200
201
#ifdef DEBUG_AUDIO
fprintf(stderr, "enter UMS_PlayAudio\n");
#endif
Jul 10, 2006
Jul 10, 2006
202
203
204
205
206
207
208
209
210
211
212
213
214
215
samplesToWrite =
this->hidden->playbuf._length / this->hidden->bytesPerSample;
do {
rc = UADWrite(this, &this->hidden->playbuf,
samplesToWrite, &samplesWritten);
samplesToWrite -= samplesWritten;
/* rc values: UMSAudioDevice_Success
* UMSAudioDevice_Failure
* UMSAudioDevice_Preempted
* UMSAudioDevice_Interrupted
* UMSAudioDevice_DeviceError
*/
if (rc == UMSAudioDevice_DeviceError) {
Apr 26, 2001
Apr 26, 2001
216
#ifdef DEBUG_AUDIO
Jul 10, 2006
Jul 10, 2006
217
fprintf(stderr, "Returning from PlayAudio with devices error\n");
Apr 26, 2001
Apr 26, 2001
218
#endif
Jul 10, 2006
Jul 10, 2006
219
220
return;
}
Apr 26, 2001
Apr 26, 2001
221
}
Jul 10, 2006
Jul 10, 2006
222
while (samplesToWrite > 0);
Apr 26, 2001
Apr 26, 2001
223
224
SDL_LockAudio();
Jul 10, 2006
Jul 10, 2006
225
226
227
228
SDL_memcpy(&swpbuf, &this->hidden->playbuf, sizeof(UMSAudioTypes_Buffer));
SDL_memcpy(&this->hidden->playbuf, &this->hidden->fillbuf,
sizeof(UMSAudioTypes_Buffer));
SDL_memcpy(&this->hidden->fillbuf, &swpbuf, sizeof(UMSAudioTypes_Buffer));
Apr 26, 2001
Apr 26, 2001
229
230
231
232
233
234
235
236
SDL_UnlockAudio();
#ifdef DEBUG_AUDIO
fprintf(stderr, "Wrote audio data and swapped buffer\n");
#endif
}
#if 0
Jul 10, 2006
Jul 10, 2006
237
238
239
240
241
242
243
// /* Set the DSP frequency */
// value = spec->freq;
// if ( ioctl(this->hidden->audio_fd, SOUND_PCM_WRITE_RATE, &value) < 0 ) {
// SDL_SetError("Couldn't set audio frequency");
// return(-1);
// }
// spec->freq = value;
Apr 26, 2001
Apr 26, 2001
244
245
#endif
Jul 10, 2006
Jul 10, 2006
246
247
static int
UMS_OpenAudio(_THIS, SDL_AudioSpec * spec)
Apr 26, 2001
Apr 26, 2001
248
{
Jul 10, 2006
Jul 10, 2006
249
250
251
252
253
254
255
256
char *audiodev = "/dev/paud0";
long lgain;
long rgain;
long outRate;
long outBufSize;
long bitsPerSample;
long samplesPerSec;
long success;
Aug 24, 2006
Aug 24, 2006
257
SDL_AudioFormat test_format;
Jul 10, 2006
Jul 10, 2006
258
int frag_spec;
Apr 26, 2001
Apr 26, 2001
259
260
261
262
263
UMSAudioDevice_ReturnCode rc;
#ifdef DEBUG_AUDIO
fprintf(stderr, "enter UMS_OpenAudio\n");
#endif
Jul 10, 2006
Jul 10, 2006
264
265
266
267
rc = UADOpen(this, audiodev, "PLAY", UMSAudioDevice_BlockingIO);
if (rc != UMSAudioDevice_Success) {
SDL_SetError("Couldn't open %s: %s", audiodev, strerror(errno));
return -1;
Apr 26, 2001
Apr 26, 2001
268
}
Jul 10, 2006
Jul 10, 2006
269
270
rc = UADSetAudioFormatType(this, "PCM");
Apr 26, 2001
Apr 26, 2001
271
272
273
success = 0;
test_format = SDL_FirstAudioFormat(spec->format);
Jul 10, 2006
Jul 10, 2006
274
do {
Apr 26, 2001
Apr 26, 2001
275
276
277
#ifdef DEBUG_AUDIO
fprintf(stderr, "Trying format 0x%4.4x\n", test_format);
#endif
Jul 10, 2006
Jul 10, 2006
278
switch (test_format) {
Apr 26, 2001
Apr 26, 2001
279
280
281
case AUDIO_U8:
/* from the mac code: better ? */
/* sample_bits = spec->size / spec->samples / spec->channels * 8; */
Jul 10, 2006
Jul 10, 2006
282
success = 1;
Apr 26, 2001
Apr 26, 2001
283
bitsPerSample = 8;
Jul 10, 2006
Jul 10, 2006
284
285
rc = UADSetSampleRate(this, spec->freq << 16, &outRate);
rc = UADSetByteOrder(this, "MSB"); /* irrelevant */
Apr 26, 2001
Apr 26, 2001
286
287
288
rc = UADSetNumberFormat(this, "UNSIGNED");
break;
case AUDIO_S8:
Jul 10, 2006
Jul 10, 2006
289
success = 1;
Apr 26, 2001
Apr 26, 2001
290
bitsPerSample = 8;
Jul 10, 2006
Jul 10, 2006
291
292
rc = UADSetSampleRate(this, spec->freq << 16, &outRate);
rc = UADSetByteOrder(this, "MSB"); /* irrelevant */
Apr 26, 2001
Apr 26, 2001
293
294
295
rc = UADSetNumberFormat(this, "SIGNED");
break;
case AUDIO_S16LSB:
Jul 10, 2006
Jul 10, 2006
296
success = 1;
Apr 26, 2001
Apr 26, 2001
297
bitsPerSample = 16;
Jul 10, 2006
Jul 10, 2006
298
rc = UADSetSampleRate(this, spec->freq << 16, &outRate);
Apr 26, 2001
Apr 26, 2001
299
300
301
302
rc = UADSetByteOrder(this, "LSB");
rc = UADSetNumberFormat(this, "SIGNED");
break;
case AUDIO_S16MSB:
Jul 10, 2006
Jul 10, 2006
303
success = 1;
Apr 26, 2001
Apr 26, 2001
304
bitsPerSample = 16;
Jul 10, 2006
Jul 10, 2006
305
rc = UADSetSampleRate(this, spec->freq << 16, &outRate);
Apr 26, 2001
Apr 26, 2001
306
307
308
309
rc = UADSetByteOrder(this, "MSB");
rc = UADSetNumberFormat(this, "SIGNED");
break;
case AUDIO_U16LSB:
Jul 10, 2006
Jul 10, 2006
310
success = 1;
Apr 26, 2001
Apr 26, 2001
311
bitsPerSample = 16;
Jul 10, 2006
Jul 10, 2006
312
rc = UADSetSampleRate(this, spec->freq << 16, &outRate);
Apr 26, 2001
Apr 26, 2001
313
314
315
316
rc = UADSetByteOrder(this, "LSB");
rc = UADSetNumberFormat(this, "UNSIGNED");
break;
case AUDIO_U16MSB:
Jul 10, 2006
Jul 10, 2006
317
success = 1;
Apr 26, 2001
Apr 26, 2001
318
bitsPerSample = 16;
Jul 10, 2006
Jul 10, 2006
319
rc = UADSetSampleRate(this, spec->freq << 16, &outRate);
Apr 26, 2001
Apr 26, 2001
320
321
322
323
324
325
rc = UADSetByteOrder(this, "MSB");
rc = UADSetNumberFormat(this, "UNSIGNED");
break;
default:
break;
}
Jul 10, 2006
Jul 10, 2006
326
if (!success) {
Apr 26, 2001
Apr 26, 2001
327
328
329
test_format = SDL_NextAudioFormat();
}
}
Jul 10, 2006
Jul 10, 2006
330
while (!success && test_format);
Apr 26, 2001
Apr 26, 2001
331
Jul 10, 2006
Jul 10, 2006
332
if (success == 0) {
Apr 26, 2001
Apr 26, 2001
333
334
335
336
337
338
SDL_SetError("Couldn't find any hardware audio formats");
return -1;
}
spec->format = test_format;
Jul 10, 2006
Jul 10, 2006
339
340
for (frag_spec = 0; (0x01 << frag_spec) < spec->size; ++frag_spec);
if ((0x01 << frag_spec) != spec->size) {
Apr 26, 2001
Apr 26, 2001
341
342
343
SDL_SetError("Fragment size must be a power of two");
return -1;
}
Jul 10, 2006
Jul 10, 2006
344
345
if (frag_spec > 2048)
frag_spec = 2048;
Apr 26, 2001
Apr 26, 2001
346
Jul 10, 2006
Jul 10, 2006
347
348
this->hidden->bytesPerSample = (bitsPerSample / 8) * spec->channels;
samplesPerSec = this->hidden->bytesPerSample * outRate;
Apr 26, 2001
Apr 26, 2001
349
Jul 10, 2006
Jul 10, 2006
350
this->hidden->playbuf._length = 0;
Apr 26, 2001
Apr 26, 2001
351
this->hidden->playbuf._maximum = spec->size;
Jul 10, 2006
Jul 10, 2006
352
353
this->hidden->playbuf._buffer = (unsigned char *) SDL_malloc(spec->size);
this->hidden->fillbuf._length = 0;
Apr 26, 2001
Apr 26, 2001
354
this->hidden->fillbuf._maximum = spec->size;
Jul 10, 2006
Jul 10, 2006
355
this->hidden->fillbuf._buffer = (unsigned char *) SDL_malloc(spec->size);
Apr 26, 2001
Apr 26, 2001
356
Jul 10, 2006
Jul 10, 2006
357
358
359
rc = UADSetBitsPerSample(this, bitsPerSample);
rc = UADSetDMABufferSize(this, frag_spec, &outBufSize);
rc = UADSetChannels(this, spec->channels); /* functions reduces to mono or stereo */
Apr 26, 2001
Apr 26, 2001
360
Jul 10, 2006
Jul 10, 2006
361
362
363
lgain = 100; /*maximum left input gain */
rgain = 100; /*maimum right input gain */
rc = UADEnableOutput(this, "LINE_OUT", &lgain, &rgain);
Apr 26, 2001
Apr 26, 2001
364
365
366
367
368
369
370
371
372
rc = UADInitialize(this);
rc = UADStart(this);
rc = UADSetVolume(this, 100);
rc = UADSetBalance(this, 0);
/* We're ready to rock and roll. :-) */
return 0;
}
Jul 10, 2006
Jul 10, 2006
373
374
375
static UMSAudioDevice_ReturnCode
UADGetBitsPerSample(_THIS, long *bits)
Apr 26, 2001
Apr 26, 2001
376
{
Jul 10, 2006
Jul 10, 2006
377
378
return UMSAudioDevice_get_bits_per_sample(this->hidden->umsdev,
this->hidden->ev, bits);
Apr 26, 2001
Apr 26, 2001
379
380
}
Jul 10, 2006
Jul 10, 2006
381
382
static UMSAudioDevice_ReturnCode
UADSetBitsPerSample(_THIS, long bits)
Apr 26, 2001
Apr 26, 2001
383
{
Jul 10, 2006
Jul 10, 2006
384
385
return UMSAudioDevice_set_bits_per_sample(this->hidden->umsdev,
this->hidden->ev, bits);
Apr 26, 2001
Apr 26, 2001
386
387
}
Jul 10, 2006
Jul 10, 2006
388
389
static UMSAudioDevice_ReturnCode
UADSetSampleRate(_THIS, long rate, long *set_rate)
Apr 26, 2001
Apr 26, 2001
390
391
{
/* from the mac code: sample rate = spec->freq << 16; */
Jul 10, 2006
Jul 10, 2006
392
393
return UMSAudioDevice_set_sample_rate(this->hidden->umsdev,
this->hidden->ev, rate, set_rate);
Apr 26, 2001
Apr 26, 2001
394
395
}
Jul 10, 2006
Jul 10, 2006
396
397
static UMSAudioDevice_ReturnCode
UADSetByteOrder(_THIS, string byte_order)
Apr 26, 2001
Apr 26, 2001
398
{
Jul 10, 2006
Jul 10, 2006
399
400
return UMSAudioDevice_set_byte_order(this->hidden->umsdev,
this->hidden->ev, byte_order);
Apr 26, 2001
Apr 26, 2001
401
402
}
Jul 10, 2006
Jul 10, 2006
403
404
static UMSAudioDevice_ReturnCode
UADSetAudioFormatType(_THIS, string fmt)
Apr 26, 2001
Apr 26, 2001
405
406
{
/* possible PCM, A_LAW or MU_LAW */
Jul 10, 2006
Jul 10, 2006
407
408
return UMSAudioDevice_set_audio_format_type(this->hidden->umsdev,
this->hidden->ev, fmt);
Apr 26, 2001
Apr 26, 2001
409
410
}
Jul 10, 2006
Jul 10, 2006
411
412
static UMSAudioDevice_ReturnCode
UADSetNumberFormat(_THIS, string fmt)
Apr 26, 2001
Apr 26, 2001
413
414
{
/* possible SIGNED, UNSIGNED, or TWOS_COMPLEMENT */
Jul 10, 2006
Jul 10, 2006
415
416
return UMSAudioDevice_set_number_format(this->hidden->umsdev,
this->hidden->ev, fmt);
Apr 26, 2001
Apr 26, 2001
417
418
}
Jul 10, 2006
Jul 10, 2006
419
420
static UMSAudioDevice_ReturnCode
UADInitialize(_THIS)
Apr 26, 2001
Apr 26, 2001
421
{
Jul 10, 2006
Jul 10, 2006
422
return UMSAudioDevice_initialize(this->hidden->umsdev, this->hidden->ev);
Apr 26, 2001
Apr 26, 2001
423
424
}
Jul 10, 2006
Jul 10, 2006
425
426
static UMSAudioDevice_ReturnCode
UADStart(_THIS)
Apr 26, 2001
Apr 26, 2001
427
{
Jul 10, 2006
Jul 10, 2006
428
return UMSAudioDevice_start(this->hidden->umsdev, this->hidden->ev);
Apr 26, 2001
Apr 26, 2001
429
430
}
Jul 10, 2006
Jul 10, 2006
431
432
static UMSAudioDevice_ReturnCode
UADSetTimeFormat(_THIS, UMSAudioTypes_TimeFormat fmt)
Apr 26, 2001
Apr 26, 2001
433
434
435
436
437
{
/*
* Switches the time format to the new format, immediately.
* possible UMSAudioTypes_Msecs, UMSAudioTypes_Bytes or UMSAudioTypes_Samples
*/
Jul 10, 2006
Jul 10, 2006
438
439
return UMSAudioDevice_set_time_format(this->hidden->umsdev,
this->hidden->ev, fmt);
Apr 26, 2001
Apr 26, 2001
440
441
}
Jul 10, 2006
Jul 10, 2006
442
443
static UMSAudioDevice_ReturnCode
UADWriteBuffSize(_THIS, long *buff_size)
Apr 26, 2001
Apr 26, 2001
444
445
446
447
{
/*
* returns write buffer size in the current time format
*/
Jul 10, 2006
Jul 10, 2006
448
449
return UMSAudioDevice_write_buff_size(this->hidden->umsdev,
this->hidden->ev, buff_size);
Apr 26, 2001
Apr 26, 2001
450
451
}
Jul 10, 2006
Jul 10, 2006
452
453
static UMSAudioDevice_ReturnCode
UADWriteBuffRemain(_THIS, long *buff_size)
Apr 26, 2001
Apr 26, 2001
454
455
456
457
458
{
/*
* returns amount of available space in the write buffer
* in the current time format
*/
Jul 10, 2006
Jul 10, 2006
459
460
return UMSAudioDevice_write_buff_remain(this->hidden->umsdev,
this->hidden->ev, buff_size);
Apr 26, 2001
Apr 26, 2001
461
462
}
Jul 10, 2006
Jul 10, 2006
463
464
static UMSAudioDevice_ReturnCode
UADWriteBuffUsed(_THIS, long *buff_size)
Apr 26, 2001
Apr 26, 2001
465
466
467
468
469
{
/*
* returns amount of filled space in the write buffer
* in the current time format
*/
Jul 10, 2006
Jul 10, 2006
470
471
return UMSAudioDevice_write_buff_used(this->hidden->umsdev,
this->hidden->ev, buff_size);
Apr 26, 2001
Apr 26, 2001
472
473
}
Jul 10, 2006
Jul 10, 2006
474
475
static UMSAudioDevice_ReturnCode
UADSetDMABufferSize(_THIS, long bytes, long *bytes_ret)
Apr 26, 2001
Apr 26, 2001
476
477
478
479
480
481
{
/*
* Request a new DMA buffer size, maximum requested size 2048.
* Takes effect with next initialize() call.
* Devices may or may not support DMA.
*/
Jul 10, 2006
Jul 10, 2006
482
483
484
return UMSAudioDevice_set_DMA_buffer_size(this->hidden->umsdev,
this->hidden->ev,
bytes, bytes_ret);
Apr 26, 2001
Apr 26, 2001
485
486
}
Jul 10, 2006
Jul 10, 2006
487
488
static UMSAudioDevice_ReturnCode
UADSetVolume(_THIS, long volume)
Apr 26, 2001
Apr 26, 2001
489
490
491
492
493
{
/*
* Set the volume.
* Takes effect immediately.
*/
Jul 10, 2006
Jul 10, 2006
494
495
return UMSAudioDevice_set_volume(this->hidden->umsdev,
this->hidden->ev, volume);
Apr 26, 2001
Apr 26, 2001
496
497
}
Jul 10, 2006
Jul 10, 2006
498
499
static UMSAudioDevice_ReturnCode
UADSetBalance(_THIS, long balance)
Apr 26, 2001
Apr 26, 2001
500
501
502
503
504
{
/*
* Set the balance.
* Takes effect immediately.
*/
Jul 10, 2006
Jul 10, 2006
505
506
return UMSAudioDevice_set_balance(this->hidden->umsdev,
this->hidden->ev, balance);
Apr 26, 2001
Apr 26, 2001
507
508
}
Jul 10, 2006
Jul 10, 2006
509
510
static UMSAudioDevice_ReturnCode
UADSetChannels(_THIS, long channels)
Apr 26, 2001
Apr 26, 2001
511
512
513
514
515
{
/*
* Set mono or stereo.
* Takes effect with next initialize() call.
*/
Jul 10, 2006
Jul 10, 2006
516
517
518
519
if (channels != 1)
channels = 2;
return UMSAudioDevice_set_number_of_channels(this->hidden->umsdev,
this->hidden->ev, channels);
Apr 26, 2001
Apr 26, 2001
520
521
}
Jul 10, 2006
Jul 10, 2006
522
523
static UMSAudioDevice_ReturnCode
UADOpen(_THIS, string device, string mode, long flags)
Apr 26, 2001
Apr 26, 2001
524
{
Jul 10, 2006
Jul 10, 2006
525
526
return UMSAudioDevice_open(this->hidden->umsdev,
this->hidden->ev, device, mode, flags);
Apr 26, 2001
Apr 26, 2001
527
528
}
Jul 10, 2006
Jul 10, 2006
529
530
531
static UMSAudioDevice_ReturnCode
UADWrite(_THIS, UMSAudioTypes_Buffer * buff,
long samples, long *samples_written)
Apr 26, 2001
Apr 26, 2001
532
{
Jul 10, 2006
Jul 10, 2006
533
534
535
return UMSAudioDevice_write(this->hidden->umsdev,
this->hidden->ev,
buff, samples, samples_written);
Apr 26, 2001
Apr 26, 2001
536
537
}
Jul 10, 2006
Jul 10, 2006
538
539
static UMSAudioDevice_ReturnCode
UADPlayRemainingData(_THIS, boolean block)
Apr 26, 2001
Apr 26, 2001
540
{
Jul 10, 2006
Jul 10, 2006
541
542
return UMSAudioDevice_play_remaining_data(this->hidden->umsdev,
this->hidden->ev, block);
Apr 26, 2001
Apr 26, 2001
543
544
}
Jul 10, 2006
Jul 10, 2006
545
546
static UMSAudioDevice_ReturnCode
UADStop(_THIS)
Apr 26, 2001
Apr 26, 2001
547
{
Jul 10, 2006
Jul 10, 2006
548
return UMSAudioDevice_stop(this->hidden->umsdev, this->hidden->ev);
Apr 26, 2001
Apr 26, 2001
549
550
}
Jul 10, 2006
Jul 10, 2006
551
552
static UMSAudioDevice_ReturnCode
UADClose(_THIS)
Apr 26, 2001
Apr 26, 2001
553
{
Jul 10, 2006
Jul 10, 2006
554
return UMSAudioDevice_close(this->hidden->umsdev, this->hidden->ev);
Apr 26, 2001
Apr 26, 2001
555
556
}
Jul 10, 2006
Jul 10, 2006
557
558
static UMSAudioDevice_ReturnCode
UADEnableOutput(_THIS, string output, long *left_gain, long *right_gain)
Apr 26, 2001
Apr 26, 2001
559
{
Jul 10, 2006
Jul 10, 2006
560
561
562
return UMSAudioDevice_enable_output(this->hidden->umsdev,
this->hidden->ev,
output, left_gain, right_gain);
Apr 26, 2001
Apr 26, 2001
563
564
}
Jul 10, 2006
Jul 10, 2006
565
/* vi: set ts=4 sw=4 expandtab: */