static void pa_start_capture(ALCdevice *device) { pa_data *data = device->ExtraData; PaError err; err = pPa_StartStream(data->stream); if(err != paNoError) AL_PRINT("Error starting stream: %s\n", pPa_GetErrorText(err)); }
static ALCboolean pa_reset_playback(ALCdevice *device) { pa_data *data = (pa_data*)device->ExtraData; const PaStreamInfo *streamInfo; PaError err; streamInfo = pPa_GetStreamInfo(data->stream); device->Frequency = streamInfo->sampleRate; device->UpdateSize = data->update_size; err = pPa_StartStream(data->stream); if(err != paNoError) { AL_PRINT("Pa_StartStream() returned an error: %s\n", pPa_GetErrorText(err)); return ALC_FALSE; } return ALC_TRUE; }
static ALCboolean pa_open_playback(ALCdevice *device, const ALCchar *deviceName) { const PaStreamInfo *streamInfo; PaStreamParameters outParams; pa_data *data; PaError err; if(!deviceName) deviceName = pa_device; else if(strcmp(deviceName, pa_device) != 0) return ALC_FALSE; pa_load(); if(pa_handle == NULL) return ALC_FALSE; data = (pa_data*)calloc(1, sizeof(pa_data)); device->ExtraData = data; outParams.device = GetConfigValueInt("port", "device", -1); if(outParams.device < 0) outParams.device = pPa_GetDefaultOutputDevice(); outParams.suggestedLatency = (device->UpdateSize*device->NumUpdates) / (float)device->Frequency; outParams.hostApiSpecificStreamInfo = NULL; switch(aluBytesFromFormat(device->Format)) { case 1: outParams.sampleFormat = paUInt8; break; case 2: outParams.sampleFormat = paInt16; break; case 4: outParams.sampleFormat = paFloat32; break; default: AL_PRINT("Unknown format: 0x%x\n", device->Format); device->ExtraData = NULL; free(data); pa_unload(); return ALC_FALSE; } outParams.channelCount = aluChannelsFromFormat(device->Format); err = pPa_OpenStream(&data->stream, NULL, &outParams, device->Frequency, device->UpdateSize, paNoFlag, pa_callback, device); if(err != paNoError) { AL_PRINT("Pa_OpenStream() returned an error: %s\n", pPa_GetErrorText(err)); device->ExtraData = NULL; free(data); pa_unload(); return ALC_FALSE; } streamInfo = pPa_GetStreamInfo(data->stream); err = pPa_StartStream(data->stream); if(err != paNoError) { AL_PRINT("Pa_StartStream() returned an error: %s\n", pPa_GetErrorText(err)); pPa_CloseStream(data->stream); device->ExtraData = NULL; free(data); pa_unload(); return ALC_FALSE; } device->szDeviceName = strdup(deviceName); device->Frequency = streamInfo->sampleRate; return ALC_TRUE; }