Lines Matching refs:audio

37 /* Available audio drivers */
127 SDL_AudioDevice *audio = (SDL_AudioDevice *)audiop;
135 if ( audio->ThreadInit ) {
136 audio->ThreadInit(audio);
138 audio->threadid = SDL_ThreadID();
141 fill = audio->spec.callback;
142 udata = audio->spec.userdata;
144 if ( audio->convert.needed ) {
145 if ( audio->convert.src_format == AUDIO_U8 ) {
150 stream_len = audio->convert.len;
152 silence = audio->spec.silence;
153 stream_len = audio->spec.size;
158 the audio will be continuous all the time! */
177 /* Loop, filling the audio buffers */
178 while ( audio->enabled ) {
181 if ( audio->convert.needed ) {
182 if ( audio->convert.buf ) {
183 stream = audio->convert.buf;
188 stream = audio->GetAudioBuf(audio);
190 stream = audio->fake_stream;
196 if ( ! audio->paused ) {
197 SDL_mutexP(audio->mixer_lock);
199 SDL_mutexV(audio->mixer_lock);
202 /* Convert the audio if necessary */
203 if ( audio->convert.needed ) {
204 SDL_ConvertAudio(&audio->convert);
205 stream = audio->GetAudioBuf(audio);
207 stream = audio->fake_stream;
209 SDL_memcpy(stream, audio->convert.buf,
210 audio->convert.len_cvt);
214 if ( stream != audio->fake_stream ) {
215 audio->PlayAudio(audio);
218 /* Wait for an audio buffer to become available */
219 if ( stream == audio->fake_stream ) {
220 SDL_Delay((audio->spec.samples*1000)/audio->spec.freq);
222 audio->WaitAudio(audio);
226 /* Wait for the audio to drain.. */
227 if ( audio->WaitDone ) {
228 audio->WaitDone(audio);
239 static void SDL_LockAudio_Default(SDL_AudioDevice *audio)
241 if ( audio->thread && (SDL_ThreadID() == audio->threadid) ) {
244 SDL_mutexP(audio->mixer_lock);
247 static void SDL_UnlockAudio_Default(SDL_AudioDevice *audio)
249 if ( audio->thread && (SDL_ThreadID() == audio->threadid) ) {
252 SDL_mutexV(audio->mixer_lock);
302 SDL_AudioDevice *audio;
310 /* Select the proper audio driver */
311 audio = NULL;
331 audio = bootstrap[i]->create(0);
343 if ( audio == NULL ) {
353 audio=bootstrap[i]->create(idx);
361 audio = bootstrap[i]->create(idx);
362 if ( audio != NULL ) {
368 if ( audio == NULL ) {
369 SDL_SetError("No available audio device");
370 #if 0 /* Don't fail SDL_Init() if audio isn't available.
377 current_audio = audio;
399 SDL_AudioDevice *audio;
402 /* Start up the audio driver, if necessary */
409 audio = current_audio;
411 if (audio->opened) {
424 /* Pick some default audio frequency */
434 /* Pick some default audio format */
478 /* Uses interrupt driven audio, without thread */
481 audio->mixer_lock = SDL_CreateMutex();
482 if ( audio->mixer_lock == NULL ) {
489 /* Calculate the silence and size of the audio specification */
492 /* Open the audio subsystem */
493 SDL_memcpy(&audio->spec, desired, sizeof(audio->spec));
494 audio->convert.needed = 0;
495 audio->enabled = 1;
496 audio->paused = 1;
498 audio->opened = audio->OpenAudio(audio, &audio->spec)+1;
500 if ( ! audio->opened ) {
505 /* If the audio driver changes the buffer size, accept it */
506 if ( audio->spec.samples != desired->samples ) {
507 desired->samples = audio->spec.samples;
511 /* Allocate a fake audio memory buffer */
512 audio->fake_stream = SDL_AllocAudioMem(audio->spec.size);
513 if ( audio->fake_stream == NULL ) {
521 SDL_memcpy(obtained, &audio->spec, sizeof(audio->spec));
522 } else if ( desired->freq != audio->spec.freq ||
523 desired->format != audio->spec.format ||
524 desired->channels != audio->spec.channels ) {
525 /* Build an audio conversion block */
526 if ( SDL_BuildAudioCVT(&audio->convert,
529 audio->spec.format, audio->spec.channels,
530 audio->spec.freq) < 0 ) {
534 if ( audio->convert.needed ) {
535 audio->convert.len = (int) ( ((double) audio->spec.size) /
536 audio->convert.len_ratio );
537 audio->convert.buf =(Uint8 *)SDL_AllocAudioMem(
538 audio->convert.len*audio->convert.len_mult);
539 if ( audio->convert.buf == NULL ) {
547 /* Start the audio thread if necessary */
548 switch (audio->opened) {
550 /* Start the audio thread */
553 audio->thread = SDL_CreateThread(SDL_RunAudio, audio, NULL, NULL);
555 audio->thread = SDL_CreateThread(SDL_RunAudio, audio);
557 if ( audio->thread == NULL ) {
559 SDL_SetError("Couldn't create audio thread");
565 /* The audio is now playing */
574 SDL_AudioDevice *audio = current_audio;
578 if ( audio && audio->enabled ) {
579 if ( audio->paused ) {
590 SDL_AudioDevice *audio = current_audio;
592 if ( audio ) {
593 audio->paused = pause_on;
599 SDL_AudioDevice *audio = current_audio;
602 if ( audio && audio->LockAudio ) {
603 audio->LockAudio(audio);
609 SDL_AudioDevice *audio = current_audio;
612 if ( audio && audio->UnlockAudio ) {
613 audio->UnlockAudio(audio);
624 SDL_AudioDevice *audio = current_audio;
626 if ( audio ) {
627 audio->enabled = 0;
628 if ( audio->thread != NULL ) {
629 SDL_WaitThread(audio->thread, NULL);
631 if ( audio->mixer_lock != NULL ) {
632 SDL_DestroyMutex(audio->mixer_lock);
634 if ( audio->fake_stream != NULL ) {
635 SDL_FreeAudioMem(audio->fake_stream);
637 if ( audio->convert.needed ) {
638 SDL_FreeAudioMem(audio->convert.buf);
641 if ( audio->opened ) {
642 audio->CloseAudio(audio);
643 audio->opened = 0;
646 audio->free(audio);