Thursday, December 4, 2014

TCPRelay is now open source!

Some people have been requesting that I made TCPRelay open source. I finally decided to put it up on GitHub after adjusting the build processes for them.

Here's the Java version of TCPRelay. The latest released version is 0.1.1 beta. The current code base is 0.2 and has a few small improvements.
Here's the .NET version of TCPRelay. The latest released version is 0.4 beta 1. The latest released versions are based on this.

Have fun coding!

Wednesday, November 5, 2014

New YouTube channel and stuff

Hey there guys! A couple of friends and I have started an YouTube channel about our geeky interests: video games, comic books, fiction books, movies, TV shows, and much more! It's The Geek Salad! (We are not edible.) We're just starting out, so check us out!

I have not forgotten about publishing the TCPRelay source code, the Java synthesizer, the gaming stream, and other stuff I have talked about here. I'm just... a little bit lazy. :P

Tuesday, October 21, 2014

TCPRelay 0.4 alpha 2

NOTE: there is a newer version of TCPRelay here.

TCPRelay 0.4 alpha 2 is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4. Keep in mind that this is an alpha version; some features may not behave correctly.

What's new in this version:
  • General
    • NEW: partial localization support for:
      • [es-AR] Spanish (Argentina)  (thanks to Nicolás Sigal)
      • [nl-NL] Dutch (The Netherlands)  (thanks to TalbotEv)
    • If you wish to add your language, fill this table (make sure to fill both sheets: WinFormStrings and ControlsStrings) and send me via e-mail with the subject TCPRelay translations for [language] [country].
    • NOTE: only the GUI version has support for localization for now.
  • GUI
    • FIXED: [a1] status tooltip did not clear when TCPRelay was started sucessfully after an error.
    • FIXED: [a1] added localization support for several hard-coded strings.
    • FIXED: [a1] component layout updated manually for localization.
    • FIXED: [a2] old ingest server list was shut down. Updated to the new Kraken REST API. Fixes an error when starting TCPRelay.
    Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

    Friday, August 29, 2014

    Writing a synthesizer... in Java

    Java. A synthesizer. I am writing the latter with the former. The first questions most people ask me are: why are you writing a synthesizer? Why Java?

    I am writing a subtractive synthesizer in Java, indeed. "Why?," you would ask. I have two objectives with this project:

    1. Challenge myself, learn something new, and write a piece of software that I'll enjoy to use frequently.
    2. Demonstrate that Java is powerful enough to synthesize decent audio in real time.
    In these series of posts, I am going to describe the challenges and share the knowledge I acquire as I go through this adventure.

    Why a synthesizer?

    Most people don't know about this, but I enjoy electronic music a whole lot (in particular: many forms of Trance, including Uplifting Trance, Goa Trance, Psychedelic TranceDrum & Bass and variations such as Neurofunk; some Breakbeats; and a few other things), enough to actually dabble into production. I have studied a bit of music theory, looked for tutorials, tips and tricks everywhere and followed some YouTube channels from great producers out there to learn more about the tricks of the trade. I have played with lots of different synthesizers and effects and experimented some DAWs, my favorite being FL Studio.

    The natural step after playing with those, as an avid programmer who is always looking for a challenge, is to learn more about how these things work from the inside. The best way to do that? Why yes, to write code!

    Of course, writing a synthesizer (or any piece of software, for that matter) is not only about writing code. You need to know the concepts behind what you're going to do.

    To build the inner workings of a synthesizer, you need a solid foundation on Digital Signal Processing, or DSP for short, and a working knowledge of MIDI if you want it to respond to real instruments and DAWs. It is also useful to learn about Steinberg's VST, one of the most popular software interfaces for audio synthesizers and effects, and similar technologies, such as DXi, RTAS and Audio Units, as these will allow you to use your plugin on pretty much any DAW in existence.

    As an added bonus, writing my own synthesizer means I can add my own touch to my songs. (Although I have yet to finish and publish one...)

    Why Java?

    My language of choice was Java in part due to the experience I have with it, but mostly because I wanted an extra bit of challenge by writing the synthesizer in a language that is usually regarded as inadequate for real-time number-crunching (and prove that it actually is up to the task).

    Since I wanted this synthesizer to integrate with FL Studio, I had to look for a Java library that provided me an implementation of one of the audio plugin interfaces supported by the DAW. jVSTwRapper was my choice; it does a great job of keeping the native-Java overhead very low and provides an API that closely resembles the native one in C++ while providing a bit of object-oriented flavor.

    I also had to write a simple GUI to test the synthesizer itself in Java without having to go through the build process and restart my DAW anytime I made any changes to the code. That in itself was not as challenging as before, as I had written a module music player in Java (supporting MOD, S3M and IT) and the workings are very similar.

    Oh, and Java is the primary language of Android apps. Maybe in the future you could be playing with my synthesizer on your smartphone. How cool is that?

    Stay tuned!

    Saturday, May 10, 2014

    Getting into GitHub

    I think it's about time I did it. I'm finally on GitHub!

    To start things off, I uploaded two of my personal projects: a bunch of Java utility classes, not unlike Guava, and an XInput library for Java which enables coders to use Xbox 360 controllers (and possibly other XInput devices) in Java. Both projects are released under the MIT license, i.e. do whatever you want with them.

    Some people have requested that I make TCPRelay open source. I feel that I need to fix a few things before doing that. The Java version was abandoned on version 0.1.1 beta, back when and were still one and the same, because many people were having issues with Java. I wrote the C# version for that very reason, and because it was just much more comfortable to write a graphical interface with it.

    Both projects have very manual methods of building the packages. I'll be honest: I haven't put enough effort into their build processes because, as stated in the readme file, it was just a quick-n-dirty test that I decided to make usable.

    I don't know. I might put them up as is so you can point and laugh at how ugly the code looks... or you can help me fix their build processes. :)