Snd_pcm_readi возвращает пустой массивC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Snd_pcm_readi возвращает пустой массив

Сообщение Anonymous »

Я хочу передать звук с микрофона на наушники (что-то вроде эха). Однако при вызове snd_pcm_readi мой массив остается пустым.
Параметры PCM для захвата звука (в реальном коде все проверяется):

Код: Выделить всё

snd_pcm_open(&pcm_handle, "plughw:0,0", mode, 0);

// ...

unsigned int sample_rate = 44100, channels = 1;
snd_pcm_uframes_t period_size = 256, buffer_size = period_size*channels*2;

snd_pcm_hw_params_set_access(pcm_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED);
snd_pcm_hw_params_set_format(pcm_handle, hw_params, SND_PCM_FORMAT_S16_LE);
snd_pcm_hw_params_set_channels(pcm_handle, hw_params, channels);
snd_pcm_hw_params_set_rate_near(pcm_handle, hw_params, &sample_rate, nullptr);

snd_pcm_hw_params_set_period_size_near(pcm_handle, hw_params,&period_size,nullptr);
buffer_size = period_size * channels * 2;
snd_pcm_hw_params_set_buffer_size_near(pcm_handle, hw_params, &buffer_size);
А вот чтение буфера устройства:

Код: Выделить всё

std::vector bytes(buffer_size);
int ret;

while ((ret = snd_pcm_readi(pcm_handle, bytes.data(), period_size)) < 0)
snd_pcm_prepare(pcm_handle);

// all bytes[] is 0
Следует отметить, что при следующем вызове программы arecord микрофон сработает:

Код: Выделить всё

arecord test-mic.raw -d5 -fS16_LE -r44100 -c1 -D"plughw:0,0"
Что я делаю не так?


Подробнее здесь: https://stackoverflow.com/questions/798 ... mpty-array
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»