PcmAmplitudeFormat setPcmAmplitudeFormat (PcmDevice *pcm, PcmAmplitudeFormat format) { WAVEFORMATEX newFormat = pcm->format; if (format == PCM_FMT_U8) newFormat.wBitsPerSample = 8; else if (format == PCM_FMT_S16L) newFormat.wBitsPerSample = 16; else return getPcmAmplitudeFormat(pcm); if (!updateWaveOutFormat(pcm, &newFormat, "setting PCM amplitude format")) return getPcmAmplitudeFormat(pcm); else return format; }
static NoteDevice * pcmConstruct (int errorLevel) { NoteDevice *device; if ((device = malloc(sizeof(*device)))) { if ((device->pcm = openPcmDevice(errorLevel, opt_pcmDevice))) { device->blockSize = getPcmBlockSize(device->pcm); device->sampleRate = getPcmSampleRate(device->pcm); device->channelCount = getPcmChannelCount(device->pcm); device->amplitudeFormat = getPcmAmplitudeFormat(device->pcm); device->blockUsed = 0; if ((device->blockAddress = malloc(device->blockSize))) { logMessage(LOG_DEBUG, "PCM enabled: blk=%d rate=%d chan=%d fmt=%d", device->blockSize, device->sampleRate, device->channelCount, device->amplitudeFormat); return device; } else { logMallocError(); } closePcmDevice(device->pcm); } free(device); } else { logMallocError(); } logMessage(LOG_DEBUG, "PCM not available"); return NULL; }
PcmAmplitudeFormat setPcmAmplitudeFormat (PcmDevice *pcm, PcmAmplitudeFormat format) { const AmplitudeFormatEntry *entry = amplitudeFormatTable; while (entry->internal != PCM_FMT_UNKNOWN) { if (entry->internal == format) { pcm->parameters.format.format = format; reconfigurePcmChannel(pcm, LOG_WARNING); break; } ++entry; } return getPcmAmplitudeFormat(pcm); }
PcmAmplitudeFormat setPcmAmplitudeFormat (PcmDevice *pcm, PcmAmplitudeFormat format) { const AmplitudeFormatEntry *entry = amplitudeFormatTable; int result; while (entry->internal != PCM_FMT_UNKNOWN) { if (entry->internal == format) break; ++entry; } if ((result = pcmAlsa_pcm_hw_params_set_format(pcm->handle, pcm->hardwareParameters, entry->external)) < 0) { logPcmError(LOG_ERR, "set format", result); return getPcmAmplitudeFormat(pcm); } return entry->internal; }
PcmAmplitudeFormat setPcmAmplitudeFormat (PcmDevice *pcm, PcmAmplitudeFormat format) { return getPcmAmplitudeFormat(pcm); }