Я пишу приложение .NET DirectShow, которое захватывает аудиопоток с любого устройства захвата, кодирует его в mp3 с помощью фильтра LAME directshow и, наконец, записывает поток в файл. Это мой график DirectShow: источник захвата -> LAME AUDIO ENCODER (Аудио компрессор) -> WAV DEST (волновой мультиплексор, скомпилированный из SDK sourcres) -> Запись файлов.
Проблема в том, что я хотел бы настроить кодировщик (битрейт, каналы, VBR / CBR и т. Д.) Программно, а не использовать страницы свойств (ISpecifyPropertyPages), доступные в кодировщике LAME.
После получения источников LAME кажется, что конфигурация должна выполняться с использованием определенного интерфейса IAudioEncoderProperties.
Я попытался маршалировать этот COM-интерфейс в своем .NET-приложении, используя это объявление:
[ComImport]
[SuppressUnmanagedCodeSecurity]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("ca7e9ef0-1cbe-11d3-8d29-00a0c94bbfee")]
public interface IAudioEncoderProperties
{
// Get target compression bitrate in Kbits/s
int get_Bitrate(out int dwBitrate);
// Set target compression bitrate in Kbits/s
// Not all numbers available! See spec for details!
int set_Bitrate(int dwBitrate);
}
Обратите внимание, что не все методы переопределяются.
Я могу успешно использовать свой фильтр аудиокомпрессора (кодировщик LAME), используя:
IAudioEncoderProperties prop = mp3Filter as AudioEncoderProperties;
Но когда я вызываю метод get_Bitrate, возвращаемое значение равно 0, а вызов метода set_Bitrate, похоже, не влияет на выходной файл. Я попытался настроить свой фильтр, используя страницы свойств, и он работает.
Итак, я хотел бы знать, использовал ли кто-нибудь кодировщик LAME в приложении DirectShow (.NET или нет) и мог бы мне помочь?
С Уважением.
- Сайфер