Windows Media Audio encoder
Windows Media Audio (WMA) is a popular audio codec developed by Microsoft for efficient audio compression. This documentation covers the WMA encoder implementations available in the VisioForge .Net SDKs.
Overview
The VisioForge SDK provides two distinct approaches for WMA encoding: the platform-specific WMAOutput for Windows environments and the cross-platform WMAEncoderSettings. Let's explore both implementations in detail to understand their capabilities and use cases.
Cross-platform WMA output (X-engines: VideoCaptureCoreX, VideoEditCoreX, Media Blocks)
The WMAEncoderSettings
provides a cross-platform solution for WMA encoding. This implementation is built on SDK and offers consistent behavior across different operating systems.
Key Features
The encoder supports the following audio configurations:
- Sample rates: 44.1 kHz and 48 kHz
- Bitrates: 128, 192, 256, and 320 Kbps
- Channel configurations: Mono (1) and Stereo (2)
Rate Control
The WMA encoder implements constant bitrate (CBR) encoding, allowing you to specify a fixed bitrate from the supported values. This ensures consistent audio quality and predictable file sizes throughout the encoded content.
Usage Example
Add the WMA output to the Video Capture SDK core instance:
// Create a Video Capture SDK core instance
var core = new VideoCaptureCoreX();
// Create a WMA output
var wmaOutput = new WMAOutput("output.wma");
wmaOutput.Audio.SampleRate = 48000;
wmaOutput.Audio.Channels = 2;
wmaOutput.Audio.Bitrate = 320;
// Add the WMA output
core.Outputs_Add(wmaOutput, true);
Set the output format for the Video Edit SDK core instance:
// Create a Video Edit SDK core instance
var core = new VideoEditCoreX();
// Create a WMA output
var wmaOutput = new WMAOutput("output.wma");
wmaOutput.Audio.SampleRate = 48000;
wmaOutput.Audio.Channels = 2;
wmaOutput.Audio.Bitrate = 320;
// Add the WMA output
core.Output_Format = wmaOutput;
Create a Media Blocks WMA output instance:
// Create a WMA encoder settings instance
var wmaSettings = new WMAEncoderSettings();
// Create a WMA output instance
var wmaOutput = new WMAEncoderBlock(wmaSettings);
// Create a ASF output instance
var asfOutput = new ASFSinkBlock(new ASFSinkSettings("output.wma"));
// Connect the WMA encoder to the ASF output
pipeline.Connect(wmaOutput.Output, asfOutput.Input); // pipeline is MediaBlocksPipeline
Check if MP3 encoding is available.
if (!MP3EncoderSettings.IsAvailable())
{
// Handle error
}
Windows-only WMA output (VideoCaptureCore and VideoEditCore engines)
The WMAOutput
class provides a comprehensive Windows-specific implementation with advanced features and configuration options. This implementation leverages the Windows Media Format SDK for optimal performance on Windows systems.
Key Features
The Windows-specific implementation offers:
- Multiple profile support (internal, external, and custom)
- Language and localization settings
- Quality-based encoding
- Advanced bitrate control with peak bitrate settings
- Buffer size configuration
Rate Control
The Windows implementation supports three stream modes through the WMVStreamMode enumeration:
- CBR (Constant Bitrate)
- VBR (Variable Bitrate)
- Quality-based VBR
Usage Example
Here's how to set up the Windows-specific WMA encoder:
Use an internal profile for simple configuration
var wmaOutput = new WMAOutput
{
// Use an internal profile for simple configuration
Mode = WMVMode.InternalProfile,
Internal_Profile_Name = "Windows Media Audio 9 High (192K)"
};
core.Output_Format = wmaOutput; // Core is VideoCaptureCore or VideoEditCore
Or configure custom settings
var wmaOutput = new WMAOutput
{
Mode = WMVMode.CustomSettings,
Custom_Audio_StreamPresent = true,
Custom_Audio_Quality = 98, // High quality setting
Custom_Audio_PeakBitrate = 320, // Maximum bitrate in Kbps
Custom_Audio_PeakBufferSize = 3 // Buffer size for streaming
};
core.Output_Format = wmaOutput; // Core is VideoCaptureCore or VideoEditCore
Profile Management
The Windows implementation supports three profile modes:
-
Internal Profiles:
- Pre-configured profiles for common use cases
- Access through
Internal_Profile_Name
-
External Profiles:
- Load profiles from external files
- Configure using
External_Profile_FileName
orExternal_Profile_Text
-
Custom Profiles:
- Fine-grained control over encoding parameters
- Configure through Custom_* properties
Best Practices
When implementing WMA encoding in your application:
-
For Windows applications requiring advanced features:
- Use WMAOutput for access to Windows-specific optimizations
- Consider saving configurations to JSON for reuse
- Implement proper error handling for profile loading
-
For cross-platform applications:
- Stick to WMAEncoderSettings for consistent behavior
- Verify supported rates before setting configuration
- Use the highest supported sample rate and bitrate for best quality
This documentation provides a foundation for implementing WMA encoding in your applications. The choice between cross-platform and Windows-specific implementations should be based on your application's requirements for platform support, encoding features, and quality control.