Esempio n. 1
0
void al_sourcestopv( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) {

	if (NULL == alSourceStopv) mogl_glunsupported("alSourceStopv");
	alSourceStopv((ALsizei)mxGetScalar(prhs[0]),
		(const ALuint*)mxGetData(prhs[1]));

}
// ----------------------------------------------------------------------------
void ofOpenALSoundPlayer::stop(){
	alSourceStopv(channels,&sources[sources.size()-channels]);
	if(isStreaming){
		setPosition(0);
		stopThread();
	}
}
Esempio n. 3
0
/**
 * @brief Cleans up after the sound subsytem.
 */
void sound_al_exit (void)
{
   int i;

   soundLock();

   /* Free groups. */
   for (i=0; i<al_ngroups; i++) {
      if (al_groups[i].sources != NULL) {
         free(al_groups[i].sources);
      }
      al_groups[i].sources  = NULL;
      al_groups[i].nsources = 0;
   }
   if (al_groups != NULL)
      free(al_groups);
   al_groups  = NULL;
   al_ngroups = 0;

   /* Free stacks. */
   if (source_all != NULL) {
      alSourceStopv(   source_nall, source_all );
      alDeleteSources( source_nall, source_all );
      free(source_all);
   }
   source_all        = NULL;
   source_nall       = 0;
   if (source_total)
      free(source_total);
   source_total      = NULL;
   source_ntotal     = 0;
   if (source_stack != NULL)
      free(source_stack);
   source_stack      = NULL;
   source_nstack     = 0;
   source_mstack     = 0;

   /* Clean up EFX stuff. */
   if (al_info.efx == AL_TRUE) {
      nalDeleteAuxiliaryEffectSlots( 1, &efx_directSlot );
      if (al_info.efx_reverb == AL_TRUE)
         nalDeleteEffects( 1, &efx_reverb );
      if (al_info.efx_echo == AL_TRUE)
         nalDeleteEffects( 1, &efx_echo );
   }

   /* Clean up global stuff. */
   if (al_context) {
      alcMakeContextCurrent(NULL);
      alcDestroyContext( al_context );
   }
   if (al_device)
      alcCloseDevice( al_device );

   soundUnlock();
   SDL_DestroyMutex( sound_lock );
}
// ----------------------------------------------------------------------------
void ofOpenALSoundPlayer::stop(){
	if(sources.empty()) return;
	std::unique_lock<std::mutex> lock(mutex);
	alSourceStopv(channels,&sources[sources.size()-channels]);
	if(isStreaming){
		setPosition(0);
		stopThread();
	}
}
Esempio n. 5
0
	// 停止播放音频流
	////////////////////////////////////////////////////////////////////////////////
	void OALMusicBuffer::DoStop()
	{
		if (!stopped_)
		{
			stopped_ = true;
			play_thread_();
		}

		alSourceStopv(1, &source_);
	}
Esempio n. 6
0
	// 更新缓冲区
	/////////////////////////////////////////////////////////////////////////////////
	void OALMusicBuffer::LoopUpdateBuffer()
	{
		std::unique_lock<std::mutex> lock(play_mutex_);
		while (!played_)
		{
			play_cond_.wait(lock);
		}
		played_ = false;

		while (!stopped_)
		{
			ALint processed;
			alGetSourcei(source_, AL_BUFFERS_PROCESSED, &processed);
			if (processed > 0)
			{
				while (processed > 0)
				{
					-- processed;

					ALuint buf;
					alSourceUnqueueBuffers(source_, 1, &buf);

					std::vector<uint8_t> data(READSIZE);
					data.resize(dataSource_->Read(&data[0], data.size()));
					if (data.empty())
					{
						if (loop_)
						{
							stopped_ = false;
							alSourceStopv(1, &source_);
							this->DoReset();
							alSourcePlay(source_);
						}
						else
						{
							stopped_ = true;
						}
					}
					else
					{
						alBufferData(buf, Convert(format_), &data[0],
							static_cast<ALsizei>(data.size()), freq_);
						alSourceQueueBuffers(source_, 1, &buf);
					}
				}
			}
			else
			{
				Sleep(1000 / PreSecond);
			}
		}
	}
Esempio n. 7
0
value lime_al_source_stopv (value n, value sources) {

    int *data = val_array_int (sources);

    if (data) {

        alSourceStopv (val_int (n), (ALuint*)data);

    }

    return alloc_null ();

}
Esempio n. 8
0
static void Mgr_Destroy(SMgrState& _State)
{
	if (_State.cActive > 0) {
		alSourceStopv(_State.cActive, _State.Active);
		memcpy(_State.Avail + _State.cAvail, _State.Active, _State.cActive*sizeof(ALuint));
		_State.cAvail += _State.cActive;
		_State.cActive = 0;
	}
	for (int i=0; i < MGR_MAX_EMITTERS; i++) {
		ALuint s = _State.Emitters[i].Source;
		alSourceStop(s);
		_State.Emitters[i].Source = 0;
		_State.Avail[_State.cAvail] = s; _State.cAvail ++;
	}
	alDeleteSources(_State.cAvail, _State.Avail);
}
Esempio n. 9
0
	void lime_al_source_stopv (int n, value sources) {
		
		if (val_is_null (sources) == false) {
			
			int size = val_array_size (sources);
			ALuint* data = new ALuint[size];
			
			for (int i = 0; i < size; ++i) {
				
				data[i] = (ALuint)val_int( val_array_i (sources, i) );
				
			}
			
			alSourceStopv (n, data);
			
			delete[] data;
			
		}
		
	}
Esempio n. 10
0
	void OALSoundBuffer::Stop()
	{
		alSourceStopv(static_cast<ALsizei>(sources_.size()), sources_.data());
	}
Esempio n. 11
0
File: ao_openal.c Progetto: benf/mpv
/**
 * \brief stop playing and empty buffers (for seeking/pause)
 */
static void reset(struct ao *ao)
{
    alSourceStopv(ao->channels.num, sources);
    unqueue_buffers();
}
JNIEXPORT void JNICALL Java_org_lwjgl_openal_AL10_nalSourceStopv(JNIEnv *__env, jclass clazz, jint n, jlong sourcesAddress, jlong __functionAddress) {
	const ALuint *sources = (const ALuint *)(intptr_t)sourcesAddress;
	alSourceStopvPROC alSourceStopv = (alSourceStopvPROC)(intptr_t)__functionAddress;
	UNUSED_PARAMS(__env, clazz)
	alSourceStopv(n, sources);
}
Esempio n. 13
0
void ActualizarMusica (  ){
        ALint error;
    	int cont = 0;
    	int contador = 0;
    	int i;
    	int posicion = 0;
        ALuint streambuffers[NUM_BUFFER_MUSICA]; /* Utilizado en la carga de archivos OGG */
        ALshort waveout [BUFFER_MUSICA];  /* Donde almacenamos los OGG Vorbis decodificados */
        ALuint streamsource[1]; /* Utilizado en la carga de archivos OGG */
        
      /* Generamos  buffers para hacer el streaming */
	alGenBuffers ( NUM_BUFFER_MUSICA, streambuffers);
     	if ( (error = alGetError()) != AL_NO_ERROR){
        	fprintf ( logs,"Fallo al crear los buffers para la musica:%s\n", alGetString(error));
        	exit (2);
     	}  
     /* Rellenamos los buffers creados con la musica decodificada */
     for ( i=0; i < NUM_BUFFER_MUSICA ; i++){
		cont = ov_read ( &buff, (char *)&waveout[posicion], BUFFER_MUSICA , 0, 2, 1, &current_section ) / 2;
        contador += cont;
        fprintf ( logs, "contador = \n");
        alBufferData ( streambuffers[i], formato, waveout , BUFFER_MUSICA , informacion->rate );
        if ( (error =alGetError ()) != AL_NO_ERROR ){
               	fprintf ( logs, "Error al anyadir datos al buffer %i:%s\n",i,alGetString(error));
        }
	}
        
        /* Creamos la fuente y definimos sus propiedades */
        alGenSources( 1, streamsource );
        if ( (error = alGetError()) != AL_NO_ERROR ){
                	fprintf ( logs, "Error al generar la fuente de sonido: %s\n", alGetString (error));
        }
         
        /* Defino propiedades para la fuente */
        /*alSourcei ( streamsource[0], AL_SOURCE_RELATIVE, AL_TRUE ); /* Para que se mueva con el listener */
        /*alSourcei ( streamsource[0], AL_LOOPING, AL_FALSE ); /* No se repite por ella sola */
        /*alSourcef ( streamsource[0], AL_GAIN, 0.9f ); /* Para que suene menos que los sonidos */

        /* Asignamos los buffers creados a la fuente */
        alSourceQueueBuffers ( streamsource[0], NUM_BUFFER_MUSICA, streambuffers );

        /* Se empieza a reproducir la musica */
        alSourcePlay ( streamsource[0] );
        if ( (error = alGetError ()) != AL_NO_ERROR ){
              fprintf ( logs, "Error al reproducir musica:%s\n",alGetString (error));
        }
	/* A partir de aqui es donde realmente empieza el Streaming*/
	while ( contador < tamanyo_cancion ){

            /* Comprobamos estado de los buffers */
        	alGetSourceiv ( streamsource[0], AL_BUFFERS_PROCESSED, &buffers_vacios);
        
       		/* Si algun buffer esta vacio, lo rellenamos */
       		if ( buffers_vacios > 0 ){
         
               while ( buffers_vacios ){
				
                    /* Desasignamos buffers para rellenarlos */
          			alSourceUnqueueBuffers ( streamsource[0], 1, &streambuffers );
          			if ( (alGetError( )) != AL_NO_ERROR ){
              				fprintf ( logs,"No va el streaming\n");
          			}
					/* Descomprimimos datos en el buffer intermedio */	
			   		cont = ov_read ( &buff, (char *)&waveout, BUFFER_MUSICA, 0, 2, 1, &current_section);
                	contador += cont;
                    /* Los  anyadimos en el buffer */
              		alBufferData ( streambuffers, formato, waveout, BUFFER_MUSICA, frecuencia );
					if ((alGetError()) != AL_NO_ERROR ){
						fprintf ( logs, "No se puede añadir datos al buffer\n");
					}
          			/* Asignamos de nuevo los buffers al streamsource */
          			alSourceQueueBuffers ( streamsource[0], 1, &streambuffers );
          			buffers_vacios --;
                    /* Compruebo si se ha acabado la cancion */
                    if ( contador < tamanyo_cancion){
                        break;
                    }
                }
             }
     }

     /* Cuando se acaba la cancion, paramos todo y borramos buffers y fuentes */
     alSourceStopv(1, streamsource);
     if (alGetError() != AL_NO_ERROR){
              fprintf ( logs,"No se pueden parar el streamsource\n");
     }
     alDeleteSources(1, streamsource);
     if (alGetError() != AL_NO_ERROR){
             fprintf ( logs,"No se puede borrar el stremsource\n");
     }
     alDeleteBuffers(NUM_BUFFER_MUSICA, streambuffers);
     if (alGetError() != AL_NO_ERROR){
             fprintf ( logs,"No se pueden borrar los buffers\n");
     }

     musica_on = 0;
}
// ----------------------------------------------------------------------------
void ofOpenALSoundPlayer::stop(){
    alSourceStopv(channels,&sources[sources.size()-channels]);
}
// ----------------------------------------------------------------------------
void ofOpenALSoundPlayer_TimelineAdditions::stop(){
	alSourceStopv(channels,&sources[sources.size()-channels]);
}
Esempio n. 16
0
ALvoid CDECL wine_alSourceStopv(ALsizei ns, const ALuint *sids)
{
    alSourceStopv(ns, sids);
}
Esempio n. 17
0
/**
 * \brief stop playing and empty buffers (for seeking/pause)
 */
static void reset(void) {
  alSourceStopv(ao_data.channels, sources);
  unqueue_buffers();
}
Esempio n. 18
0
//*****************************************************************************
// alSourceStopv
//*****************************************************************************
//
ALAPI ALvoid ALAPIENTRY alSourceStopv(ALsizei n, const ALuint* sourceNames)
{
    AL_VOID_FXN(alSourceStopv(n, sourceNames));
}
Esempio n. 19
0
static PyObject*
_sources_action (PyObject *self, PyObject *args, SourcesAction action)
{
    unsigned int source;

    if (!CONTEXT_IS_CURRENT (((PySources*)self)->context))
    {
        PyErr_SetString (PyExc_PyGameError, "source context is not current");
        return NULL;
    }

    if (PySequence_Check (args))
    {
        ALuint *sources;
        Py_ssize_t i;
        Py_ssize_t len = PySequence_Size (args);

        if (len > ((PySources*)self)->count)
        {
            PyErr_SetString (PyExc_ValueError,
                             "sequence size exceeds the available sources");
            return NULL;
        }
        sources = PyMem_New (ALuint, (ALsizei) len);
        if (!sources)
            return NULL;
        for (i = 0; i < len; i++)
        {
            if (!UintFromSeqIndex (args, i, &source))
            {
                PyMem_Free (sources);
                return NULL;
            }
            sources[i] = source;
        }
        CLEAR_ALERROR_STATE ();
        switch (action)
        {
        case PLAY:
            alSourcePlayv ((ALsizei) len, sources);
            break;
        case PAUSE:
            alSourcePausev ((ALsizei) len, sources);
            break;
        case STOP:
            alSourceStopv ((ALsizei) len, sources);
            break;
        case REWIND:
            alSourceRewindv ((ALsizei) len, sources);
            break;
        default:
            break;
        }
        PyMem_Free (sources);
        if (SetALErrorException (alGetError (), 0))
            return NULL;
        Py_RETURN_NONE;
    }
    else if (UintFromObj (args, &source))
    {
        CLEAR_ALERROR_STATE ();
        switch (action)
        {
        case PLAY:
            alSourcePlay ((ALuint)source);
            break;
        case PAUSE:
            alSourcePause ((ALuint)source);
            break;
        case STOP:
            alSourceStop ((ALuint)source);
            break;
        case REWIND:
            alSourceRewind ((ALuint)source);
            break;
        }
        if (SetALErrorException (alGetError (), 0))
            return NULL;
        Py_RETURN_NONE;
    }

    PyErr_SetString (PyExc_TypeError,
                     "argument must be a sequence or positive integer");
    return NULL;
}
// ----------------------------------------------------------------------------
void ofSoundPlayerExtended::stop(){
    alSourceStopv(channels,&sources[sources.size()-channels]);
}
Esempio n. 21
0
void Audio::StopAll() noexcept {
	alSourceStopv(NUM_SRC, source);
	for (std::size_t i = 0; i < NUM_SRC; ++i) {
		alSourcei(source[i], AL_BUFFER, AL_NONE);
	}
}