Quick Start Guide
Get up and running with OwnAudioSharp in minutes. This guide will help you install the library and create your first audio application.
Zero Dependencies: OwnAudioSharp includes MiniAudio by default, so you can start immediately without installing any external libraries.
Installation
NuGet Package Manager
Package Manager Console
Install-Package OwnAudioSharp
.NET CLI
Command Line
dotnet add package OwnAudioSharp
PackageReference
Project File (.csproj)
<PackageReference Include="OwnAudioSharp" Version="1.0.0" />
Dependencies
Ready to Go: MiniAudio is included and works out of the box on all platforms without any setup.
For enhanced functionality, you can optionally install:
- FFmpeg 6 - Extended audio format support (MP3, AAC, OGG, etc.)
- PortAudio 2 - Professional audio I/O with lower latency
Windows Setup
- Download FFmpeg 6 binaries and PortAudio DLL
- Extract to a folder (e.g.,
C:\AudioLibs\
) - Point to the folder when initializing OwnAudio
C# Initialization
OwnAudio.Initialize(@"C:\AudioLibs\");
macOS Setup
Use Homebrew for easy installation:
Terminal
brew install portaudio
brew install ffmpeg@6
Libraries are automatically detected after installation.
Linux Setup
Install using your distribution's package manager:
Ubuntu/Debian
sudo apt update
sudo apt install portaudio19-dev ffmpeg
CentOS/RHEL
sudo yum install portaudio-devel ffmpeg
Android & iOS
Mobile platforms use MiniAudio exclusively - no additional setup required!
MiniAudio provides excellent performance on mobile devices with built-in format support for MP3, WAV, and FLAC.
Basic Usage
Simple Audio Playback
Program.cs
using Ownaudio;
using Ownaudio.Sources;
using System;
using System.Threading.Tasks;
try
{
// Initialize OwnAudio (uses MiniAudio by default)
OwnAudio.Initialize();
// Create a source manager
var sourceManager = SourceManager.Instance;
// Add an audio file
await sourceManager.AddOutputSource("path/to/audio.mp3");
// Play the audio
sourceManager.Play();
// Wait for user input
Console.WriteLine("Press any key to stop playback...");
Console.ReadKey();
// Stop playback and clean up
sourceManager.Stop();
}
catch (Exception ex)
{
Console.WriteLine($"Audio error: {ex.Message}");
}
finally
{
OwnAudio.Free();
}
Adding Multiple Audio Sources
Multiple Sources Example
// Add multiple audio files with names
await sourceManager.AddOutputSource("background.mp3", "BackgroundMusic");
await sourceManager.AddOutputSource("sfx.wav", "SoundEffect");
// Control individual volumes
sourceManager["BackgroundMusic"].Volume = 0.6f; // 60% volume
sourceManager["SoundEffect"].Volume = 0.8f; // 80% volume
// Play all sources simultaneously
sourceManager.Play();
Platform-Specific Setup
Cross-Platform Initialization
Smart Initialization
using System.Runtime.InteropServices;
// Platform-specific library paths
string libraryPath = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? @"C:\AudioLibs\"
: RuntimeInformation.IsOSPlatform(OSPlatform.OSX)
? "/usr/local/lib/"
: "/usr/lib/";
// Initialize with automatic fallback to MiniAudio
OwnAudio.Initialize(libraryPath);
Engine Configuration
Audio Engine Options
using Ownaudio.Engines;
// Initialize first
OwnAudio.Initialize();
// Configure output for low-latency applications
SourceManager.OutputEngineOptions = new AudioEngineOutputOptions(
OwnAudioEngine.EngineChannels.Stereo,
44100, // Sample rate
0.02 // Low latency (20ms)
);
// Configure input for recording
SourceManager.InputEngineOptions = new AudioEngineInputOptions(
OwnAudioEngine.EngineChannels.Mono,
44100,
0.02
);
// Set buffer size for optimal performance
SourceManager.EngineFramesPerBuffer = 512;
Your First Audio Project
Let's create a simple console application that demonstrates key features:
Complete Example - AudioPlayer.cs
using Ownaudio;
using Ownaudio.Sources;
using Ownaudio.Processors;
using System;
using System.Threading.Tasks;
class AudioPlayer
{
private static SourceManager sourceManager;
static async Task Main(string[] args)
{
try
{
// Initialize the audio system
Console.WriteLine("Initializing OwnAudio...");
OwnAudio.Initialize();
sourceManager = SourceManager.Instance;
// Load an audio file
Console.WriteLine("Loading audio file...");
await sourceManager.AddOutputSource("demo.mp3", "DemoTrack");
// Start playback
Console.WriteLine("Starting playback...");
sourceManager.Play();
// Interactive menu
await RunInteractiveMenu();
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
finally
{
OwnAudio.Free();
}
}
static async Task RunInteractiveMenu()
{
while (true)
{
Console.WriteLine("\n=== Audio Player ===");
Console.WriteLine("1. Play/Pause");
Console.WriteLine("2. Adjust Volume");
Console.WriteLine("3. Apply Reverb");
Console.WriteLine("4. Seek Position");
Console.WriteLine("5. Exit");
Console.Write("Choose option: ");
var key = Console.ReadKey().KeyChar;
Console.WriteLine();
switch (key)
{
case '1':
TogglePlayback();
break;
case '2':
AdjustVolume();
break;
case '3':
ApplyReverb();
break;
case '4':
SeekPosition();
break;
case '5':
return;
}
}
}
static void TogglePlayback()
{
if (sourceManager.IsPlaying)
{
sourceManager.Pause();
Console.WriteLine("Paused");
}
else
{
sourceManager.Play();
Console.WriteLine("Playing");
}
}
static void AdjustVolume()
{
Console.Write("Enter volume (0.0 - 1.0): ");
if (float.TryParse(Console.ReadLine(), out float volume))
{
sourceManager["DemoTrack"].Volume = Math.Clamp(volume, 0f, 1f);
Console.WriteLine($"Volume set to {volume:F2}");
}
}
static void ApplyReverb()
{
var reverb = new Reverb(0.7f, 0.5f, 0.3f, 0.8f);
sourceManager.CustomSampleProcessor = reverb;
Console.WriteLine("Reverb effect applied");
}
static void SeekPosition()
{
Console.Write("Enter position in seconds: ");
if (double.TryParse(Console.ReadLine(), out double seconds))
{
sourceManager.Seek(TimeSpan.FromSeconds(seconds));
Console.WriteLine($"Seeked to {seconds:F1} seconds");
}
}
}
Next Steps
Explore More: Now that you have the basics working, dive deeper into OwnAudioSharp's advanced features.
Continue your journey with these resources:
Key Concepts to Learn Next
- Audio Effects: Apply professional effects like reverb, delay, and compression
- Real-Time Processing: Generate and stream audio in real-time
- Chord Detection: Analyze musical content and extract chord progressions
- Audio Visualization: Create waveform displays with Avalonia
- Professional Mastering: Use intelligent audio matchering for studio-quality results
Need Help? Check out the demo application for a complete Avalonia MVVM example, or visit the GitHub repository for documentation and community support.