public static uint midiOutShortMsg(IntPtr hMidiOut, uint dwMsg) { MemoryStream outputStream = new MemoryStream(); byte[] bytes = BitConverter.GetBytes(dwMsg); // Array.Reverse outputStream.Write(bytes, 0, bytes.Length); s_midiOutPort.SendBuffer(outputStream.GetWindowsRuntimeBuffer()); return(MidiWinApi.MMSYSERR_NOERROR); }
public void SendSystemExclusive(byte[] bytes) { IBuffer buffer = bytes.AsBuffer(); midiOutPort.SendBuffer(buffer); //MidiSystemExclusiveMessage midiMessageToSend = new MidiSystemExclusiveMessage(buffer); //midiOutPort.SendMessage(midiMessageToSend); //Task task = Task.Run(() => //{ // midiOutPort.SendMessage(midiMessageToSend); //}); //task = null; //GC.Collect(); }
public static IAsyncOperationWithProgress <int, MidiSysExStatusReport> SendSysExStreamAsyncWithProgress( IRandomAccessStream inputStream, IMidiOutPort outputPort, uint bufferSize, uint sendDelayMilliseconds = DefaultDelayBetweenBuffers) { return(AsyncInfo.Run <int, MidiSysExStatusReport>((token, progress) => Task.Run(async() => { using (var dataReader = new DataReader(inputStream)) { uint bytesRead = 0; // allocate our message buffer var buffer = new byte[bufferSize]; System.Diagnostics.Debug.WriteLine("Using transfer buffer size " + bufferSize + " bytes."); progress.Report(new MidiSysExStatusReport() { Stage = MidiSysExStatusStages.SendingData, BytesRead = 0 }); // reset/reload the input stream inputStream.Seek(0); await dataReader.LoadAsync((uint)inputStream.Size); bytesRead = 0; // start actually sending data uint buffIndex = 0; while (dataReader.UnconsumedBufferLength > 0) { byte b = 0; buffIndex = 0; // This loop builds up one complete sysex message from f0 to f7 while (b != SysexEndMessageByte && dataReader.UnconsumedBufferLength > 0) { // if the user canceled, throw, so we get ejected from this token.ThrowIfCancellationRequested(); // read next character b = dataReader.ReadByte(); // append to buffer buffer[buffIndex] = b; buffIndex += 1; bytesRead += 1; } progress.Report(new MidiSysExStatusReport() { Stage = MidiSysExStatusStages.SendingData, BytesRead = bytesRead }); uint length = buffIndex; var messageBuffer = new Windows.Storage.Streams.Buffer(length); buffer.CopyTo(0, messageBuffer, 0, (int)length); messageBuffer.Length = length; //foreach (byte db in messageBuffer.ToArray()) //{ // System.Diagnostics.Debug.Write(string.Format("{0:X2} ", db)); //} //System.Diagnostics.Debug.WriteLine(""); outputPort.SendBuffer(messageBuffer); if (sendDelayMilliseconds > 0) { await Task.Delay((int)sendDelayMilliseconds); } } progress.Report(new MidiSysExStatusReport() { Stage = MidiSysExStatusStages.Complete, BytesRead = bytesRead }); return 0; } }))); }