Вы спрашиваете о повторной дискретизации , а точнее понижающей дискретизации , а не о сжатии. Хотя оба процесса с потерями (это означает, что вы будете страдать от потери информации), понижающая дискретизация работает на необработанных выборках, а не в частотной области.
Если вы заинтересованы в сжатии, то вам следует изучить библиотеки lame или OGG vorbis; Вы, без сомнения, знакомы с технологиями MP3 и OGG, хотя по вашему вопросу у меня сложилось впечатление, что вы заинтересованы в получении файла PCM с более низкой частотой дискретизации.
В этом случае вам понадобится библиотека повторной выборки, из которой есть несколько возможных. Наиболее широко известным является libsamplerate , который я, честно говоря, не рекомендовал бы из-за проблем с качеством не только внутри сгенерированных аудиофайлов, но и из-за стабильности кода, используемого в самой библиотеке. Другая некоммерческая возможность - sox , как упоминали некоторые другие. В зависимости от характера вашей программы вы можете либо выполнить exec sox как отдельный процесс, либо вызвать его из собственного кода, используя его в качестве библиотеки. Лично я не пробовал этот подход, но сейчас я работаю над продуктом, в котором мы используем sox (фактически, для повышения частоты дискретизации), и мы весьма довольны результатами.
Другой вариант - написать собственную библиотеку преобразования частоты дискретизации, которая может быть значительным мероприятием , но , если вы заинтересованы только в преобразовании с целочисленным коэффициентом (т. Е. От 44,1 кГц до 22 кГц). или от 44,1 кГц до 11 кГц), тогда это на самом деле очень просто, поскольку вам нужно только вырезать каждую N-ю выборку.