Я пишу полнодуплексную программу ALSA и запускаю ее на встроенной системе на базе Linux. Его звуковые конфигурации:
- Частота дискретизации: 16 Гц
- Каналы: 1 (моно)
- Формат: S16_LE
- мин. доступ: 160 (кадров)
Для приложения в реальном времени мне нужно записывать звук каждые 10 мс, поэтому я установил минимальное доступное значение на 160.
Моя проблема: во время работы программы очень высокая загрузка ЦП, которая может составлять 99,9% (по команде top). Иногда загрузка ЦП низкая, но как только она достигает 99,9%, она не может вернуться к низкой загрузке ЦП.
Я узнал, что это может быть проблема с конфигурацией. В файле asound.conf (см. его в следующем коде) я создал карту асиммированного типа с именем «asym0», чтобы выбрать две разные подчиненные карты для воспроизведения и захвата.
Первоначально я использую «основной» в качестве устройства захвата, но это вызывает высокую загрузку ЦП. Затем я создал карточку тарифного типа с именем «rate0» и установил ее в качестве устройства захвата. Загрузка ЦП становится ниже, которая колеблется между 20% ~ 60%, но захваченный звук звучит плохо. Я слышал в своем голосе какое-то «по-по-по», когда проверял микрофон (захват).
So...
- Если я выберу "основной", загрузка ЦП будет высокой, но не будет слышно "по-по-по".
- Если я выберу "rate0", загрузка ЦП будет ниже, но будет звучать "по-по-по".
Чем отличаются "type hw" и "type rate"?
Вызван ли эффект разной частотой прерывания?
файл asound.conf:
pcm.primary { type hw card mycard } pcm.rate0 { type rate slave { pcm "primary" rate 16000 } } pcm.asym0 { type asym playback.pcm "primary" capture.pcm "primary" or "rate0" }
Пожалуйста, помогите мне решить эту проблему. Спасибо!!!
arecord -v -fdat -c1 -D primary something.wav
, так иarecord -v -fdat -c1 -D rate0 something.wav
. - person CL.   schedule 10.03.2016