Skip to content

Commit

Permalink
Basic FluidSynth support (NOT STABLE YET), added small set of new fea…
Browse files Browse the repository at this point in the history
…tures, etc etc
  • Loading branch information
KaleidonKep99 committed Feb 26, 2025
1 parent 3ea213e commit c7de4cb
Show file tree
Hide file tree
Showing 18 changed files with 517 additions and 130 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@ url=https://github.com/KaleidonKep99/ManagedBass
[submodule "MIDIModificationFramework"]
path = MIDIModificationFramework
url = https://github.com/KaleidonKep99/MIDIModificationFramework
[submodule "nfluidsynth"]
path = nfluidsynth
url = https://github.com/KaleidonKep99/nfluidsynth
2 changes: 1 addition & 1 deletion MIDIModificationFramework
41 changes: 41 additions & 0 deletions OmniConverter.sln
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ VisualStudioVersion = 17.9.34728.123
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OmniConverter", "OmniConverter\OmniConverter.csproj", "{B8123F7B-5CDA-48AD-804B-ACF334188F11}"
ProjectSection(ProjectDependencies) = postProject
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB} = {1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}
{5147DAD3-EB9D-466E-B787-5867CF977377} = {5147DAD3-EB9D-466E-B787-5867CF977377}
{A622A3B1-C497-4B14-A61D-BD115CD82769} = {A622A3B1-C497-4B14-A61D-BD115CD82769}
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A} = {EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}
Expand All @@ -25,62 +26,102 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
.editorconfig = .editorconfig
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFluidsynth", "nfluidsynth\NFluidsynth\NFluidsynth.csproj", "{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Release|Any CPU = Release|Any CPU
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Debug|ARM64.ActiveCfg = Debug|ARM64
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Debug|ARM64.Build.0 = Debug|ARM64
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Debug|x64.ActiveCfg = Debug|x64
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Debug|x64.Build.0 = Debug|x64
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Release|Any CPU.Build.0 = Release|Any CPU
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Release|ARM64.ActiveCfg = Release|ARM64
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Release|ARM64.Build.0 = Release|ARM64
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Release|x64.ActiveCfg = Release|x64
{B8123F7B-5CDA-48AD-804B-ACF334188F11}.Release|x64.Build.0 = Release|x64
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Debug|ARM64.Build.0 = Debug|Any CPU
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Debug|x64.ActiveCfg = Debug|Any CPU
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Debug|x64.Build.0 = Debug|Any CPU
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Release|Any CPU.Build.0 = Release|Any CPU
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Release|ARM64.ActiveCfg = Release|Any CPU
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Release|ARM64.Build.0 = Release|Any CPU
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Release|x64.ActiveCfg = Release|Any CPU
{A5EBE366-17DF-44A9-A870-FB274EA299AE}.Release|x64.Build.0 = Release|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Debug|ARM64.Build.0 = Debug|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Debug|x64.ActiveCfg = Debug|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Debug|x64.Build.0 = Debug|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Release|Any CPU.Build.0 = Release|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Release|ARM64.ActiveCfg = Release|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Release|ARM64.Build.0 = Release|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Release|x64.ActiveCfg = Release|Any CPU
{EAC480C1-E85D-40FB-8B23-9A1D7F050C2A}.Release|x64.Build.0 = Release|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Debug|ARM64.Build.0 = Debug|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Debug|x64.ActiveCfg = Debug|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Debug|x64.Build.0 = Debug|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Release|Any CPU.Build.0 = Release|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Release|ARM64.ActiveCfg = Release|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Release|ARM64.Build.0 = Release|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Release|x64.ActiveCfg = Release|Any CPU
{A622A3B1-C497-4B14-A61D-BD115CD82769}.Release|x64.Build.0 = Release|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Debug|ARM64.Build.0 = Debug|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Debug|x64.ActiveCfg = Debug|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Debug|x64.Build.0 = Debug|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Release|Any CPU.Build.0 = Release|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Release|ARM64.ActiveCfg = Release|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Release|ARM64.Build.0 = Release|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Release|x64.ActiveCfg = Release|Any CPU
{5147DAD3-EB9D-466E-B787-5867CF977377}.Release|x64.Build.0 = Release|Any CPU
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Debug|ARM64.Build.0 = Debug|Any CPU
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Debug|x64.ActiveCfg = Debug|x64
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Debug|x64.Build.0 = Debug|x64
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Release|Any CPU.Build.0 = Release|Any CPU
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Release|ARM64.ActiveCfg = Release|Any CPU
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Release|ARM64.Build.0 = Release|Any CPU
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Release|x64.ActiveCfg = Release|x64
{4783C7B9-31B4-4BBB-9AC2-0EADB1139528}.Release|x64.Build.0 = Release|x64
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Debug|ARM64.Build.0 = Debug|Any CPU
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Debug|x64.ActiveCfg = Debug|Any CPU
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Debug|x64.Build.0 = Debug|Any CPU
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Release|Any CPU.Build.0 = Release|Any CPU
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Release|ARM64.ActiveCfg = Release|Any CPU
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Release|ARM64.Build.0 = Release|Any CPU
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Release|x64.ActiveCfg = Release|Any CPU
{1BCEB4D4-E062-4A84-8810-9CF63B9AF0DB}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
66 changes: 66 additions & 0 deletions OmniConverter/Extensions/Audio/AudioCodecType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,72 @@ public static string ToExtension(this AudioCodecType codec)
};
}

public static bool CanHandleFloatingPoint(this AudioCodecType codec)
{
switch (codec)
{
case AudioCodecType.FLAC:
case AudioCodecType.LAME:
return false;

default:
return true;
}
}

public static bool OffersBitrateSetting(this AudioCodecType codec)
{
switch (codec)
{
case AudioCodecType.LAME:
case AudioCodecType.Vorbis:
return true;

default:
return false;
}
}

public static bool IsValidFormat(this AudioCodecType codec, int sampleRate, int bitrate, out string Reason)
{
bool checkFailed = false;
string error = string.Empty;
int maxSampleRate = 0;
int maxBitrate = 0;

switch (codec)
{
case AudioCodecType.FLAC:
maxSampleRate = 384000;
maxBitrate = int.MaxValue;
break;

case AudioCodecType.LAME:
maxSampleRate = 48000;
maxBitrate = 320;
break;

case AudioCodecType.Vorbis:
maxSampleRate = 48000;
maxBitrate = 480;
break;

case AudioCodecType.PCM:
default:
Reason = string.Empty;
return true;
}

if (sampleRate > maxSampleRate)
error += $"{codec.ToExtension()} does not support sample rates above {maxSampleRate / 1000}kHz.";

if (bitrate > maxBitrate)
error += $"{(string.IsNullOrEmpty(error) ? "" : "\n\n")}{codec.ToExtension()} does not support bitrates above {maxBitrate}kbps.";

Reason = error;
return !checkFailed;
}

// Hacky shit
public static string? CheckFFMpegDirectory()
{
Expand Down
3 changes: 2 additions & 1 deletion OmniConverter/Extensions/Audio/AudioEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ public enum EngineID
Unknown = -1,
BASS = 0,
XSynth = 1,
MAX = XSynth
FluidSynth = 2,
MAX = FluidSynth
}

public abstract class AudioEngine : IDisposable
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 @@ -59,7 +59,7 @@ . .#+ -+-
.LimitToRange((int)GlobalSynthSettings.InterpolationType.None,
(int)GlobalSynthSettings.InterpolationType.Max) - 1;

Bass.Configure(Configuration.MidiVoices, CachedSettings.BASS.MaxVoices);
Bass.Configure(Configuration.MidiVoices, CachedSettings.Synth.MaxVoices);
Bass.Configure(Configuration.SRCQuality, interp);
Bass.Configure(Configuration.SampleSRCQuality, interp);

Expand Down
Loading

0 comments on commit c7de4cb

Please sign in to comment.