Я пишу приложение .NET DirectShow, которое захватывает аудиопоток с любого устройства захвата, кодирует его в mp3 с использованием фильтра директивы LAME и, наконец, записывает поток в файл.
Это мой график DirectShow:
источник захвата -> LAME AUDIO ENCODER (Аудио компрессор) -> WAV DEST (Wave muxer, скомпилированный из sourcres SDK) -> File writer.
Проблема в том, что я хотел бы настроить кодер (битрейт, каналы, 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 или нет) и мог бы помочь мне?
Привет.
-
Sypher