Changeset 3869:c63e1367041c in roaraudio for roard
- Timestamp:
- 05/19/10 22:14:22 (14 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- roard
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/driver_portaudio.c
r3751 r3869 33 33 #ifdef ROAR_HAVE_LIBPABLIO 34 34 long flags = PABLIO_WRITE; 35 #elif defined(ROAR_HAVE_LIBPORTAUDIO_V0_19) 36 PaError err; 37 PaStreamParameters params; 35 38 #endif 36 39 … … 102 105 103 106 return 0; 107 #elif defined(ROAR_HAVE_LIBPORTAUDIO_V0_19) 108 params.device = Pa_GetDefaultOutputDevice(); 109 params.channelCount = info->channels; 110 params.sampleFormat = fmt; 111 params.suggestedLatency = Pa_GetDeviceInfo(params.device)->defaultLowOutputLatency; 112 params.hostApiSpecificStreamInfo = NULL; 113 114 // TODO: FIXME: use libroar for this. 115 self->framesize = info->bits * info->channels / 8; 116 117 // Sets up blocking I/O stream. 118 #if 0 119 err = Pa_OpenStream(&(self->stream), 120 NULL, 121 ¶ms, 122 info->rate, 123 128 /*FIXME:frames*/, 124 paClipOff, 125 NULL, 126 NULL 127 ); 128 #endif 129 130 if ( err != paNoError ) { 131 ROAR_ERR("driver_portaudio_open(*): Could not open PortAudio device: \"%s\".", Pa_GetErrorText(err)); 132 roar_mm_free(self); 133 return -1; 134 } 135 136 err = Pa_StartStream(self->stream); 137 138 if ( err != paNoError ) { 139 ROAR_ERR("driver_portaudio_open(*): Could not start stream: \"%s\".", Pa_GetErrorText(err)); 140 roar_mm_free(self); 141 return -1; 142 } 143 144 return 0; 104 145 #else 105 146 return -1; … … 110 151 struct driver_portaudio * self = vio->inst; 111 152 153 // TODO: cleanup common code. 154 112 155 #ifdef ROAR_HAVE_LIBPABLIO 113 156 CloseAudioStream(self->ostream); … … 116 159 117 160 roar_mm_free(self); 161 162 return 0; 163 #elif defined(ROAR_HAVE_LIBPORTAUDIO_V0_19) 164 if ( (self != NULL) && (self->stream != NULL) ) { 165 Pa_StopStream(self->stream); 166 Pa_CloseStream(self->stream); 167 } 168 169 roar_mm_free(self); 170 171 Pa_Terminate(); 118 172 119 173 return 0; … … 132 186 ROAR_DBG("driver_portaudio_write(vio=%p, buf=%p, count=%llu) = ? // PABLIO mode", vio, buf, (long long unsigned int)count); 133 187 return WriteAudioStream(self->ostream, buf, count) * self->ostream->bytesPerFrame; 188 #elif defined(ROAR_HAVE_LIBPORTAUDIO_V0_19) 189 size_t write_frames = count / self->framesize; 190 PaError err; 191 192 ROAR_DBG("driver_portaudio_write(vio=%p, buf=%p, size=%llu) = ?", vio, buf, (long long unsigned int)size); 193 194 // I'm not 100% sure if you could write arbitrary number of frames to Pa_WriteStream(), but it seems to be backend dependent. 195 err = Pa_WriteStream(self->stream, buf, write_frames); 196 197 if ( err < 0 && err != paOutputUnderflowed ) 198 return -1; 199 200 // PA always seems to write requested size, or it will error out. 201 return count; 134 202 #else 135 203 return -1; -
roard/include/driver_portaudio.h
r3751 r3869 27 27 #define _DRIVER_PORTAUDIO_H_ 28 28 29 //#undef ROAR_HAVE_LIBPABLIO 30 //#define ROAR_HAVE_LIBPORTAUDIO_V0_19 31 29 32 #ifdef ROAR_HAVE_LIBPORTAUDIO 30 #if defined(ROAR_HAVE_LIBPABLIO) 33 #if defined(ROAR_HAVE_LIBPABLIO) || defined(ROAR_HAVE_LIBPORTAUDIO_V0_19) 31 34 #define _DRIVER_PORTAUDIO_CAN_OPERATE 32 35 #endif … … 38 41 #ifdef ROAR_HAVE_LIBPABLIO 39 42 PABLIO_Stream * ostream; 43 #elif defined(ROAR_HAVE_LIBPORTAUDIO_V0_19) 44 PaStream *stream; 45 int framesize; 40 46 #endif 41 47 }; 48 49 typedef struct { 50 /* 51 params.device = Pa_GetDefaultOutputDevice(); 52 params.channelCount = info->channels; 53 params.sampleFormat = fmt; 54 params.suggestedLatency = Pa_GetDeviceInfo(params.device)->defaultLowOutputLatency; 55 params.hostApiSpecificStreamInfo = NULL; 56 */ 57 void * device; 58 int channelCount; 59 PaSampleFormat sampleFormat; 60 int suggestedLatency; 61 void * hostApiSpecificStreamInfo; 62 } PaStreamParameters; 63 64 #define paOutputUnderflowed -1 65 66 void * Pa_GetDefaultOutputDevice(void); 67 // Pa_WriteStream(device->stream, buf, write_frames); 68 PaError Pa_WriteStream(PaStream * stream, void *, size_t); 69 PaError Pa_StartStream(PaStream * stream); 70 PaError Pa_StopStream(PaStream * stream); 71 PaError Pa_CloseStream(PaStream * stream); 42 72 43 73 int driver_portaudio_open(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh, struct roar_stream_server * sstream);
Note: See TracChangeset
for help on using the changeset viewer.