Categories
Ableton Live 9 Articles Blog DAW Software Filters Metal Mix Codex Mixing Music Solution Technology

Mix Codex::The Ultimate Hybrid Guitar Rig

INTRODUCTION

Probably want to talk about splitting a DI Signal into the DAW to have the re-amp tone and also recording the amped signal with two notes hardware to power soak and capture the coloured tone.

Orange Amplifiers Dark Terror 15 Watt Head
Bugera Amps Trirec Infinitum
Bugera Amps Trirec Infinitum

Randall Amps RG13 Preamp

Randall Amps RG13

Randall Amplifiers RD412D 4 x 12 Cab

Randall RD412 Vintage 30 Loaded 4 x 12 Cab

Native Instruments Guitar Rig 5 Pro

Initial stage:

Stomp compressor->Octaver->Whammy->Wah

Pre-section:
Talk about the clean boost, mid boost eq.

First Gain Stage:
tubescreamer and distortion in front of the amp models to give an unbelievable variation in tone, sustain and also controlling gain from guitar volume knob.

Amp Stage:

Waves GTR3 Guitar Tool Rack

Native Instruments Kore 2

Ableton Live 9 Suite

Marshall 9100 Dual Monobloc Valve Rackmount Amplifier

Marshall 9100 Dual Monobloc Valve Amplifier

Marshall 1960A and B Cabs in Red Tolex

[sc_embed_player fileurl=”https://www.dividetoinfinity.com/wp-content/uploads/2017/07/03032017-Equinox.mp3″ autoplay=false volume=”50″ loops=”true”]

Reverse DI for Reamping

Guide to Guitar Impulse Responses

1/4 Inch Solderless Audio Jacks
Solderless XLR Jacks
USB Jack for pedalboard
Mogami W2314 Miniature Instrument Cable
Squareplug SP400 Low Profile Flat TS (up to 4.5mm OD)
Switchcraft 380 1/4″ Mono 2 Conductor Cable Mount Plug, 1″ Long Nickel Metal Handle w/Solder Lugs

Categories
API Articles Blog Coders Codex Development JUCE Linux Development Portfolio Programming

Coders Codex::Command Line Arguments Example for JUCE C++

INTRODUCTION

I base this article around the need to pass command line parameters to a running program. Please note this does not seem to work with Windows yet (working in Linux and OSX not tested).

DISCUSSION

The idea is to use a set of command line parameters to execute a set of built in software tests between two or more instances of a given software and then automatically generate unit test reports. The whole thing can be automated via the sequencing of various tests in a bash script or batch file.

//============================================================================
// Name        : Command Line Arguments
// Author      : Divide To Infinity
// Version     : V1.0
// Copyleft    : Divide To Infinity 2015 - GNU GPL v2
// Description : JUCE Command Line Arguments Demo C++11, Ansi-style
//============================================================================

#include "../JuceLibraryCode/JuceHeader.h"

class CommandLineArguments : public JUCEApplication
{
    public:
        CommandLineArguments(){}
        ~CommandLineArguments(){}

        void initialise(const String& commandLine) override
        {
            Logger * log = Logger::getCurrentLogger();
            log->writeToLog(getApplicationName());

            // Now list the command line arguments
            log->writeToLog("See the entered command line parameters below: ");
            log->writeToLog(JUCEApplicationBase::getCommandLineParameters());
        }

        void shutdown() override {}

        const String getApplicationName() override
        {
            return "CommandLineArguments";
        }

        const String getApplicationVersion() override
        {
            return "1.0";
        }

    private:

};

START_JUCE_APPLICATION(CommandLineArguments);

FINDINGS

//============================================================================
// Name        : CommandLineArguments
// Author      : Divide To Infinity
// Version     : V1.0
// Copyleft    : Divide To Infinity 2015 - GNU GPL v2
// Description : JUCE Command Line Arguments Demo C++11, Ansi-style
//============================================================================

#include "../JuceLibraryCode/JuceHeader.h"

using namespace std;

class CommandLineArguments : public JUCEApplication
{
    public:
        CommandLineArguments(){}
        ~CommandLineArguments(){}

        void initialise(const String& commandLine) override
        {
            Logger * log = Logger::getCurrentLogger();
            log->writeToLog(getApplicationName());

            // To get the parameters as an array, you can call JUCEApplication::getCommandLineParameters()

            // Now list the command line arguments
            log->writeToLog("See the entered command line parameters below: ");
            log->writeToLog(JUCEApplicationBase::getCommandLineParameters());
            cout << endl; // Empty line : 0

            // Now lets try and do something with the arguments
            // First use the getCommandLineParameterArray which returns a tokenised array
            // of Command Line args separated by whitespace
            StringArray argTokens = StringArray(JUCEApplicationBase::getCommandLineParameterArray());

            for(int i = 0; i < argTokens.size(); ++i)
            {
                // Print out each arg line by line
                log->writeToLog(argTokens[i]);

                // We can use these args to call methods
                if (argTokens[i] == "-i")
                {
                    cmdTest();
                }
                // Then use args with parameters and error messages
            }

        }

        void cmdTest()
        {
            cout << "cmdTest called" << endl;
        }

        void shutdown() override {}

        const String getApplicationName() override
        {
            return "CommandLineArguments";
        }

        const String getApplicationVersion() override
        {
            return "1.0";
        }

        void unhandledException(const std::exception *, const String &sourceFilename, int lineNumber) override
        {
            // Here we can use this method to catch exceptions and generate reports
        }

    private:

};

START_JUCE_APPLICATION(CommandLineArguments);

LINKS
Command Line Arguments discussion on the JUCE forum
JUCEApplicationBase Class docs

Categories
Articles Blog Technology Video Video Codex

Video Codex::Panasonic Lumix DMC-GF6 Quick Review

INTRODUCTION

Here is a quick review of the Panasonic Lumix DMC-GF6 Digital Camera (Micro 4/3 Sensor). First up is the unboxing video below which is also filmed with another Panasonic Lumix DMC-GF6 in auto-focus.


DISCUSSION

The range and versatility of this camera is truly astounding with the standard kit lens. Even for a novice such as myself I was able to get some brilliant creative shots in low light using the manual settings. This camera really does come to life when using the manual settings and although they are not as easy to tweak and control as Canon DSLR’s, they certainly do give a wide palette of variation.

FINDINGS

The maximum video recording time for the AVCHD and MP4 mode is 29 minutes and 59 seconds as expected due to EU regulations imposed on all digital cameras. See here for more information on why the 30 minute recording time limit is placed on digital cameras. If you require more recording time onboard, look at the Blackmagic range of cinema cameras. As expected they would have paid the additional EU taxes on being able to record for longer times. The time limit is imposed via red tape and is a legal president which stops manufacturers of cameras which limit the recording time, otherwise this is declared as being a video camera. There is also a time out for standby and a menu will display on the HDMI output when left unattended for a period of time. This is applied to many cameras and consumer camcorders to stop live streamers from using anything other than professional grade video cameras for this purpose. For users of Canon DSLR’s there is discussion of extending the recording time via Magic Lantern here. The recording of RAW Video is not possible, this is only available on Canon DSLR with Magic Lantern and Black Magic design Cameras.

LINKS
Camera Labs Review Panasonic Lumic DMC-GF6
DailyTech Panasonic Lumix DMC-GF6 Review
Photo Review Panasonic Lumix DMC-GF6 Review
Lumix GF6 Specs with Max Recording Time 29:59
Olympus M. Zuiko Digital ED 45mm f1.8 (Silver) Lens for Olympus and Panasonic Micro 4/3 Cameras

Categories
Articles Blog C++11 Coders Codex Design Patterns Development Featured GNU C++ Languages Linux Development Programming Science & Technology Solution Technology UML

Coders Codex::How to Generate C++ Code from a UML Class Diagram in Linux

INTRODUCTION

UML Class Generated in Dia

DISCUSSION

sudo apt-get install dia dia2code

FINDINGS

LINKS
C++ Code Generation from UML on Stack Overflow

Categories
API Articles Blog C# Coders Codex Creative Computing Development Featured Games Development Graphic Displays IDE Installation Interactive Installation Languages Library London Network OpenGL OpenGL Programming Portfolio Programming Science & Technology Solution Technology Video Visual Studio 2012 Visuals

Coders Codex::Decoding Video Streams to Textures in Unity 3d

INTRODUCTION

Here we will decode an Ogg Theora file streaming from the internet onto a plane surface scripted in Unity 3d.

DISCUSSION

The fastest method to do this as of writing is to look here and then attach this to the camera in a new unity 3d scene.

FINDINGS

The Unity docs do not seem to show a C# source example, so in full Blue Peter (UK) style: Here is one I made earlier.

//============================================================================
// Name        : WWWVideoTexture (Unity 3d)
// Author      : Divide To Infinity
// Version     : V1.0
// Copyright   : GNU GPL v2
// Description : C# Monobehaviour Script for Decoding Video Streams to Texture
//============================================================================

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(GUITexture))]
[RequireComponent(typeof(AudioSource))]
public class WWWVideoTexture : MonoBehaviour
{
    public string url = "http://playground.html5rocks.com/samples/html5_misc/chrome_japan.ogv";
    IEnumerator Start()
    {
        WWW www = new WWW(url);
        MovieTexture movieTexture = www.movie;
        while (!movieTexture.isReadyToPlay)
        {
            yield return null;
        }
        
        GUITexture gt = GetComponent();
        gt.texture = movieTexture;
        transform.localScale = new Vector3(0, 0, 0);
        transform.position = new Vector3(0.1f, 0.25f, 0);

        gt.pixelInset = new Rect(0, 0, movieTexture.width / 2, movieTexture.height / 2);

        AudioSource aud = GetComponent();
        aud.clip = movieTexture.audioClip;
        movieTexture.Play();
        aud.Play();
    }
}

And the screenshot:

WWWVideoTexture.cs in Unity 3d

LINKS

WWW.movie in Unity 3d Scripting API
Video Streaming solutions for Unity3d on Stack Overflow
C# pixelInset problem on UnityAnswers
Streaming Textures in Unity3d
Video Playback Speed Discussion on Unity 3d Forums

Categories
Blog Creative Computing Development Downloads DSP Electronics FAQ Featured Filters Graphic Displays Hardware Installation Interactive Installation Lectures Library Lighting London MIDI Music Network Open Sound Control Physical computing Podcast Portfolio Programming Science & Technology SK Pang Synthesis Technology Tutorial Visuals

Divide To Infinity – Advanced Audiovisual Processing with OpenFrameWorks C++ Libraries

MIDI Maximilian Scope Synth

This program requires the use of a MIDI controller to work – compiled example can be found in the /bin folder. This requires .NET framework 4 (not 4.5) and Visual Studio 2010 libraries to be installed if you are on Windows. The program features a scope adapted from the ofxMaxim example in OpenFrameWorks and comprises of a mono legato triggering synthesizer. Filter cutoff is controlled by momentary on velocity switching and oscillator gate is permanantely on due to having no ADSR and quick and dirty MIDI triggering logic.

Bubblesort:

This program fills an array with random values based on the screen height and iterates through sending the value to a sawtooth oscillator. This implements switch cases – pressing 1 will Bubblesort the array to give a saw glissandi – while pressing 2 will randomise the array data again.

EEG Maximilian:

This was intended to be the main project however due to the nature of how the Emotiv headset examples are organised, I was sadly unable to suitably map the functionality to the way that OpenFrameWorks operates – this code is provided only as a means to see where I am with implementing this. The majority of the code is cut up examples from the emotiv library mixed in with MIDI and Maximilian.

MIDI Example:

I have modified this code slightly from the original supplied by the ofxMidi author Chris O’Shea. I added to the example by listing all MIDI ports by pressing ‘l’ for list and changing midi ports on the fly using a switch case with numeric input for easy testing.

videoPlayerTestModified:

This is a simple test to see how well the Quicktime library works on windows 7 x64, I simply looked into the API and set up a few cases by pressing 1,2,3 and 4 – video play speed, pause and play direction. Sadly this not work with my original video which had a higher bandwidth (had an error code -50 – I could not find the solution anywhere) so this uses the standard ‘fingers’ video.

The link to all of the above source code and materials can be found here.

Unzip these archives into your ‘myApps’ directory in OpenFrameworks.

For more info on OpenFrameWorks and creative coding as an art form, go here.

If you are on Windows, you can execute the debug app in the ‘bin’ folder provided you have all the correct Microsoft C++ Redistributable installed.

Precomplied versions of all projects can be found in their associated /bin folder for easy testing.

Categories
Articles Blog DAW Software Downloads MIDI Mix Codex Mixing Music Native Instruments Maschine

FXpansion BFD2 template for Native Instruments Maschine

Native Instruments Maschine has excellent drum pads, so here is a simple ‘drummer perspective’ Maschine template for BFD2.