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; }
int setPcmChannelCount (PcmDevice *pcm, int channels) { WAVEFORMATEX format = pcm->format; format.nChannels = channels; if (!updateWaveOutFormat(pcm, &format, "setting PCM channel count")) return getPcmChannelCount(pcm); else return channels; }
int setPcmChannelCount (PcmDevice *pcm, int channels) { int result; pcm->channelCount = channels; if ((result = pcmAlsa_pcm_hw_params_set_channels_near(pcm->handle, pcm->hardwareParameters, &pcm->channelCount)) < 0) { logPcmError(LOG_ERR, "set channels near", result); } return getPcmChannelCount(pcm); }
int setPcmChannelCount (PcmDevice *pcm, int channels) { if (ioctl(pcm->fileDescriptor, SNDCTL_DSP_CHANNELS, &channels) != -1) pcm->channelCount = channels; return getPcmChannelCount(pcm); }
int setPcmChannelCount (PcmDevice *pcm, int channels) { pcm->parameters.format.voices = channels; reconfigurePcmChannel(pcm, LOG_WARNING); return getPcmChannelCount(pcm); }
int setPcmChannelCount (PcmDevice *pcm, int channels) { return getPcmChannelCount(pcm); }
static int getPcmFrameSize (PcmDevice *pcm) { return getPcmChannelCount(pcm) * (pcmAlsa_pcm_hw_params_get_sbits(pcm->hardwareParameters) / 8); }