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

Latest commit

 

History

History
561 lines (495 loc) · 17.2 KB

SDL_umsaudio.c

File metadata and controls

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