├── .gitattributes ├── .gitignore ├── .vs └── launchpad-dot-net │ └── v14 │ └── .suo ├── README.md ├── launchpad-dot-net.sln └── launchpad-dot-net ├── Interface.cs ├── Properties └── AssemblyInfo.cs ├── bin └── Debug │ ├── Midi.dll │ ├── launchpad-dot-net.dll │ └── launchpad-dot-net.pdb ├── launchpad-dot-net.csproj └── obj └── Debug ├── DesignTimeResolveAssemblyReferencesInput.cache ├── launchpad-dot-net.csproj.FileListAbsolute.txt ├── launchpad-dot-net.csprojResolveAssemblyReference.cache ├── launchpad-dot-net.dll └── launchpad-dot-net.pdb /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | 42 | # Directories potentially created on remote AFP share 43 | .AppleDB 44 | .AppleDesktop 45 | Network Trash Folder 46 | Temporary Items 47 | .apdisk 48 | -------------------------------------------------------------------------------- /.vs/launchpad-dot-net/v14/.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iUltimateLP/launchpad-dot-net/4f56c2edc0b4b2263b46ca130c9868870ad4c999/.vs/launchpad-dot-net/v14/.suo -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Launchpad.NET 2 | *The easy way to create applications for the NOVATION Launchpad* 3 | 4 | **Welcome to LAUNCHPAD.NET** 5 | This is a simple C# library which allows you to interact with the NOVATION LAUNCHPAD. 6 | You can view the GitHub Wiki over here, in order to learn how the functions work together. 7 | This is only possible because of **jstnryan** and his https://github.com/jstnryan/midi-dot-net 8 | 9 | **Features** 10 | This comes with a few features right now, but I will extend this in the future! 11 | + Automatic MIDI Device sorting (you only see Launchpads, not other MIDI devices 12 | + Easy LED state setting (set LEDs only giving coordinates and velocity) 13 | + LED rect filling (with start and end coordinates) 14 | + Easy handling of Launchpads with a own class for Launchpad 15 | + Easy connecting / disconnecting 16 | 17 | **Bugs?** 18 | No problem, thats why GitHub is here. :joy: 19 | -------------------------------------------------------------------------------- /launchpad-dot-net.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Express 14 for Windows Desktop 4 | VisualStudioVersion = 14.0.23107.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "launchpad-dot-net", "launchpad-dot-net\launchpad-dot-net.csproj", "{2784C4AF-3B96-471B-91B0-1A11C342D375}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {2784C4AF-3B96-471B-91B0-1A11C342D375}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {2784C4AF-3B96-471B-91B0-1A11C342D375}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {2784C4AF-3B96-471B-91B0-1A11C342D375}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {2784C4AF-3B96-471B-91B0-1A11C342D375}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /launchpad-dot-net/Interface.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Midi; 7 | 8 | namespace LaunchpadNET 9 | { 10 | public class Interface 11 | { 12 | private Pitch[,] notes = new Pitch[8, 8] { 13 | { Pitch.A5, Pitch.ASharp5, Pitch.B5, Pitch.C6, Pitch.CSharp6, Pitch.D6, Pitch.DSharp6, Pitch.E6 }, 14 | { Pitch.B4, Pitch.C5, Pitch.CSharp5, Pitch.D5, Pitch.DSharp5, Pitch.E5, Pitch.F5, Pitch.FSharp5 }, 15 | { Pitch.CSharp4, Pitch.D4, Pitch.DSharp4, Pitch.E4, Pitch.F4, Pitch.FSharp4, Pitch.G4, Pitch.GSharp4 }, 16 | { Pitch.DSharp3, Pitch.E3, Pitch.F3, Pitch.FSharp3, Pitch.G3, Pitch.GSharp3, Pitch.A3, Pitch.ASharp3 }, 17 | { Pitch.F2, Pitch.FSharp2, Pitch.G2, Pitch.GSharp2, Pitch.A2, Pitch.ASharp2, Pitch.B2, Pitch.C3 }, 18 | { Pitch.G1, Pitch.GSharp1, Pitch.A1, Pitch.ASharp1, Pitch.B1, Pitch.C2, Pitch.CSharp2, Pitch.D2 }, 19 | { Pitch.A0, Pitch.ASharp0, Pitch.B0, Pitch.C1, Pitch.CSharp1, Pitch.D1, Pitch.DSharp1, Pitch.E1 }, 20 | { Pitch.BNeg1, Pitch.C0, Pitch.CSharp0, Pitch.D0, Pitch.DSharp0, Pitch.E0, Pitch.F0, Pitch.FSharp0 } 21 | }; 22 | 23 | private Pitch[] rightLEDnotes = new Pitch[] { 24 | Pitch.F6, Pitch.G5, Pitch.A4, Pitch.B3, Pitch.CSharp3, Pitch.DSharp2, Pitch.F1, Pitch.G0 25 | }; 26 | 27 | public InputDevice targetInput; 28 | public OutputDevice targetOutput; 29 | 30 | public delegate void LaunchpadKeyEventHandler(object source, LaunchpadKeyEventArgs e); 31 | 32 | public delegate void LaunchpadCCKeyEventHandler(object source, LaunchpadCCKeyEventArgs e); 33 | 34 | /// 35 | /// Event Handler when a Launchpad Key is pressed. 36 | /// 37 | public event LaunchpadKeyEventHandler OnLaunchpadKeyPressed; 38 | public event LaunchpadCCKeyEventHandler OnLaunchpadCCKeyPressed; 39 | 40 | public class LaunchpadCCKeyEventArgs : EventArgs 41 | { 42 | private int val; 43 | public LaunchpadCCKeyEventArgs(int _val) 44 | { 45 | val = _val; 46 | } 47 | public int GetVal() 48 | { 49 | return val; 50 | } 51 | } 52 | 53 | /// 54 | /// EventArgs for pressed Launchpad Key 55 | /// 56 | public class LaunchpadKeyEventArgs : EventArgs 57 | { 58 | private int x; 59 | private int y; 60 | public LaunchpadKeyEventArgs(int _pX, int _pY) 61 | { 62 | x = _pX; 63 | y = _pY; 64 | } 65 | public int GetX() 66 | { 67 | return x; 68 | } 69 | public int GetY() 70 | { 71 | return y; 72 | } 73 | } 74 | 75 | /// 76 | /// Creates a text scroll. 77 | /// 78 | /// 79 | /// 80 | /// 81 | /// 82 | public void createTextScroll(string text, int speed, bool looping, int velo) 83 | { 84 | byte[] sysexHeader = { 240, 00, 32, 41, 2, 4 }; 85 | byte[] sysexStop = { 247 }; 86 | byte operation = 20; 87 | 88 | byte _velocity = (byte)velo; 89 | byte _speed = (byte)speed; 90 | byte _loop = Convert.ToByte(looping); 91 | byte[] _text = { }; 92 | 93 | byte[] finalArgs = { operation, _velocity, _loop, _speed }; 94 | 95 | List charList = new List(); 96 | foreach(char c in text) 97 | { 98 | int unicode = c; 99 | if (unicode < 128) 100 | charList.Add(Convert.ToByte(unicode)); 101 | } 102 | _text = charList.ToArray(); 103 | 104 | byte[] finalBytes = sysexHeader.Concat(finalArgs.Concat(_text.Concat(sysexStop))).ToArray(); 105 | 106 | targetOutput.SendSysEx(finalBytes); 107 | } 108 | 109 | public void stopLoopingTextScroll() 110 | { 111 | byte[] stop = { 240, 0, 32, 41, 2, 24, 20, 247 }; 112 | targetOutput.SendSysEx(stop); 113 | } 114 | 115 | private void sysExAnswer(SysExMessage m) 116 | { 117 | byte[] msg = m.Data; 118 | byte[] stopBytes = { 240, 0, 32, 41, 2, 24, 21, 247 }; 119 | } 120 | 121 | private void midiPress(Midi.NoteOnMessage msg) 122 | { 123 | if (OnLaunchpadKeyPressed != null && !rightLEDnotes.Contains(msg.Pitch)) 124 | { 125 | OnLaunchpadKeyPressed(this, new LaunchpadKeyEventArgs(midiNoteToLed(msg.Pitch)[0], midiNoteToLed(msg.Pitch)[1])); 126 | } 127 | else if (OnLaunchpadKeyPressed != null && rightLEDnotes.Contains(msg.Pitch)) 128 | { 129 | OnLaunchpadCCKeyPressed(this, new LaunchpadCCKeyEventArgs(midiNoteToSideLED(msg.Pitch))); 130 | } 131 | } 132 | 133 | public int midiNoteToSideLED(Pitch p) 134 | { 135 | for (int y = 0; y <= 7; y++) 136 | { 137 | if (rightLEDnotes[y] == p) 138 | { 139 | return y; 140 | } 141 | } 142 | return 0; 143 | } 144 | 145 | /// 146 | /// Returns the LED coordinates of a MIdi note 147 | /// 148 | /// The Midi Note. 149 | /// The X,Y coordinates. 150 | public int[] midiNoteToLed(Pitch p) 151 | { 152 | for (int x = 0; x <= 7; x++) 153 | { 154 | for (int y = 0; y <= 7; y++) 155 | { 156 | if (notes[x,y] == p) 157 | { 158 | int[] r1 = { x, y }; 159 | return r1; 160 | } 161 | } 162 | } 163 | int[] r2 = { 0, 0 }; 164 | return r2; 165 | } 166 | 167 | /// 168 | /// Returns the equilavent Midi Note to X and Y coordinates. 169 | /// 170 | /// The X coordinate of the LED 171 | /// The Y coordinate of the LED 172 | /// The midi note 173 | public Pitch ledToMidiNote(int x, int y) 174 | { 175 | return notes[x, y]; 176 | } 177 | 178 | public void clearAllLEDs() 179 | { 180 | for (int x = 0; x < 8; x++) 181 | { 182 | for (int y = 0; y < 8; y++) 183 | { 184 | setLED(x, y, 0); 185 | } 186 | } 187 | 188 | for (int ry = 0; ry < 8; ry++) 189 | { 190 | setSideLED(ry, 0); 191 | } 192 | 193 | for (int tx = 1; tx < 9; tx++) 194 | { 195 | setTopLEDs(tx, 0); 196 | } 197 | } 198 | 199 | /// 200 | /// Fills Top Row LEDs. 201 | /// 202 | /// 203 | /// 204 | /// 205 | public void fillTopLEDs(int startX, int endX, int velo) 206 | { 207 | for (int x = 1; x < 9; x++) 208 | { 209 | if (x >= startX && x <= endX) 210 | { 211 | setTopLEDs(x, velo); 212 | } 213 | } 214 | } 215 | 216 | /// 217 | /// Fills a region of Side LEDs. 218 | /// 219 | /// 220 | /// 221 | /// 222 | public void fillSideLEDs(int startY, int endY, int velo) 223 | { 224 | for (int y = 0; y < rightLEDnotes.Length; y++) 225 | { 226 | if (y >= startY && y <= endY) 227 | { 228 | setSideLED(y, velo); 229 | } 230 | } 231 | } 232 | 233 | /// 234 | /// Creates a rectangular mesh of LEDs. 235 | /// 236 | /// Start X coordinate 237 | /// Start Y coordinate 238 | /// End X coordinate 239 | /// End Y coordinate 240 | /// Painting velocity 241 | public void fillLEDs(int startX, int startY, int endX, int endY, int velo) 242 | { 243 | for (int x = 0; x < notes.Length; x++) 244 | { 245 | for (int y = 0; y < notes.Length; y++) 246 | { 247 | if (x >= startX && y >= startY && x <= endX && y <= endY) 248 | setLED(x, y, velo); 249 | } 250 | } 251 | } 252 | 253 | /// 254 | /// Sets a Top LED of the launchpad 255 | /// 256 | /// 257 | /// 258 | public void setTopLEDs(int x, int velo) 259 | { 260 | byte[] data = { 240, 0, 32, 41, 2, 24, 10, Convert.ToByte(103+x), Convert.ToByte(velo), 247 }; 261 | targetOutput.SendSysEx(data); 262 | } 263 | 264 | /// 265 | /// Sets a Side LED of the Launchpad. 266 | /// 267 | /// The height of the right Side LED. 268 | /// Velocity index. 269 | public void setSideLED(int y, int velo) 270 | { 271 | targetOutput.SendNoteOn(Channel.Channel1, rightLEDnotes[y], velo); 272 | } 273 | 274 | /// 275 | /// Sets a LED of the Launchpad. 276 | /// 277 | /// The X coordinate. 278 | /// The Y coordinate. 279 | /// The velocity. 280 | public void setLED(int x, int y, int velo) 281 | { 282 | try 283 | { 284 | targetOutput.SendNoteOn(Channel.Channel1, notes[x, y], velo); 285 | } 286 | catch (Midi.DeviceException) 287 | { 288 | Console.WriteLine("<< LAUNCHPAD.NET >> Midi.DeviceException"); 289 | throw; 290 | } 291 | } 292 | 293 | /// 294 | /// Returns all connected and installed Launchpads. 295 | /// 296 | /// Returns LaunchpadDevice array. 297 | public LaunchpadDevice[] getConnectedLaunchpads() 298 | { 299 | List tempDevices = new List(); 300 | 301 | foreach (InputDevice id in Midi.InputDevice.InstalledDevices) 302 | { 303 | foreach (OutputDevice od in Midi.OutputDevice.InstalledDevices) 304 | { 305 | if (id.Name == od.Name) 306 | { 307 | if (id.Name.ToLower().Contains("launchpad")) 308 | { 309 | tempDevices.Add(new LaunchpadDevice(id.Name)); 310 | } 311 | } 312 | } 313 | } 314 | 315 | return tempDevices.ToArray(); 316 | } 317 | 318 | /// 319 | /// Function to connect with a LaunchpadDevice 320 | /// 321 | /// The Launchpad to connect to. 322 | /// Returns bool if connection was successful. 323 | public bool connect(LaunchpadDevice device) 324 | { 325 | foreach(InputDevice id in Midi.InputDevice.InstalledDevices) 326 | { 327 | if (id.Name.ToLower() == device._midiName.ToLower()) 328 | { 329 | targetInput = id; 330 | id.Open(); 331 | targetInput.NoteOn += new InputDevice.NoteOnHandler(midiPress); 332 | targetInput.StartReceiving(null); 333 | } 334 | } 335 | foreach (OutputDevice od in Midi.OutputDevice.InstalledDevices) 336 | { 337 | if (od.Name.ToLower() == device._midiName.ToLower()) 338 | { 339 | targetOutput = od; 340 | od.Open(); 341 | } 342 | } 343 | 344 | return true; // targetInput.IsOpen && targetOutput.IsOpen; 345 | } 346 | 347 | /// 348 | /// Disconnects a given LaunchpadDevice 349 | /// 350 | /// The Launchpad to disconnect. 351 | /// Returns bool if disconnection was successful. 352 | public bool disconnect(LaunchpadDevice device) 353 | { 354 | if (targetInput.IsOpen && targetOutput.IsOpen) 355 | { 356 | targetInput.StopReceiving(); 357 | targetInput.Close(); 358 | targetOutput.Close(); 359 | } 360 | return !targetInput.IsOpen && !targetOutput.IsOpen; 361 | } 362 | 363 | public class LaunchpadDevice 364 | { 365 | public string _midiName; 366 | //public int _midiDeviceId; 367 | 368 | public LaunchpadDevice(string name) 369 | { 370 | _midiName = name; 371 | } 372 | } 373 | } 374 | } 375 | -------------------------------------------------------------------------------- /launchpad-dot-net/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Allgemeine Informationen über eine Assembly werden über die folgenden 6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, 7 | // die einer Assembly zugeordnet sind. 8 | [assembly: AssemblyTitle("launchpad-dot-net")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("launchpad-dot-net")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar 18 | // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von 19 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. 20 | [assembly: ComVisible(false)] 21 | 22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird 23 | [assembly: Guid("2784c4af-3b96-471b-91b0-1a11c342d375")] 24 | 25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: 26 | // 27 | // Hauptversion 28 | // Nebenversion 29 | // Buildnummer 30 | // Revision 31 | // 32 | // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 33 | // übernehmen, indem Sie "*" eingeben: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /launchpad-dot-net/bin/Debug/Midi.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iUltimateLP/launchpad-dot-net/4f56c2edc0b4b2263b46ca130c9868870ad4c999/launchpad-dot-net/bin/Debug/Midi.dll -------------------------------------------------------------------------------- /launchpad-dot-net/bin/Debug/launchpad-dot-net.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iUltimateLP/launchpad-dot-net/4f56c2edc0b4b2263b46ca130c9868870ad4c999/launchpad-dot-net/bin/Debug/launchpad-dot-net.dll -------------------------------------------------------------------------------- /launchpad-dot-net/bin/Debug/launchpad-dot-net.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iUltimateLP/launchpad-dot-net/4f56c2edc0b4b2263b46ca130c9868870ad4c999/launchpad-dot-net/bin/Debug/launchpad-dot-net.pdb -------------------------------------------------------------------------------- /launchpad-dot-net/launchpad-dot-net.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {2784C4AF-3B96-471B-91B0-1A11C342D375} 8 | Library 9 | Properties 10 | launchpad_dot_net 11 | launchpad-dot-net 12 | v4.5 13 | 512 14 | 15 | 16 | true 17 | full 18 | false 19 | bin\Debug\ 20 | DEBUG;TRACE 21 | prompt 22 | 4 23 | 24 | 25 | pdbonly 26 | true 27 | bin\Release\ 28 | TRACE 29 | prompt 30 | 4 31 | 32 | 33 | 34 | False 35 | bin\Debug\Midi.dll 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 58 | -------------------------------------------------------------------------------- /launchpad-dot-net/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iUltimateLP/launchpad-dot-net/4f56c2edc0b4b2263b46ca130c9868870ad4c999/launchpad-dot-net/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache -------------------------------------------------------------------------------- /launchpad-dot-net/obj/Debug/launchpad-dot-net.csproj.FileListAbsolute.txt: -------------------------------------------------------------------------------- 1 | c:\users\johnny\documents\visual studio 2015\Projects\launchpad-dot-net\launchpad-dot-net\bin\Debug\launchpad-dot-net.dll 2 | c:\users\johnny\documents\visual studio 2015\Projects\launchpad-dot-net\launchpad-dot-net\bin\Debug\launchpad-dot-net.pdb 3 | c:\users\johnny\documents\visual studio 2015\Projects\launchpad-dot-net\launchpad-dot-net\obj\Debug\launchpad-dot-net.csprojResolveAssemblyReference.cache 4 | c:\users\johnny\documents\visual studio 2015\Projects\launchpad-dot-net\launchpad-dot-net\obj\Debug\launchpad-dot-net.dll 5 | c:\users\johnny\documents\visual studio 2015\Projects\launchpad-dot-net\launchpad-dot-net\obj\Debug\launchpad-dot-net.pdb 6 | -------------------------------------------------------------------------------- /launchpad-dot-net/obj/Debug/launchpad-dot-net.csprojResolveAssemblyReference.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iUltimateLP/launchpad-dot-net/4f56c2edc0b4b2263b46ca130c9868870ad4c999/launchpad-dot-net/obj/Debug/launchpad-dot-net.csprojResolveAssemblyReference.cache -------------------------------------------------------------------------------- /launchpad-dot-net/obj/Debug/launchpad-dot-net.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iUltimateLP/launchpad-dot-net/4f56c2edc0b4b2263b46ca130c9868870ad4c999/launchpad-dot-net/obj/Debug/launchpad-dot-net.dll -------------------------------------------------------------------------------- /launchpad-dot-net/obj/Debug/launchpad-dot-net.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iUltimateLP/launchpad-dot-net/4f56c2edc0b4b2263b46ca130c9868870ad4c999/launchpad-dot-net/obj/Debug/launchpad-dot-net.pdb --------------------------------------------------------------------------------