public static void ShowPluginsInfo() { void WriteParameters(StringBuilder sBuilder, string name, string dataType, string label, string defaultValue, string minValue, string maxValue) // Lokální funkce { sBuilder.AppendLine($"Název: {name}") .AppendLine($"Datový typ: {dataType}") .AppendLine($"Jednotky: {label}") .AppendLine($"Výchozí hodnota: {defaultValue}") .AppendLine($"Minimální hodnota: {minValue}") .AppendLine($"Maximální hodnota: {maxValue}").AppendLine(); }/*fnc*/ void SaveParamDetails(ParameterDescription pDescription, StringBuilder pInfo) // Lokální funkce { switch (pDescription) { case FloatParameterDescription fDesc: WriteParameters(pInfo, fDesc.Name, "float", fDesc.Label, fDesc.DefaultValue.ToString("N6"), fDesc.Min.ToString("N6"), fDesc.Max.ToString("N6")); break; case IntParameterDescription iDesc: WriteParameters(pInfo, iDesc.Name, "int", iDesc.Label, iDesc.DefaultValue.ToString(), iDesc.Min.ToString(), iDesc.Max.ToString()); break; case BoolParameterDescription bDesc: WriteParameters(pInfo, bDesc.Name, "bool", bDesc.Label, (bDesc.DefaultValue)?"true":"false", "", ""); break; case DataParameterDescription dDesc: WriteParameters(pInfo, dDesc.Name, "data", dDesc.Label, "", "", ""); break; default: throw new InvalidOperationException(); }/*swt*/ }/*fnc*/ StringBuilder GetPluginDetails(DSP plugin) // Lokální funkce { Span<char> pluginName = new char[256]; plugin.GetInfo(pluginName, out FmodVersion a, out int b, out int c, out int d); string pluginNameSafe = pluginName.ToString(); pluginNameSafe = pluginNameSafe.Substring(0, pluginNameSafe.IndexOf('\0')); StringBuilder msg = new StringBuilder($"#Vypisuji parametry pluginu {pluginNameSafe}") .AppendLine($"Počet parametrů: {plugin.ParameterCount.ToString()}"); for (int paramIndex = 0; paramIndex < plugin.ParameterCount; paramIndex++) { msg.AppendLine ( $"{paramIndex.ToString()}"); SaveParamDetails(plugin.GetParameterInfo(paramIndex), msg); msg.AppendLine(); }/*for*/ msg.AppendLine(); return msg; }/*fnc*/ string listener = GetPluginDetails(_fmodSystem.CreateDSPByPlugin(_listenerPlugin)).ToString(); string soundField = GetPluginDetails(_fmodSystem.CreateDSPByPlugin(_soundFieldPlugin)).ToString(); string source = GetPluginDetails (_fmodSystem.CreateDSPByPlugin(_sourcePlugin)).ToString(); Clipboard.SetText(listener +soundField +source); MessageBox.Show(listener); MessageBox.Show(soundField); MessageBox.Show(source); Application.Current.Shutdown(); }/*mtd*/
}/*mtd*/ /// <summary> /// KOnstruktor inicializuje základní třídu, z níž jsou odvozeny třídy pro DSP efekty. /// </summary> /// <param name="fmod">Instance FMODSystem</param> /// <param name="plugin">Instance DSP pluginu</param> /// <param name="channelGroup">Instance skupiny kanálů</param> protected DSPBase(FmodSystem fmod, Plugin plugin, ChannelGroup channelGroup) { _fmod = fmod ?? throw new ArgumentNullException(nameof(fmod)); _plugin = plugin; _dsp = _fmod.CreateDSPByPlugin(_plugin); _channelGroup = channelGroup ?? throw new InvalidOperationException(nameof(channelGroup)); _channelGroup.AddDSP(ChannelControlDSPIndex.DSPTail, _dsp); } /*mtd*/
public static void Init() { _fmodSystem = Fmod.CreateSystem(); _fmodSystem.Init(32); _basePlugin = _fmodSystem.LoadPlugin("resonanceaudio.dll"); _listenerPlugin = _fmodSystem.GetNestedPlugin(_basePlugin, 0); _listenerDSP = _fmodSystem.CreateDSPByPlugin(_listenerPlugin); _soundFieldPlugin = _fmodSystem.GetNestedPlugin(_basePlugin, 1); _sourcePlugin = _fmodSystem.GetNestedPlugin(_basePlugin, 2); _masterChannelGroup = _fmodSystem.MasterChannelGroup; _spatialChannelGroup = _fmodSystem.CreateChannelGroup("spatial"); _masterChannelGroup.AddGroup(_spatialChannelGroup, false); _masterChannelGroup.AddDSP(ChannelControlDSPIndex.DspHead, _listenerDSP); }