| 216 | | /*----------------------------- Zero input channels: */ |
| 217 | | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| 218 | | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| 219 | | ipp.channelCount = 0; ipp.device = Pa_GetDefaultInputDevice(); |
| 220 | | opp.channelCount = 0; opp.device = paNoDevice; /* And no output device, and no output channels. */ |
| 221 | | HOPEFOR(((result = Pa_OpenStream(&stream, &ipp, NULL, |
| 222 | | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| 223 | | paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); |
| 224 | | |
| 225 | | /*----------------------------- Zero output channels: */ |
| 226 | | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| 227 | | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| 228 | | ipp.channelCount = 0; ipp.device = paNoDevice; /* And no input device, and no input channels. */ |
| 229 | | opp.channelCount = 0; opp.device = Pa_GetDefaultOutputDevice(); |
| 230 | | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, |
| 231 | | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| 232 | | paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); |
| 233 | | |
| | 220 | if (Pa_GetDefaultInputDevice() != paNoDevice) { |
| | 221 | /*----------------------------- Zero input channels: */ |
| | 222 | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| | 223 | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| | 224 | ipp.channelCount = 0; ipp.device = Pa_GetDefaultInputDevice(); |
| | 225 | opp.channelCount = 0; opp.device = paNoDevice; /* And no output device, and no output channels. */ |
| | 226 | HOPEFOR(((result = Pa_OpenStream(&stream, &ipp, NULL, |
| | 227 | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| | 228 | paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); |
| | 229 | } |
| | 230 | |
| | 231 | if (Pa_GetDefaultOutputDevice() != paNoDevice) { |
| | 232 | /*----------------------------- Zero output channels: */ |
| | 233 | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| | 234 | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| | 235 | ipp.channelCount = 0; ipp.device = paNoDevice; /* And no input device, and no input channels. */ |
| | 236 | opp.channelCount = 0; opp.device = Pa_GetDefaultOutputDevice(); |
| | 237 | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, |
| | 238 | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| | 239 | paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); |
| | 240 | } |
| 252 | | /*----------------------------- NULL stream pointer: */ |
| 253 | | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| 254 | | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| 255 | | ipp.channelCount = 0; ipp.device = paNoDevice; /* Output is more likely than input. */ |
| 256 | | opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); /* Only 2 output channels. */ |
| 257 | | HOPEFOR(((result = Pa_OpenStream(NULL, &ipp, &opp, |
| 258 | | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| 259 | | paClipOff, QaCallback, &myData )) == paBadStreamPtr)); |
| 260 | | |
| 261 | | /*----------------------------- Low sample rate: */ |
| 262 | | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| 263 | | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| 264 | | ipp.channelCount = 0; ipp.device = paNoDevice; |
| 265 | | opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); |
| 266 | | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, |
| 267 | | 1.0, FRAMES_PER_BUFFER, /* 1 cycle per second (1 Hz) is too low. */ |
| 268 | | paClipOff, QaCallback, &myData )) == paInvalidSampleRate)); |
| 269 | | |
| 270 | | /*----------------------------- High sample rate: */ |
| 271 | | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| 272 | | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| 273 | | ipp.channelCount = 0; ipp.device = paNoDevice; |
| 274 | | opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); |
| 275 | | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, |
| 276 | | 10000000.0, FRAMES_PER_BUFFER, /* 10^6 cycles per second (10 MHz) is too high. */ |
| 277 | | paClipOff, QaCallback, &myData )) == paInvalidSampleRate)); |
| 278 | | |
| 279 | | /*----------------------------- NULL callback: */ |
| 280 | | /* NULL callback is valid in V19 -- it means use blocking read/write stream |
| | 259 | if (Pa_GetDefaultOutputDevice() != paNoDevice) { |
| | 260 | /*----------------------------- NULL stream pointer: */ |
| | 261 | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| | 262 | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| | 263 | ipp.channelCount = 0; ipp.device = paNoDevice; /* Output is more likely than input. */ |
| | 264 | opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); /* Only 2 output channels. */ |
| | 265 | HOPEFOR(((result = Pa_OpenStream(NULL, &ipp, &opp, |
| | 266 | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| | 267 | paClipOff, QaCallback, &myData )) == paBadStreamPtr)); |
| | 268 | |
| | 269 | /*----------------------------- Low sample rate: */ |
| | 270 | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| | 271 | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| | 272 | ipp.channelCount = 0; ipp.device = paNoDevice; |
| | 273 | opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); |
| | 274 | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, |
| | 275 | 1.0, FRAMES_PER_BUFFER, /* 1 cycle per second (1 Hz) is too low. */ |
| | 276 | paClipOff, QaCallback, &myData )) == paInvalidSampleRate)); |
| | 277 | |
| | 278 | /*----------------------------- High sample rate: */ |
| | 279 | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| | 280 | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| | 281 | ipp.channelCount = 0; ipp.device = paNoDevice; |
| | 282 | opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); |
| | 283 | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, |
| | 284 | 10000000.0, FRAMES_PER_BUFFER, /* 10^6 cycles per second (10 MHz) is too high. */ |
| | 285 | paClipOff, QaCallback, &myData )) == paInvalidSampleRate)); |
| | 286 | |
| | 287 | /*----------------------------- NULL callback: */ |
| | 288 | /* NULL callback is valid in V19 -- it means use blocking read/write stream |
| 282 | | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| 283 | | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| 284 | | ipp.channelCount = 0; ipp.device = paNoDevice; |
| 285 | | opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); |
| 286 | | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, |
| 287 | | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| 288 | | paClipOff, |
| 289 | | NULL, |
| 290 | | &myData )) == paNullCallback)); |
| 291 | | */ |
| 292 | | |
| 293 | | /*----------------------------- Bad flag: */ |
| 294 | | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| 295 | | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| 296 | | ipp.channelCount = 0; ipp.device = paNoDevice; |
| 297 | | opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); |
| 298 | | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, |
| 299 | | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| 300 | | 255, /* Is 8 maybe legal V19 API? */ |
| 301 | | QaCallback, &myData )) == paInvalidFlag)); |
| | 290 | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| | 291 | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| | 292 | ipp.channelCount = 0; ipp.device = paNoDevice; |
| | 293 | opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); |
| | 294 | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, |
| | 295 | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| | 296 | paClipOff, |
| | 297 | NULL, |
| | 298 | &myData )) == paNullCallback)); |
| | 299 | */ |
| | 300 | |
| | 301 | /*----------------------------- Bad flag: */ |
| | 302 | ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; |
| | 303 | ipp.sampleFormat = opp.sampleFormat = paFloat32; |
| | 304 | ipp.channelCount = 0; ipp.device = paNoDevice; |
| | 305 | opp.channelCount = 2; opp.device = Pa_GetDefaultOutputDevice(); |
| | 306 | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, |
| | 307 | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| | 308 | 255, /* Is 8 maybe legal V19 API? */ |
| | 309 | QaCallback, &myData )) == paInvalidFlag)); |
| | 310 | } |
| 349 | | opp.suggestedLatency = Pa_GetDeviceInfo(opp.device)->defaultLowOutputLatency; |
| 350 | | |
| 351 | | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, /* Take NULL as input parame- */ |
| 352 | | &opp, /* ters, meaning try only output. */ |
| 353 | | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| 354 | | paClipOff, QaCallback, &myData )) == paNoError)); |
| | 359 | info = Pa_GetDeviceInfo(opp.device); |
| | 360 | opp.suggestedLatency = info ? info->defaultLowOutputLatency : 0.100; |
| | 361 | |
| | 362 | if (opp.device != paNoDevice) { |
| | 363 | HOPEFOR(((result = Pa_OpenStream(&stream, NULL, /* Take NULL as input parame- */ |
| | 364 | &opp, /* ters, meaning try only output. */ |
| | 365 | SAMPLE_RATE, FRAMES_PER_BUFFER, |
| | 366 | paClipOff, QaCallback, &myData )) == paNoError)); |
| | 367 | } |