public void Execute( VstBuffer <T> source, PcmBuffer <T> dest ) { ArgumentNullException.ThrowIfNull(source); ArgumentNullException.ThrowIfNull(dest); dest.Log.Marge(source.Log); var targetIdx = 0; var target = new Span <T>(dest.Buffer.Target); var left = new ReadOnlySpan <T>(source.GetChannelBuffer(0)); var right = new ReadOnlySpan <T>(source.GetChannelBuffer(1)); dest.Log.Add("[to pcm] start", _counter.NowTicks); for (var idx = 0; idx < left.Length; idx++) { target[targetIdx++] = left[idx]; target[targetIdx++] = right[idx]; } dest.Log.Add("[to pcm] end", _counter.NowTicks); }
public void Test1() { var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); using var loggerFactory = LoggerFactory.Create(builder => { builder.AddFilter("Momiji", LogLevel.Debug); builder.AddFilter("Microsoft", LogLevel.Warning); builder.AddFilter("System", LogLevel.Warning); builder.AddConsole(); builder.AddDebug(); }); var logger = loggerFactory.CreateLogger <VstUnitTest>(); using var dllManager = new DllManager(configuration, loggerFactory); var counter = new ElapsedTimeCounter(); var blockSize = 2880; var midiEventInput = new BufferBlock <MIDIMessageEvent2>(); using var buffer = new VstBuffer <double>(blockSize, 2); using var vst = new AudioMaster <double>(48000, blockSize, loggerFactory, counter, dllManager); var effect = vst.AddEffect("Dexed.dll"); var effect2 = vst.AddEffect("Synth1 VST.dll"); //var aeffect = effect.GetAEffect(); //for (int i = 0; i < 1/*aeffect.numParams*/; i++) //{ // var label = effect.GetParameterLabel(i); // var name = effect.GetParameterName(i); // var display = effect.GetParameterDisplay(i); // var value = effect.GetParameter(i); // logger.LogInformation($"VST Parameter {i}:{label}:{name}:{display}:{value}"); //} { var nowTime = counter.NowTicks / 10; midiEventInput.Post(new MIDIMessageEvent2() { midiMessageEvent = { receivedTime = nowTime, data0 = 0x90, data1 = 0x20, data2 = 0x40, data3 = 0 }, receivedTimeUSec = nowTime }); midiEventInput.Post(new MIDIMessageEvent2() { midiMessageEvent = { receivedTime = nowTime, data0 = 0x90, data1 = 0x21, data2 = 0x40, data3 = 0 }, receivedTimeUSec = nowTime }); effect.ProcessEvent(nowTime, midiEventInput); effect.ProcessReplacing(nowTime, buffer); } { var nowTime = counter.NowTicks / 10; midiEventInput.Post(new MIDIMessageEvent2() { midiMessageEvent = { receivedTime = nowTime, data0 = 0x90, data1 = 0x30, data2 = 0x40, data3 = 0 }, receivedTimeUSec = nowTime }); effect.ProcessEvent(nowTime, midiEventInput); effect.ProcessReplacing(nowTime, buffer); } { var nowTime = counter.NowTicks / 10; midiEventInput.Post(new MIDIMessageEvent2() { midiMessageEvent = { receivedTime = nowTime, data0 = 0x90, data1 = 0x40, data2 = 0x40, data3 = 0 }, receivedTimeUSec = nowTime }); effect.ProcessEvent(nowTime, midiEventInput); effect.ProcessReplacing(nowTime, buffer); } { var nowTime = counter.NowTicks / 10; midiEventInput.Post(new MIDIMessageEvent2() { midiMessageEvent = { receivedTime = nowTime, data0 = 0x90, data1 = 0x50, data2 = 0x40, data3 = 0 }, receivedTimeUSec = nowTime }); effect.ProcessEvent(nowTime, midiEventInput); effect.ProcessReplacing(nowTime, buffer); } }