PaError CloseAudioStream( PABLIO_Stream *aStream ) { PaError err; int bytesEmpty; int byteSize = aStream->outFIFO.bufferSize; /* If we are writing data, make sure we play everything written. */ if( byteSize > 0 ) { bytesEmpty = RingBuffer_GetWriteAvailable( &aStream->outFIFO ); while( bytesEmpty < byteSize ) { NPa_Sleep( 10 ); /* MSP */ bytesEmpty = RingBuffer_GetWriteAvailable( &aStream->outFIFO ); } } err = Pa_StopStream( aStream->stream ); if( err != paNoError ) goto error; err = Pa_CloseStream( aStream->stream ); if( err != paNoError ) goto error; Pa_Terminate(); error: PABLIO_TermFIFO( &aStream->inFIFO ); PABLIO_TermFIFO( &aStream->outFIFO ); free( aStream ); return err; }
/************************************************************ * Read data from ring buffer. * Will not return until all the data has been read. */ long ReadAudioStream( PABLIO_Stream *aStream, void *data, long numFrames ) { long bytesRead; char *p = (char *) data; long numBytes = aStream->inbytesPerFrame * numFrames; while( numBytes > 0) { bytesRead = RingBuffer_Read( &aStream->inFIFO, p, numBytes ); numBytes -= bytesRead; p += bytesRead; if( numBytes > 0) NPa_Sleep(10); /* MSP */ } return numFrames; }
/************************************************************ * Write data to ring buffer. * Will not return until all the data has been written. */ long WriteAudioStream( PABLIO_Stream *aStream, void *data, long numFrames ) { long bytesWritten; char *p = (char *) data; long numBytes = aStream->outbytesPerFrame * numFrames; while( numBytes > 0) { bytesWritten = sys_ringbuf_Write( &aStream->outFIFO, p, numBytes ); numBytes -= bytesWritten; p += bytesWritten; if( numBytes > 0) NPa_Sleep(10); /* MSP */ } return numFrames; }
/* * This is called at different times to blockingIOCallback. Always seems to write 512 bytes */ long WriteAudioStream( PABLIO_Stream *aStream, void *data, long numFrames ) { long bytesWritten; char *p = (char *) data; long numBytes = aStream->outbytesPerFrame * numFrames; // printf("s_audio_pablio.c: WriteAudioStream. writing %i \n", numBytes ); while( numBytes > 0) { bytesWritten = RingBuffer_Write( &aStream->outFIFO, p, numBytes ); numBytes -= bytesWritten; p += bytesWritten; if( numBytes > 0) NPa_Sleep(10); /* MSP */ } return numFrames; }