gpt4 book ai didi

c# - 使用 IAudioEncoderProperties 在 DirectShow 应用程序中配置 LAME MP3 编码器

转载 作者:行者123 更新时间:2023-11-30 12:53:01 24 4
gpt4 key购买 nike

我正在编写一个 .NET DirectShow 应用程序,它从任何捕获设备捕获音频流,使用 LAME directshow 过滤器将其编码为 mp3,最后将流写入文件。这是我的直接显示图:捕获源 -> LAME AUDIO ENCODER(音频压缩器)-> WAV DEST(Wave muxer,从 SDK 源代码编译)-> 文件编写器。

问题是我想以编程方式配置编码器(比特率、 channel 、VBR/CBR 等),而不是使用 LAME 编码器上可用的属性页 (ISpecifyPropertyPages)。

检索 LAME 源后,似乎必须使用特定的 IAudioEncoderProperties 接口(interface)进行配置。

我尝试使用以下声明在我的 .NET 应用程序中编码(marshal)此 COM 接口(interface):

 
[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);
}

Note that not all methods are redefined.

I can successfully cast my audio compressor filter (the LAME encoder) using:

IAudioEncoderProperties prop = mp3Filter as AudioEncoderProperties;

但是当我调用 get_Bitrate 方法时,返回值为 0 并且调用 set_Bitrate 方法似乎与输出文件无关。我尝试使用属性页面配置我的过滤器并且它有效。

所以,我想知道是否有人已经将 LAME 编码器用于 DirectShow 应用程序(无论是否为 .NET)并且可以给我一些帮助?

问候。

--西弗

最佳答案

也许我迟到了,但我遇到了同样的问题。解决方案是按照与在 LAME 源代码中声明的顺序完全相同的顺序在接口(interface)中声明方法。

[ComImport]
[SuppressUnmanagedCodeSecurity]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("ca7e9ef0-1cbe-11d3-8d29-00a0c94bbfee")]
public interface IAudioEncoderProperties
{
/// <summary>
/// Is PES output enabled? Return TRUE or FALSE
/// </summary>
int get_PESOutputEnabled([Out] out int dwEnabled);

/// <summary>
/// Enable/disable PES output
/// </summary>
int set_PESOutputEnabled([In] int dwEnabled);

/// <summary>
/// Get target compression bitrate in Kbits/s
/// </summary>
int get_Bitrate([Out] out int dwBitrate);

/// <summary>
/// Set target compression bitrate in Kbits/s
/// Not all numbers available! See spec for details!
/// </summary>
int set_Bitrate([In] int dwBitrate);

///... the rest of interface
}

关于c# - 使用 IAudioEncoderProperties 在 DirectShow 应用程序中配置 LAME MP3 编码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3159082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com