С инструментарием определился быстро:
Для захвата звука - ALSA, так как моя звуковая карта работает именно с ней.
Для сжатия и сохранения в файл - FFmpeg (его библиотеки avcodec и avformat), так как именно ими пользуется Motion для сохранения видео.
С ALSA все более-менее понятно, есть немного внятная документация и автоматически сгенерированное описание API там же. Также я смотрел исходники программы aplay и arecord (которые на самом деле - одна и та же программа).
А вот с FFmpeg всё оказалось сложнее - никакой внятной документации для него нет, даже на английском языке. Есть автоматически сгенерированное описание API и несколько примеров:
- В самом проекте - показано, как использовать avcodec на примере кодирования/декодирования аудио и видео отдельно друг от друга. При этом работа с медиафайлами реализована напрямую без использования avformat.
- Пример от Martin Böhme рассказывает о том, как с помощью avformat и avcodec открыть и декодировать видеофайл. Он не касается звука, а также кодирования аудио/видео информации.
- Пример от dranger являет собой урок по созданию с нуля простенького видеоплеера, который для чтения и декодирования файлов использует avformat и avcodec, а для воспроизведения видео и звука, а также для взаимодействия с клавиатурой использует библиотеку SDL. Здесь тоже не затрагиваются вопросы кодирования.
Вот что у меня получилось: http://ls-it.googlecode.com/svn/trunk/alsa-capture/
Для сборки просто введите make. После запуска программа попытается записать несколько секунд звука с ALSA-устройства default в файл output.ogg, который будет создан в папке с программой.
Я постарался снабдить исходный код большим количеством комментариев на русском языке, чтобы было легче разобраться в нём. Ваши комментарии, доработки и предложения всячески приветсвуются. :)