/*
  ==============================================================================

   This file is part of the JUCE library - "Jules' Utility Class Extensions"
   Copyright 2004-9 by Raw Material Software Ltd.

  ------------------------------------------------------------------------------

   JUCE can be redistributed and/or modified under the terms of the GNU General
   Public License (Version 2), as published by the Free Software Foundation.
   A copy of the license is included in the JUCE distribution, or can be found
   online at www.gnu.org/licenses.

   JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

  ------------------------------------------------------------------------------

   To release a closed-source product which uses JUCE, commercial licenses are
   available: visit www.rawmaterialsoftware.com/juce for more information.

  ==============================================================================
*/

#ifndef __JUCE_PLUGIN_CHARACTERISTICS_H__
#define __JUCE_PLUGIN_CHARACTERISTICS_H__


//==============================================================================
/*  All of the following settings need to be defined for your plugin.

    Go through each of these definitions and check that it's correctly
    set-up before trying to do a build.
*/


//==============================================================================
/*                          Plugin Formats to build                           */

#define JUCE_ObjCExtraSuffix           tal_vocoder2

//==============================================================================
/*                              Generic settings                              */

/** The name of your plugin. (Try to keep this as short as possible)
*/
#define JucePlugin_Name                     "TAL Vocoder II Plugin"

/** A longer decription of your plugin.
*/
#define JucePlugin_Desc                     "TAL-Vocoder-II"

/** The name of your company. (Try to keep this as short as possible)
*/
#define JucePlugin_Manufacturer             "TAL-Togu Audio Line"

/** A four-character code for your company.
    Use single quotes - this isn't a string!
*/
#define JucePlugin_ManufacturerCode         'TOGU'

/** A unique four-character code for your plugin.
    Use single quotes - this isn't a string!

    Note that for AU compatibility, this must contain at least one
    upper-case letter.
*/
#define JucePlugin_PluginCode               'VOC2'

//==============================================================================
/** The maximum number of channels of audio input that the plugin can handle.

    The actual number of channels supplied may be less than this, depending on the host.
    For VSTs, you specify a maximum number of channels, for AUs and RTAS a set
    of channel configurations is specified in JucePlugin_PreferredChannelConfigurations
    and the host will choose one of these, but you should still set the max number of
    channels correctly.

    As soon as a plugin's prepareToPlay() method is called, you can find out the actual
    number of channels that will be used with the AudioProcessor::getNumInputChannels()
    method.
*/
#define JucePlugin_MaxNumInputChannels              2

/** The maximum number of channels of audio output that the plugin can handle.

    The actual number of channels supplied may be less than this, depending on the host.
    For VSTs, you specify a maximum number of channels, for AUs and RTAS a set
    of channel configurations is specified in JucePlugin_PreferredChannelConfigurations
    and the host will choose one of these, but you should still set the max number of
    channels correctly.

    As soon as a plugin's prepareToPlay() method is called, you can find out the actual
    number of channels that will be used with the AudioProcessor::getNumOutputChannels()
    method.
*/
#define JucePlugin_MaxNumOutputChannels             2

/** This allows the plugin to specify the configurations of input/output channels that
    they can support.

    AU and RTAS hosts will use this information, although VSTs only have a concept of
    a maximum number of channels.

    The list is a set of pairs of values in the form { numInputs, numOutputs }, and each
    pair indicates a valid configuration that the plugin can handle.

    So for example, {1, 1}, {2, 2} means that the plugin can be used in just two
    configurations: either with 1 input and 1 output, or with 2 inputs and 2 outputs. If
    you used this in Pro-Tools, the plugin could be placed on a mono or stereo track.
    If the list was just {1, 1}, then Pro-Tools would only allow it to be used as a mono
    plugin.

    As soon as a plugin's prepareToPlay() method is called, you can find out the actual
    number of channels that the host has connected to the plugin by using the
    AudioProcessor::getNumOutputChannels() and AudioFilterBase::getNumInputChannels()
    methods.
*/
#define JucePlugin_PreferredChannelConfigurations   { 1, 1 }, { 2, 2 }

//==============================================================================
/** Set this value to 1 if your plugin is a synth, or 0 if it isn't.
*/
#define JucePlugin_IsSynth                          0

/** Set this to 1 if your plugin needs to receive midi messages, or 0 if
    it doesn't.
*/
#define JucePlugin_WantsMidiInput                   1

/** Set this to 1 if your plugin wants to output midi messages, or 0 if
    it doesn't.
*/
#define JucePlugin_ProducesMidiOutput               0

/** If this is 1, it means that when the plugins input buffers are
    silent, it's output will be too.

    Some hosts may use this to avoid calling the plugin when no audio
    would be produced.
*/
#define JucePlugin_SilenceInProducesSilenceOut      0

/** If set to 1, this hints that the host should ignore any keys that are pressed
    when the plugin has keyboard focus. If 0, then the host should still execute
    any shortcut keys that are pressed, even if the plugin does have focus.

    Various hosts/platforms may deal with this differently, or ignore it.
*/
#define JucePlugin_EditorRequiresKeyboardFocus      1


//==============================================================================
/** A version number
*/
#define JucePlugin_VersionCode              0x00010100

#define JucePlugin_VersionString            "1.0"


//==============================================================================
/*                                VST settings                                */

/** For VSTs, if you're compiling against the V2.3 SDK, set this to zero. If
    you're using V2.4 or later, make sure it's set to 1.
*/
#define JUCE_USE_VSTSDK_2_4                 1

/** Defines a UID for your VST plugin.
    The default setting here is probably fine, unless you specifically need
    a custom value. It's passed to the setUniqueID() method of the plugin class.
*/
#define JucePlugin_VSTUniqueID              JucePlugin_PluginCode

/** Defines the type of plugin. For most pursposes, you don't need to change this
    setting.
*/
#if JucePlugin_IsSynth
  #define JucePlugin_VSTCategory            kPlugCategSynth
#else
  #define JucePlugin_VSTCategory            kPlugCategEffect
#endif

//==============================================================================
/*                              AudioUnit settings                            */

/** Defines the major type of plugin - see AUComponent.h for the available options.
    If it's an effect, you should use kAudioUnitType_Effect. For a synth, you'll
    need to use kAudioUnitType_MusicEffect or kAudioUnitType_MusicDevice.
*/
#if JucePlugin_IsSynth
  #define JucePlugin_AUMainType             kAudioUnitType_MusicDevice
#else
  #define JucePlugin_AUMainType             kAudioUnitType_MusicEffect
#endif

/** A 4-character plugin ID code that should be unique.

    You can leave this using the generic value JucePlugin_PluginCode, or
    override it if necessary.

    Note that for AU, this must contain at least one upper-case letter.
*/
#define JucePlugin_AUSubType                JucePlugin_PluginCode

/** A prefix for the names of exported entry-point functions that the component exposes.

    It's very important that your plugin's .exp file contains two entries that correspond to
    this name. So for example if you set the prefix to "abc" then your exports
    file must contain:

    _abcEntry
    _abcViewEntry
*/
#define JucePlugin_AUExportPrefix           TalVocoder2AU

/** This is the same as JucePlugin_AUExportPrefix, but in quotes
    (needed for the resource compiler...)
*/
#define JucePlugin_AUExportPrefixQuoted     "TalVocoder2AU"

/** A 4-character manufacturer code - this is your company name.
    You can leave this using the generic value JucePlugin_ManufacturerCode, or
    override it if necessary.
*/
#define JucePlugin_AUManufacturerCode       JucePlugin_ManufacturerCode

/** If you define this value to be the same as the CFBundleIdentifier in your
    plugin's plist, it allows the plugin to work out its own path, which is
    needed if you want to use File::getSpecialLocation (currentExecutableFile)
*/
#define JucePlugin_CFBundleIdentifier       "ch.toguaudioline.talvocoder2"

/** In an AU, some hosts take the name of Cocoa class that creates the UI and
    actually show it to the user in a list (why??)... Anyway, this macro lets you
    provide a sensible name for that class to make it clear what plugin it refers to.
    Obviously this has to be a valid obj-C class name.

    Just to make things a little more complicated, this name must also be unique to this
    precise version of your software. Otherwise, if the host loads two plugins that use the
    same class name, the obj-C linker will almost certainly connect the wrong modules together
    and cause total meltdown.
*/
#define JucePlugin_AUCocoaViewClassName     TalVocoder2_01

//==============================================================================
/*                                RTAS settings                               */

/** How to categorise this plugin.

    For a synth you probably want to set this to ePlugInCategory_SWGenerators.
    For an effect, you could choose one of:
      ePlugInCategory_None, ePlugInCategory_EQ, ePlugInCategory_Dynamics,
      ePlugInCategory_PitchShift, ePlugInCategory_Reverb, ePlugInCategory_Delay,
      ePlugInCategory_Modulation, ePlugInCategory_Harmonic, ePlugInCategory_NoiseReduction,
      ePlugInCategory_Dither, ePlugInCategory_SoundField

    (All values are listed in FicPluginEnums.h)
*/
#if JucePlugin_IsSynth
  #define JucePlugin_RTASCategory           ePlugInCategory_SWGenerators
#else
  #define JucePlugin_RTASCategory           ePlugInCategory_None
#endif

/** A 4-character manufacturer code - this is your company name.
    You can leave this using the generic value JucePlugin_ManufacturerCode, or
    override it if necessary.
*/
#define JucePlugin_RTASManufacturerCode     JucePlugin_ManufacturerCode

/** A 4-character plugin ID code that should be unique.
    You can leave this using the generic value JucePlugin_PluginCode, or
    override it if necessary.
*/
#define JucePlugin_RTASProductId            JucePlugin_PluginCode

/** You need to set this path to point to the location of the Digidesign WinBag
    directory on your machine. (Only needed for Windows builds). Make sure you
    don't put a slash on the end.
*/
#define JucePlugin_WinBag_path              "C:\\essentials\\PT_73_SDK\\WinBag"

#define JucePlugin_IsMidiEffect             0

#define JucePlugin_LV2URI                   "http://kunz.corrupt.ch/products/tal-vocoder"
#define JucePlugin_LV2Category              "ModulatorPlugin"

#define JucePlugin_WantsLV2Latency          0
#define JucePlugin_WantsLV2State            1
#define JucePlugin_WantsLV2StateString      1
#define JucePlugin_WantsLV2Presets          1
#define JucePlugin_WantsLV2TimePos          0

//==============================================================================

#endif
