Skip to content

Commit

Permalink
More cleanup, and oop I made it render in integer audio, instead of f…
Browse files Browse the repository at this point in the history
…loat
  • Loading branch information
KaleidonKep99 committed Feb 27, 2025
1 parent 283c7dd commit 5e35686
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 37 deletions.
8 changes: 4 additions & 4 deletions OmniConverter/Extensions/Audio/Renderers/AudioRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ public abstract class AudioEngine : IDisposable
{
protected bool _disposed = false;
protected bool _init = false;
protected WaveFormat _waveFormat = new(48000, 32, 2);
protected WaveFormat _waveFormat;
protected Settings _cachedSettings;

public AudioEngine(Settings settings, bool defaultInit = true)
{
_cachedSettings = settings;
_waveFormat = new(settings.Synth.SampleRate, 32, 2);
_waveFormat = new(settings.Synth.SampleRate, 32, 2, AudioEncoding.IeeeFloat);
_init = defaultInit;
}

Expand All @@ -77,8 +77,8 @@ public abstract class AudioRenderer : ISampleSource

public string UniqueID { get; protected set; } = IDGenerator.GetID();
public bool CanSeek { get; protected set; } = false;
public WaveFormat WaveFormat { get; protected set; } = new(48000, 32, 2);
public bool Initialized { get; protected set; } = false;
public WaveFormat WaveFormat { get; protected set; }
public bool Initialized { get; protected set; }
public bool Disposed { get; protected set; } = false;
public ulong ActiveVoices { get; protected set; } = 0;
public float RenderingTime { get; protected set; } = 0.0f;
Expand Down
2 changes: 1 addition & 1 deletion OmniConverter/Extensions/Audio/Renderers/BASSRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ . .#+ -+-
-++.
*/

if (Bass.Init(Bass.NoSoundDevice, _cachedSettings.WaveFormat.SampleRate, DeviceInitFlags.Default))
if (Bass.Init(Bass.NoSoundDevice, _waveFormat.SampleRate, DeviceInitFlags.Default))
{
_bassArray = InitializeSoundFonts();

Expand Down
45 changes: 25 additions & 20 deletions OmniConverter/Extensions/MIDI/MIDIConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@ public enum ConvStatus
Crash
}

private Stopwatch _convElapsedTime = new Stopwatch();
private AudioEngine? _audioRenderer;

private Stopwatch _convElapsedTime = new Stopwatch();
private MIDIValidator _validator;
private CancellationTokenSource _cancToken;
private ParallelOptions _parallelOptions;
Expand Down Expand Up @@ -341,6 +342,8 @@ private void PerMIDIConversion()
throw new OperationCanceledException();

var midi = _midis[nMidi];
var waveFormat = _audioRenderer.GetWaveFormat();

midi.EnablePooling();

// Begin conversion
Expand Down Expand Up @@ -369,15 +372,15 @@ private void PerMIDIConversion()

if (loaded)
{
using (var msm = new MultiStreamMerger(_cachedSettings.WaveFormat))
using (var msm = new MultiStreamMerger(waveFormat))
{
using (var eventsProcesser = new EventsProcesser(_audioRenderer, evs, midi))
{
AutoFillInfo(ConvStatus.SingleConv);

Dispatcher.UIThread.Post(() => midiPanel = new TaskStatus(midi.Name, _panelRef, eventsProcesser));

var cvThread = Task.Run(() => eventsProcesser.Process(msm.GetWriter(), _cachedSettings.WaveFormat, _cancToken.Token, f => _validator.AddEvent()));
var cvThread = Task.Run(() => eventsProcesser.Process(msm.GetWriter(), _cancToken.Token, f => _validator.AddEvent()));

while (!cvThread.IsCompleted)
{
Expand Down Expand Up @@ -413,16 +416,16 @@ private void PerMIDIConversion()

IWaveSource MStream;
Limiter BAC;
if (_audLimiter && _cachedSettings.WaveFormat.BitsPerSample == 32)
if (_audLimiter && waveFormat.BitsPerSample == 32)
{
Debug.PrintToConsole(Debug.LogType.Message, "LoudMax enabled.");
BAC = new Limiter(msm, 0.1);
MStream = BAC.ToWaveSource(_cachedSettings.WaveFormat.BitsPerSample);
MStream = BAC.ToWaveSource(waveFormat.BitsPerSample);
}
else MStream = msm.ToWaveSource(_cachedSettings.WaveFormat.BitsPerSample);
else MStream = msm.ToWaveSource(waveFormat.BitsPerSample);

FileStream FOpen = File.Open(outputFile1, FileMode.Create);
WaveWriter FDestination = new WaveWriter(FOpen, _cachedSettings.WaveFormat);
WaveWriter FDestination = new WaveWriter(FOpen, waveFormat);
Debug.PrintToConsole(Debug.LogType.Message, "Output file is open.");

int FRead = 0;
Expand Down Expand Up @@ -511,11 +514,12 @@ private void PerTrackConversion()
string folder = _outputPath;

var midiData = midi.GetIterateTracksTimeBased();
var waveFormat = _audioRenderer.GetWaveFormat();

_validator.SetTotalMIDIEvents(midi.TotalEventCount);
_validator.SetTotalTracks(midiData.Count());

using (MultiStreamMerger msm = new(_cachedSettings.WaveFormat))
using (MultiStreamMerger msm = new(waveFormat))
{
// Per track!
if (_separateTrackFiles)
Expand Down Expand Up @@ -556,7 +560,7 @@ private void PerTrackConversion()

ISampleWriter sampleWriter;

using (MultiStreamMerger trackMsm = new(_cachedSettings.WaveFormat))
using (MultiStreamMerger trackMsm = new(waveFormat))
{
Debug.PrintToConsole(Debug.LogType.Message, $"ConvertWorker => T{track}, {midi.Length.TotalSeconds}");

Expand Down Expand Up @@ -592,7 +596,7 @@ private void PerTrackConversion()
{
Dispatcher.UIThread.Post(() => trackPanel = new TaskStatus($"Track {track}", _panelRef, eventsProcesser));

cvThread = Task.Run(() => eventsProcesser.Process(sampleWriter, _cachedSettings.WaveFormat, _cancToken.Token, f =>
cvThread = Task.Run(() => eventsProcesser.Process(sampleWriter, _cancToken.Token, f =>
{
_validator.AddEvent();
return _validator.AddMIDIEvent();
Expand Down Expand Up @@ -630,17 +634,17 @@ private void PerTrackConversion()
trackMsm.Position = 0;

IWaveSource exportSource;
if (_audLimiter && _cachedSettings.WaveFormat.BitsPerSample == 32)
if (_audLimiter && waveFormat.BitsPerSample == 32)
{
Debug.PrintToConsole(Debug.LogType.Message, "LoudMax enabled.");
var BAC = new Limiter(trackMsm, 0.1);
exportSource = BAC.ToWaveSource(_cachedSettings.WaveFormat.BitsPerSample);
exportSource = BAC.ToWaveSource(waveFormat.BitsPerSample);
}
else exportSource = trackMsm.ToWaveSource(_cachedSettings.WaveFormat.BitsPerSample);
else exportSource = trackMsm.ToWaveSource(waveFormat.BitsPerSample);

using (var targetFile = File.Open(outputFile1, FileMode.Create, FileAccess.Write))
{
WaveWriter fileWriter = new WaveWriter(targetFile, _cachedSettings.WaveFormat);
WaveWriter fileWriter = new WaveWriter(targetFile, waveFormat);
Debug.PrintToConsole(Debug.LogType.Message, "Output file is open.");

int bufRead = 0;
Expand Down Expand Up @@ -712,17 +716,17 @@ private void PerTrackConversion()

// Prepare wave source
IWaveSource? MStream = null;
if (_audLimiter && _cachedSettings.WaveFormat.BitsPerSample == 32)
if (_audLimiter && waveFormat.BitsPerSample == 32)
{
Debug.PrintToConsole(Debug.LogType.Message, "LoudMax enabled.");
var BAC = new Limiter(msm, 0.1);
MStream = BAC.ToWaveSource(_cachedSettings.WaveFormat.BitsPerSample);
MStream = BAC.ToWaveSource(waveFormat.BitsPerSample);
}
else MStream = msm.ToWaveSource(_cachedSettings.WaveFormat.BitsPerSample);
else MStream = msm.ToWaveSource(waveFormat.BitsPerSample);

using (var targetFile = File.Open(outputFile1, FileMode.Create, FileAccess.Write))
{
WaveWriter fileWriter = new WaveWriter(targetFile, _cachedSettings.WaveFormat);
WaveWriter fileWriter = new WaveWriter(targetFile, waveFormat);
Debug.PrintToConsole(Debug.LogType.Message, "Output file is open.");

int FRead = 0;
Expand Down Expand Up @@ -863,7 +867,7 @@ protected override void Dispose(bool disposing)
_disposed = true;
}

public void Process(ISampleWriter output, WaveFormat waveFormat, CancellationToken cancToken, Func<ulong, ulong>? f = null)
public void Process(ISampleWriter output, CancellationToken cancToken, Func<ulong, ulong>? f = null)
{
var r = new Random();

Expand All @@ -880,12 +884,13 @@ public void Process(ISampleWriter output, WaveFormat waveFormat, CancellationTok

try
{
_midiRenderer = _cachedSettings.GetRenderer();
_midiRenderer = _cachedSettings.GetRenderer(_audioRenderer);

if (_midiRenderer != null)
{
// _midiRenderer.SystemReset();

var waveFormat = _midiRenderer.WaveFormat;
float[] buffer = new float[256 * waveFormat.BlockAlign];
long prevWriteTime = 0;
double deltaTime = 0;
Expand Down
19 changes: 7 additions & 12 deletions OmniConverter/Extensions/Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -250,39 +250,34 @@ public class Settings : ICloneable
[JsonProperty("SoundFonts")]
public ObservableCollection<SoundFont> SoundFontsList = [];

private AudioEngine? _cachedEngine = null;
private WaveFormat? _waveFormat = null;

public WaveFormat? WaveFormat { get { return _waveFormat; } }

public AudioEngine? GetAudioEngine()
{
_waveFormat = new WaveFormat(Synth.SampleRate, 32, 2, AudioEncoding.IeeeFloat);
AudioEngine? audioEngine = null;

switch (Renderer)
{
case EngineID.XSynth:
_cachedEngine = new XSynthEngine(this);
audioEngine = new XSynthEngine(this);
break;

case EngineID.FluidSynth:
_cachedEngine = new FluidSynthEngine(this);
audioEngine = new FluidSynthEngine(this);
break;

case EngineID.BASS:
_cachedEngine = new BASSEngine(this);
audioEngine = new BASSEngine(this);
break;

default:
break;
}

return _cachedEngine;
return audioEngine;
}

public AudioRenderer? GetRenderer()
public AudioRenderer? GetRenderer(AudioEngine? audioEngine)
{
switch (_cachedEngine)
switch (audioEngine)
{
case XSynthEngine xsynth:
return new XSynthRenderer(xsynth);
Expand Down

0 comments on commit 5e35686

Please sign in to comment.