Звуковое программирование в Linux.Как определить размер буфера в кадрах? - PullRequest
0 голосов
/ 30 ноября 2018

Я экспериментирую с ALSA и в этом разделе 2 :

со следующим параметром конфигурации Единица размера буфера зависит от функции.Иногда он дается в байтах, иногда необходимо указать количество кадров.Один кадр является вектором выборочных данных для всех каналов.Для 16-битных стереофонических данных длина одного кадра составляет четыре байта.

/* Set buffer size (in frames). The resulting latency is given by */
/* latency = periodsize * periods / (rate * bytes_per_frame)     */
if (snd_pcm_hw_params_set_buffer_size(pcm_handle, hwparams, (periodsize * periods)>>2) < 0) {
  fprintf(stderr, "Error setting buffersize.\n");
  return(-1);
}

Я не понимаю этого Для 16-битных стереофонических данных длина одного кадра составляет четыре байта.

Почему четыре?Следует ли по количеству каналов: 2?Я имею в виду ранее, они настроили его следующим образом:

/* Set number of channels */
if (snd_pcm_hw_params_set_channels(pcm_handle, hwparams, 2) < 0) {
  fprintf(stderr, "Error setting channels.\n");
  return(-1);
}

Как насчет того, если моя акустическая система содержит 4 выхода?Или 6?Значит ли это, что я должен настроить его на 16 бит * 4 и 16 бит * 6 соответственно?

1 Ответ

0 голосов
/ 30 ноября 2018

Почему четыре?За ним следует количество каналов: 2?

Да, в соответствии с упомянутым ранее:

Один кадр - это вектор выборочных данных для всех каналов.

Таким образом, для стереофонических 16-битных данных существует два (левый и правый) каналы по 16 бит (= 2 байта) каждый, что составляет 4 байта на кадр.

...