void resetAudio_platform(AudioInstance* instance) { int ret = Sound_Rewind(instance->mAudio.mSample); if(ret < 0) dprintf("ASSS"); instance->mAudio.mNextRead = getTime(); }
Status fillBuffer(AL::Buffer::ID alBuffer) { uint32_t decoded = Sound_Decode(sample); if (sample->flags & SOUND_SAMPLEFLAG_EAGAIN) { /* Try to decode one more time on EAGAIN */ decoded = Sound_Decode(sample); /* Give up */ if (sample->flags & SOUND_SAMPLEFLAG_EAGAIN) return ALDataSource::Error; } if (sample->flags & SOUND_SAMPLEFLAG_ERROR) return ALDataSource::Error; AL::Buffer::uploadData(alBuffer, alFormat, sample->buffer, decoded, alFreq); if (sample->flags & SOUND_SAMPLEFLAG_EOF) { if (looped) { Sound_Rewind(sample); return ALDataSource::WrapAround; } else { return ALDataSource::EndOfStream; } } return ALDataSource::NoError; }
void seekToOffset(float seconds) { if (seconds <= 0) Sound_Rewind(sample); else Sound_Seek(sample, static_cast<uint32_t>(seconds * 1000)); }
/* Notify the sound channel completion */ static void sound_completion_callback(int chan) { channel_t *sound_channel = sound_channels[chan]; if (!sound_channel || Mix_Playing(chan)) { gli_strict_warning("sound callback failed"); return; } if (!sound_channel->buffered || !sound_channel->decode) { if (sound_channel->notify) { gli_event_store(evtype_SoundNotify, 0, sound_channel->resid, sound_channel->notify); } cleanup_channel(sound_channel); sound_channels[chan] = 0; return; } Uint32 soundbytes = Sound_Decode(sound_channel->decode); if (!soundbytes) { sound_channel->loop--; if (!sound_channel->loop) { if (sound_channel->notify) { gli_event_store(evtype_SoundNotify, 0, sound_channel->resid, sound_channel->notify); } cleanup_channel(sound_channel); sound_channels[chan] = 0; return; } else { Sound_Rewind(sound_channel->decode); soundbytes = Sound_Decode(sound_channel->decode); } } Sound_Sample *sample = sound_channel->decode; sound_channel->sample = Mix_QuickLoad_RAW(sample->buffer, soundbytes); Mix_ChannelFinished(&sound_completion_callback); if (Mix_PlayChannel(sound_channel->sdl_channel, sound_channel->sample, FALSE) >= 0) { return; } gli_strict_warning("buffer sound failed"); gli_strict_warning(Mix_GetError()); cleanup_channel(sound_channel); return; }
void myMusicPlayer(void *udata, Uint8 *stream, int len) { int i,act=0; Sint16 *ptr2; if (stream!=0) { ptr2=(Sint16 *)stream; if (playing_music) { while(act<len) { if (music_loaded[music_position]) { /* Play a music file: */ if ((music_sound[music_position]->flags&SOUND_SAMPLEFLAG_EOF)) { /* End of file: */ if (music_loaded[music_position+1]) { music_position++; } /* if */ Sound_Rewind(music_sound[music_position]); } else { /* In the middle of the file: */ int decoded=0; Sint16 *ptr; Sound_SetBufferSize(music_sound[music_position], len-act); decoded=Sound_Decode(music_sound[music_position]); ptr=(Sint16 *)music_sound[music_position]->buffer; for(i=0;i<decoded;i+=2,ptr++,ptr2++) { *ptr2=((Sint32(*ptr)*Sint32(music_volume))/127); } /* for */ act+=decoded; } /* if */ } else { /* No music file loaded: */ for(i=act;i<len;i++) stream[i]=0; act=len; } /* if */ } /* while */ } else { /* No music to play: */ for(i=0;i<len;i++) stream[i]=0; } /* if */ } else { fprintf(stderr,"ERROR in myMusicPlayer(): null music stream!!\n"); } /* if */ } /* myMusicPlayer */