Referencia de la Interfaz del Codificador AAC¶
Descripción General¶
Los filtros DirectShow del codificador AAC (Codificación de Audio Avanzada) proporcionan interfaces para la codificación de audio de alta calidad al formato AAC. AAC es el sucesor de MP3, ofreciendo mejor calidad de sonido a la misma tasa de bits y es el códec de audio estándar para MP4, M4A y aplicaciones de transmisión.
Están disponibles dos interfaces de codificador AAC: - IMonogramAACEncoder: Interfaz de configuración simple que utiliza una única estructura de configuración. - IVFAACEncoder: Interfaz completa con métodos de propiedad individuales para un control detallado.
Interfaz IMonogramAACEncoder¶
Descripción General¶
La interfaz IMonogramAACEncoder proporciona un enfoque de configuración simple basado en estructuras para la codificación AAC. La configuración se realiza utilizando la estructura AACConfig que contiene todos los parámetros esenciales de codificación.
GUID de la Interfaz: {B2DE30C0-1441-4451-A0CE-A914FD561D7F}
Hereda de: IUnknown
Estructura AACConfig¶
/// <summary>
/// Estructura de configuración del codificador AAC.
/// </summary>
public struct AACConfig
{
/// <summary>
/// Versión/perfil AAC (típicamente 2 para AAC-LC, 4 para AAC-HE)
/// </summary>
public int version;
/// <summary>
/// Tipo de objeto / perfil:
/// 2 = AAC-LC (Baja Complejidad) - recomendado para la mayoría de usos
/// 5 = AAC-HE (Alta Eficiencia)
/// 29 = AAC-HEv2 (Alta Eficiencia versión 2)
/// </summary>
public int object_type;
/// <summary>
/// Tipo de formato de salida (0 = AAC Raw, 1 = ADTS)
/// </summary>
public int output_type;
/// <summary>
/// Tasa de bits objetivo en bits por segundo (ej., 128000 para 128 kbps)
/// </summary>
public int bitrate;
}
Estructura AACInfo¶
/// <summary>
/// Información en tiempo de ejecución del codificador AAC.
/// </summary>
public struct AACInfo
{
/// <summary>
/// Frecuencia de muestreo de entrada en Hz (ej., 44100, 48000)
/// </summary>
public int samplerate;
/// <summary>
/// Número de canales de audio (1 = mono, 2 = estéreo, 6 = 5.1, etc.)
/// </summary>
public int channels;
/// <summary>
/// Tamaño del marco AAC en muestras (típicamente 1024 para AAC-LC)
/// </summary>
public int frame_size;
/// <summary>
/// Número total de marcos codificados
/// </summary>
public long frames_done;
}
Definiciones de Interfaz¶
Definición en C¶
using System;
using System.Runtime.InteropServices;
namespace VisioForge.DirectShowAPI
{
/// <summary>
/// Estructura de configuración del codificador AAC.
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct AACConfig
{
public int version;
public int object_type;
public int output_type;
public int bitrate;
}
/// <summary>
/// Información en tiempo de ejecución del codificador AAC.
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct AACInfo
{
public int samplerate;
public int channels;
public int frame_size;
public long frames_done;
}
/// <summary>
/// Interfaz de configuración del codificador Monogram AAC.
/// Proporciona configuración basada en estructuras para la codificación AAC.
/// </summary>
[ComImport]
[Guid("B2DE30C0-1441-4451-A0CE-A914FD561D7F")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IMonogramAACEncoder
{
/// <summary>
/// Obtiene la configuración actual del codificador AAC.
/// </summary>
/// <param name="config">Referencia a la estructura AACConfig para recibir la configuración actual</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int GetConfig(ref AACConfig config);
/// <summary>
/// Establece la configuración del codificador AAC.
/// </summary>
/// <param name="config">Referencia a la estructura AACConfig que contiene la configuración deseada</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int SetConfig(ref AACConfig config);
}
}
Definición en C++¶
#include <unknwn.h>
// {B2DE30C0-1441-4451-A0CE-A914FD561D7F}
DEFINE_GUID(IID_IMonogramAACEncoder,
0xb2de30c0, 0x1441, 0x4451, 0xa0, 0xce, 0xa9, 0x14, 0xfd, 0x56, 0x1d, 0x7f);
/// <summary>
/// Estructura de configuración del codificador AAC.
/// </summary>
struct AACConfig
{
int version;
int object_type;
int output_type;
int bitrate;
};
/// <summary>
/// Información en tiempo de ejecución del codificador AAC.
/// </summary>
struct AACInfo
{
int samplerate;
int channels;
int frame_size;
__int64 frames_done;
};
/// <summary>
/// Interfaz de configuración del codificador Monogram AAC.
/// </summary>
DECLARE_INTERFACE_(IMonogramAACEncoder, IUnknown)
{
/// <summary>
/// Obtiene la configuración actual del codificador AAC.
/// </summary>
/// <param name="config">Puntero a la estructura AACConfig para recibir la configuración</param>
/// <returns>S_OK para éxito</returns>
STDMETHOD(GetConfig)(THIS_
AACConfig* config
) PURE;
/// <summary>
/// Establece la configuración del codificador AAC.
/// </summary>
/// <param name="config">Puntero a la estructura AACConfig con la configuración deseada</param>
/// <returns>S_OK para éxito</returns>
STDMETHOD(SetConfig)(THIS_
const AACConfig* config
) PURE;
};
Definición en Delphi¶
uses
ActiveX, ComObj;
const
IID_IMonogramAACEncoder: TGUID = '{B2DE30C0-1441-4451-A0CE-A914FD561D7F}';
type
/// <summary>
/// Estructura de configuración del codificador AAC.
/// </summary>
TAACConfig = record
version: Integer;
object_type: Integer;
output_type: Integer;
bitrate: Integer;
end;
/// <summary>
/// Información en tiempo de ejecución del codificador AAC.
/// </summary>
TAACInfo = record
samplerate: Integer;
channels: Integer;
frame_size: Integer;
frames_done: Int64;
end;
/// <summary>
/// Interfaz de configuración del codificador Monogram AAC.
/// </summary>
IMonogramAACEncoder = interface(IUnknown)
['{B2DE30C0-1441-4451-A0CE-A914FD561D7F}']
/// <summary>
/// Obtiene la configuración actual del codificador AAC.
/// </summary>
function GetConfig(var config: TAACConfig): HRESULT; stdcall;
/// <summary>
/// Establece la configuración del codificador AAC.
/// </summary>
function SetConfig(const config: TAACConfig): HRESULT; stdcall;
end;
Interfaz IVFAACEncoder¶
Descripción General¶
La interfaz IVFAACEncoder proporciona una configuración completa basada en propiedades para la codificación AAC con métodos getter/setter individuales para cada parámetro. Esta interfaz ofrece un control más fino y es más fácil de usar para cambios de configuración incrementales.
GUID de la Interfaz: {0BEF7533-39E6-42a5-863F-E087FAB5D84F}
Hereda de: IUnknown
Definiciones de Interfaz¶
Definición en C¶
using System;
using System.Runtime.InteropServices;
namespace VisioForge.DirectShowAPI
{
/// <summary>
/// Interfaz de configuración del codificador VisioForge AAC.
/// Proporciona control completo basado en propiedades sobre los parámetros de codificación AAC.
/// </summary>
[ComImport]
[Guid("0BEF7533-39E6-42a5-863F-E087FAB5D84F")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IVFAACEncoder
{
/// <summary>
/// Fuerza una frecuencia de muestreo de entrada específica. Establecer en 0 para aceptar cualquier frecuencia.
/// </summary>
/// <param name="ulSampleRate">Frecuencia de muestreo en Hz (ej., 44100, 48000). 0 = cualquier frecuencia</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int SetInputSampleRate(uint ulSampleRate);
/// <summary>
/// Obtiene la frecuencia de muestreo de entrada configurada.
/// </summary>
/// <param name="pulSampleRate">Recibe la frecuencia de muestreo en Hz. 0 si no está fija</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int GetInputSampleRate(out uint pulSampleRate);
/// <summary>
/// Establece el número de canales de entrada.
/// </summary>
/// <param name="nChannels">Número de canales (1=mono, 2=estéreo, 6=5.1, etc.)</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int SetInputChannels(short nChannels);
/// <summary>
/// Obtiene el número de canales de entrada.
/// </summary>
/// <param name="pnChannels">Recibe el número de canales</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int GetInputChannels(out short pnChannels);
/// <summary>
/// Establece la tasa de bits objetivo. Establecer en -1 para usar la tasa de bits máxima.
/// </summary>
/// <param name="ulBitRate">Tasa de bits en bits por segundo (ej., 128000). -1 = máximo</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int SetBitRate(uint ulBitRate);
/// <summary>
/// Obtiene la tasa de bits configurada.
/// </summary>
/// <param name="pulBitRate">Recibe la tasa de bits en bps. -1 si está configurado al máximo</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int GetBitRate(out uint pulBitRate);
/// <summary>
/// Establece el tipo de perfil AAC.
/// </summary>
/// <param name="uProfile">Perfil: 2=AAC-LC, 5=AAC-HE, 29=AAC-HEv2</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int SetProfile(uint uProfile);
/// <summary>
/// Obtiene el perfil AAC actual.
/// </summary>
/// <param name="puProfile">Recibe el tipo de perfil</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int GetProfile(out uint puProfile);
/// <summary>
/// Establece el formato de salida.
/// </summary>
/// <param name="uFormat">Formato: 0=AAC Raw, 1=ADTS</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int SetOutputFormat(uint uFormat);
/// <summary>
/// Obtiene el formato de salida.
/// </summary>
/// <param name="puFormat">Recibe el formato de salida</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int GetOutputFormat(out uint puFormat);
/// <summary>
/// Establece el valor de desplazamiento de tiempo para el ajuste de marca de tiempo.
/// </summary>
/// <param name="timeShift">Desplazamiento de tiempo en milisegundos</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int SetTimeShift(int timeShift);
/// <summary>
/// Obtiene el valor de desplazamiento de tiempo.
/// </summary>
/// <param name="ptimeShift">Recibe el desplazamiento de tiempo en milisegundos</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int GetTimeShift(out int ptimeShift);
/// <summary>
/// Habilita o deshabilita el canal de Efectos de Baja Frecuencia (LFE).
/// </summary>
/// <param name="lfe">1 para habilitar LFE, 0 para deshabilitar</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int SetLFE(uint lfe);
/// <summary>
/// Obtiene el estado del canal LFE.
/// </summary>
/// <param name="p">Recibe el estado LFE (1=habilitado, 0=deshabilitado)</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int GetLFE(out uint p);
/// <summary>
/// Habilita o deshabilita el Modelado de Ruido Temporal (TNS).
/// TNS mejora la codificación de sonidos transitorios.
/// </summary>
/// <param name="tns">1 para habilitar TNS, 0 para deshabilitar</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int SetTNS(uint tns);
/// <summary>
/// Obtiene el estado de TNS.
/// </summary>
/// <param name="p">Recibe el estado TNS (1=habilitado, 0=deshabilitado)</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int GetTNS(out uint p);
/// <summary>
/// Habilita o deshabilita la codificación estéreo Mid-Side.
/// Puede mejorar la compresión para audio estéreo.
/// </summary>
/// <param name="v">1 para habilitar codificación mid-side, 0 para deshabilitar</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int SetMidSide(uint v);
/// <summary>
/// Obtiene el estado de codificación mid-side.
/// </summary>
/// <param name="p">Recibe el estado mid-side (1=habilitado, 0=deshabilitado)</param>
/// <returns>HRESULT (0 para éxito)</returns>
[PreserveSig]
int GetMidSide(out uint p);
}
}
Definición en C++¶
#include <unknwn.h>
// {0BEF7533-39E6-42a5-863F-E087FAB5D84F}
DEFINE_GUID(IID_IVFAACEncoder,
0x0bef7533, 0x39e6, 0x42a5, 0x86, 0x3f, 0xe0, 0x87, 0xfa, 0xb5, 0xd8, 0x4f);
/// <summary>
/// Interfaz de configuración del codificador VisioForge AAC.
/// </summary>
DECLARE_INTERFACE_(IVFAACEncoder, IUnknown)
{
STDMETHOD(SetInputSampleRate)(THIS_
unsigned long ulSampleRate
) PURE;
STDMETHOD(GetInputSampleRate)(THIS_
unsigned long* pulSampleRate
) PURE;
STDMETHOD(SetInputChannels)(THIS_
short nChannels
) PURE;
STDMETHOD(GetInputChannels)(THIS_
short* pnChannels
) PURE;
STDMETHOD(SetBitRate)(THIS_
unsigned long ulBitRate
) PURE;
STDMETHOD(GetBitRate)(THIS_
unsigned long* pulBitRate
) PURE;
STDMETHOD(SetProfile)(THIS_
unsigned long uProfile
) PURE;
STDMETHOD(GetProfile)(THIS_
unsigned long* puProfile
) PURE;
STDMETHOD(SetOutputFormat)(THIS_
unsigned long uFormat
) PURE;
STDMETHOD(GetOutputFormat)(THIS_
unsigned long* puFormat
) PURE;
STDMETHOD(SetTimeShift)(THIS_
int timeShift
) PURE;
STDMETHOD(GetTimeShift)(THIS_
int* ptimeShift
) PURE;
STDMETHOD(SetLFE)(THIS_
unsigned long lfe
) PURE;
STDMETHOD(GetLFE)(THIS_
unsigned long* p
) PURE;
STDMETHOD(SetTNS)(THIS_
unsigned long tns
) PURE;
STDMETHOD(GetTNS)(THIS_
unsigned long* p
) PURE;
STDMETHOD(SetMidSide)(THIS_
unsigned long v
) PURE;
STDMETHOD(GetMidSide)(THIS_
unsigned long* p
) PURE;
};
Definición en Delphi¶
uses
ActiveX, ComObj;
const
IID_IVFAACEncoder: TGUID = '{0BEF7533-39E6-42a5-863F-E087FAB5D84F}';
type
/// <summary>
/// Interfaz de configuración del codificador VisioForge AAC.
/// </summary>
IVFAACEncoder = interface(IUnknown)
['{0BEF7533-39E6-42a5-863F-E087FAB5D84F}']
function SetInputSampleRate(ulSampleRate: Cardinal): HRESULT; stdcall;
function GetInputSampleRate(out pulSampleRate: Cardinal): HRESULT; stdcall;
function SetInputChannels(nChannels: SmallInt): HRESULT; stdcall;
function GetInputChannels(out pnChannels: SmallInt): HRESULT; stdcall;
function SetBitRate(ulBitRate: Cardinal): HRESULT; stdcall;
function GetBitRate(out pulBitRate: Cardinal): HRESULT; stdcall;
function SetProfile(uProfile: Cardinal): HRESULT; stdcall;
function GetProfile(out puProfile: Cardinal): HRESULT; stdcall;
function SetOutputFormat(uFormat: Cardinal): HRESULT; stdcall;
function GetOutputFormat(out puFormat: Cardinal): HRESULT; stdcall;
function SetTimeShift(timeShift: Integer): HRESULT; stdcall;
function GetTimeShift(out ptimeShift: Integer): HRESULT; stdcall;
function SetLFE(lfe: Cardinal): HRESULT; stdcall;
function GetLFE(out p: Cardinal): HRESULT; stdcall;
function SetTNS(tns: Cardinal): HRESULT; stdcall;
function GetTNS(out p: Cardinal): HRESULT; stdcall;
function SetMidSide(v: Cardinal): HRESULT; stdcall;
function GetMidSide(out p: Cardinal): HRESULT; stdcall;
end;
Perfiles AAC y Configuración¶
Perfiles AAC¶
AAC-LC (Baja Complejidad) - Perfil 2 (Recomendado): - Mejor relación calidad-tasa de bits - Menor complejidad computacional - Soporte universal de decodificadores - Uso para: Música, podcasts, bandas sonoras de video - Rango de tasa de bits: 64-320 kbps AAC-HE (Alta Eficiencia) - Perfil 5: - Optimizado para tasas de bits bajas - Utiliza Replicación de Banda Espectral (SBR) - Mejor calidad que AAC-LC a tasas de bits bajas (<= 64 kbps) - Uso para: Transmisión, voz, aplicaciones de baja tasa de bits - Rango de tasa de bits: 32-80 kbps AAC-HEv2 (Alta Eficiencia versión 2) - Perfil 29: - Optimizado aún más para tasas de bits muy bajas - Utiliza Estéreo Paramétrico (PS) además de SBR - Mejor para mono/estéreo a tasas de bits extremadamente bajas - Uso para: Transmisión de voz, ancho de banda muy bajo - Rango de tasa de bits: 16-40 kbps
Formatos de Salida¶
AAC Raw (Formato 0): - Flujo de bits AAC puro sin contenedor - Requiere contenedor externo (MP4, M4A, MKV) - Uso para: Multiplexación en archivos MP4/M4A - Tamaño de salida más pequeño ADTS (Flujo de Transporte de Datos de Audio) - Formato 1: - AAC con encabezados de marco - Autónomo, se puede reproducir directamente - Ligeramente más grande que AAC raw - Uso para: Archivos AAC independientes, transmisión - Mejor resistencia a errores