The open source framework for sample based instruments

Overview

HISE

Build Status macOS: build_hise_macos

Build Status Windows: build_hise

The open source framework for sample based instruments.

HISE is a cross-platform open source audio application for building virtual instruments. It emphasizes on sampling, but includes some basic synthesis features for making hybrid instruments as well as audio effects. You can export the instruments as VST / AU / AAX plugins or as standalone application for Windows / macOS or iOS.

More information:

HISE website

System requirements

Supported OS:

  • Windows 7+
  • OSX 10.7+
  • iOS 8.0+
  • Linux (experimental, tested on Ubuntu 16.04 LTS)

HISE is tested on Windows and OSX with the following hosts:

  • Cubase
  • Ableton Live
  • Logic
  • Reaper
  • Protools
  • REASON 10
  • FL Studio
  • Presonus Studio One

It supports x86 and x64 on Windows, altough the 64bit version is highly recommended (it uses memory mapping for accessing samples and because of the limitations of the 32bit memory address space it needs a slower fallback solution).

How to compile HISE

Windows / OSX

  1. Clone this repository. It also includes the (slightly modified) JUCE source code, so it might take a while.

  2. Get all necessary 3rd party code:

  3. Open the Projucer (there are compiled versions for every supported OS in the tools/projucer subdirectory) and load the HISE project (either projects/standalone/HISE Standalone.jucer or project/plugin/HISE.jucer)

  4. Make sure the VST / ASIO path settings is correct on your system. If you don't have IPP installed, set the USE_IPP flag in the hi_core module to 0.

  5. Click on "Save Project and open in IDE" to load the project in XCode / Visual Studio.

  6. Hit compile and wait...

Compiling without IPP on OSX

If you don't have Intel Performance Primitives installed on your machine, you need to change the Projucer file. Open the .jucer file in the Projucer (like in step 3 above), click on the Xcode (MacOSX) target and delete this from the Extra Linker Flags field:

/opt/intel/ipp/lib/libippi.a  /opt/intel/ipp/lib/libipps.a /opt/intel/ipp/lib/libippvm.a /opt/intel/ipp/lib/libippcore.a

Then remove the include directories from the Debug and Release configurations (Remove everything in the Header Search Paths and Extra Library Search Paths. As last step, you'll need to change the USE_IPP flag. Click on the hi_core module and change the USE_IPP field to disabled. Then proceed with step 5...

Linux

  1. Get these dependencies (taken from the JUCE forum):
sudo apt-get -y install llvm
sudo apt-get -y install clang
sudo apt-get -y install libfreetype6-dev
sudo apt-get -y install libx11-dev
sudo apt-get -y install libxinerama-dev
sudo apt-get -y install libxrandr-dev
sudo apt-get -y install libxcursor-dev
sudo apt-get -y install mesa-common-dev
sudo apt-get -y install libasound2-dev
sudo apt-get -y install freeglut3-dev
sudo apt-get -y install libxcomposite-dev
sudo apt-get -y install libcurl4-gnutls-dev

and, since JUCE 5, also these:

sudo apt-get -y install libwebkit2gtk-4.0 
sudo apt-get -y install libgtk-3-dev

If you want to use JACK, make sure it's also installed:

sudo apt-get -y install libjack-jackd2-dev
  1. Clone this repository.

  2. Open the Projucer (a precompiled Linux binary can be found at tools/projucer). Load the project projects/standalone/HISE Standalone.jucer and resave the project (this will generate the Makefile with correct Linux paths).

  3. Open the terminal and navigate to this subdirectory: projects/standalone/Builds/LinuxMakefile

  4. Type make CONFIG=Release and wait. If you need the debug version (that is slower but allows you to jump around in the source code, use make CONFIG=Debug.

License

HISE is licensed under the GPL v3, but there will be a commercial license for closed source usage. Every instrument you'll build will inheritate this license so in order to release a closed source product you'll have to obtain a HISE commercial license as well as a JUCE commercial license. Please get in touch with me for further informations.

Included frameworks

For FFT routines and some vector operations, it is recommended to build HISE against the Intel IPP library (not included).

Apart from the JUCE C++ library, there are some other 3rd party frameworks and libraries included in HISE, which are all non restrictively licenced (either BSD or MIT):

  • ICSTDP DSP library: A pretty decent DSP library with some good and fast routines. Website
  • Kiss FFT: A easy and C-only FFT library with a clean interface and acceptable performance. It is used as fallback FFT when the IPP library is not available.
  • FFTConvolver: a library for fast, partitioned real time convolution: https://github.com/HiFi-LoFi/FFTConvolver
  • MDA Plugins: a collection of audio effects recently published as open source project.
  • some other public domain code taken from various sources (http://musicdsp.org, etc.).

Support

The best place to get support for anything related to HISE is the user forum: https://forum.hise.audio/

Comments
  • Hise not recognizing the HISE source code folder when compiling on M1 Mac

    Hise not recognizing the HISE source code folder when compiling on M1 Mac

    So whenever I try to export anything as a Vsti/au plugin, it says the HISE image directory is not found, but I have already set the HISE path correctly.

    opened by GoldenAdrien 42
  • Cannot build Linux version

    Cannot build Linux version

    Debian 9.9 when building standalone

    Compiling include_hi_scripting.cpp
    ../../JuceLibraryCode/include_hi_scripting.cpp:9:41: fatal error: hi_scripting/hi_scripting.cpp: No such file or directory
    
                                             ^
    compilation terminated.
    Makefile:206: recipe for target 'build/intermediate/Debug/include_hi_scripting_3ee86399.o' failed
    make: *** [build/intermediate/Debug/include_hi_scripting_3ee86399.o] Error 1
    
    opened by tank-trax 15
  • projucer not executable / invalid machine command

    projucer not executable / invalid machine command

    I've got a problem with the precompiled Projucer binary shipped with HISE on Linux Mint 19.2. I get the following error message when i try to execute it via terminal: Illegal instruction (core dumped) It occurs with all Projucer binaries that come with HISE, independent from the HISE branch. Can someone help?

    opened by toxonic75 12
  • Unable to build on linux

    Unable to build on linux

    hello there !

    After installing the dependencies and cloning the repo, I was unable to run properly Projucer.

    (gdb) run
    Starting program: /home/m4l3z/HISE/tools/projucer/Projucer 
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
    JUCE v4.3.0
    
    Program received signal SIGILL, Illegal instruction.
    0x00000000006ebcdc in juce::AffineTransform::AffineTransform (
        this=0xdbed90 <juce::AffineTransform::identity>)
        at ../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp:27
    27	../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp: No such file or directory
    
    
    
    (gdb) backtrace
    #0  0x00000000006ebcdc in juce::AffineTransform::AffineTransform (
        this=0xdbed90 <juce::AffineTransform::identity>)
        at ../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp:27
    #1  0x00000000007669ae in __static_initialization_and_destruction_0 (
        __initialize_p=1, __priority=65535)
        at ../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp:83
    #2  0x0000000000766a3c in _GLOBAL__sub_I__ZN4juce6ColourC2Ev ()
        at ../../../../modules/juce_graphics/juce_graphics.cpp:164
    #3  0x000000000092189d in __libc_csu_init ()
    #4  0x00007ffff61017bf in __libc_start_main (
        main=0x4391f7 <main(int, char**)>, argc=1, argv=0x7fffffffddd8, 
        init=0x921850 <__libc_csu_init>, fini=<optimized out>, 
        rtld_fini=<optimized out>, stack_end=0x7fffffffddc8)
        at ../csu/libc-start.c:247
    #5  0x0000000000408709 in _start ()
    
    opened by m4l3z 10
  • segfault on standalone for Linux

    segfault on standalone for Linux

    Latest git pull, Fedora 21 x86_64, GCC 4.9.2.

    Program received signal SIGSEGV, Segmentation fault. 0x000000000040d1ef in juce::CharPointer_UTF8::isEmpty ( this=0x18e6b28 juce::juce_xmltextContentAttributeName) at ../../JuceLibraryCode/modules/hi_backend/../../../../../hi_backend/../hi_modules/../hi_scripting/../hi_core/../JUCE/modules/juce_core/text/juce_CharPointer_UTF8.h:80 80 inline bool isEmpty() const noexcept { return *data == 0; }

    Simple backtrace:

    (gdb) bt #0 0x000000000040d1ef in juce::CharPointer_UTF8::isEmpty (

    this=0x18e6b28 <juce::juce_xmltextContentAttributeName>)
    at ../../JuceLibraryCode/modules/hi_backend/../../../../../hi_backend/../hi_modules/../hi_scripting/../hi_core/../JUCE/modules/juce_core/text/juce_CharPointer_UTF8.h:80
    

    #1 0x000000000045afe0 in juce::String::isEmpty (

    this=0x18e6b28 <juce::juce_xmltextContentAttributeName>)
    at ../../../../hi_backend/../hi_modules/../hi_scripting/../hi_core/../JUCE/modules/juce_core/text/juce_String.h:311
    

    #2 0x0000000000920a5f in juce::StringPool::getPooledString (

    this=0x18e6b80 <juce::StringPool::getGlobalPool()::pool>, newString=...)
    at ../../../../JUCE/modules/juce_core/text/juce_StringPool.cpp:136
    

    #3 0x00000000009162ab in juce::Identifier::Identifier (this=0x7fffffffca50,

    nm=...) at ../../../../JUCE/modules/juce_core/text/juce_Identifier.cpp:51
    

    #4 0x000000000092e110 in juce::XmlElement::createTextElement (text=...)

    at ../../../../JUCE/modules/juce_core/xml/juce_XmlElement.cpp:888
    

    #5 0x000000000092a07a in juce::XmlDocument::readChildElements (

    this=0x7fffffffd5e0, parent=...)
    at ../../../../JUCE/modules/juce_core/xml/juce_XmlDocument.cpp:642
    

    #6 0x000000000092938e in juce::XmlDocument::readNextElement (

    this=0x7fffffffd5e0, alsoParseSubElements=true)
    at ../../../../JUCE/modules/juce_core/xml/juce_XmlDocument.cpp:435
    

    #7 0x0000000000929b74 in juce::XmlDocument::readChildElements (

    this=0x7fffffffd5e0, parent=...)
    at ../../../../JUCE/modules/juce_core/xml/juce_XmlDocument.cpp:549
    

    #8 0x000000000092938e in juce::XmlDocument::readNextElement (

    this=0x7fffffffd5e0, alsoParseSubElements=true)
    at ../../../../JUCE/modules/juce_core/xml/juce_XmlDocument.cpp:435
    

    #9 0x0000000000928649 in juce::XmlDocument::parseDocumentElement (

    this=0x7fffffffd5e0, textToParse=..., onlyReadOuterDocumentElement=false)
    at ../../../../JUCE/modules/juce_core/xml/juce_XmlDocument.cpp:215
    

    #10 0x00000000009281be in juce::XmlDocument::getDocumentElement (

    this=0x7fffffffd5e0, onlyReadOuterDocumentElement=false)
    at ../../../../JUCE/modules/juce_core/xml/juce_XmlDocument.cpp:142
    

    #11 0x0000000000927e0f in juce::XmlDocument::parse (file=...)

    at ../../../../JUCE/modules/juce_core/xml/juce_XmlDocument.cpp:56
    

    #12 0x0000000000a0d7a8 in juce::FTTypefaceList::getDefaultFontDirectories ()

    at ../../../../JUCE/modules/juce_graphics/native/juce_linux_Fonts.cpp:34
    

    #13 0x0000000000a18320 in juce::FTTypefaceList::FTTypefaceList (this=0x18ea0c0)

    at ../../../../JUCE/modules/juce_graphics/native/juce_freetype_Fonts.cpp:88
    

    #14 0x0000000000a18dd2 in juce::FTTypefaceList::getInstance ()

    at ../../../../JUCE/modules/juce_graphics/native/juce_freetype_Fonts.cpp:227
    

    #15 0x0000000000a19149 in juce::FreeTypeTypeface::FreeTypeTypeface (

    this=0x18ea280, data=0xe6d2c0 <HiBinaryData::temp_binary_data_15126>, 
    dataSize=48812)
    at ../../../../JUCE/modules/juce_graphics/native/juce_freetype_Fonts.cpp:303
    

    #16 0x0000000000a0dc93 in juce::Typeface::createSystemTypefaceFor (

    data=0xe6d2c0 <HiBinaryData::temp_binary_data_15126>, dataSize=48812)
    at ../../../../JUCE/modules/juce_graphics/native/juce_linux_Fonts.cpp:74
    

    #17 0x000000000040d070 in __static_initialization_and_destruction_0 (

    __initialize_p=1, __priority=65535)
    at ../../JuceLibraryCode/modules/hi_backend/../../../../../hi_backend/../hi_modules/../hi_scripting/../hi_core/Macros.h:71
    

    #18 0x000000000040d147 in _GLOBAL__sub_I_DspUnitTests.cpp(void) ()

    at ../../../../hi_scripting/scripting/api/DspUnitTests.cpp:142
    

    #19 0x0000000000bc1ded in __libc_csu_init () #20 0x000000327541ff6f in __libc_start_main () from /lib64/libc.so.6 #21 0x000000000040ce89 in _start ()

    opened by davephillips 10
  • Expansion Missing Samples

    Expansion Missing Samples

    Forum Discussion: https://forum.hise.audio/topic/5121/confusing-convolution/34?_=1645050228056

    Commit: ecd5f153a7d47e335caf52f446b63cb7929598c7

    Conditions to reproduce the bug:

    OS: Windows (havent checked MacOS) HISE: yes Compiled Project: yes

    Problem Description

    Using a basic expansion system, installing and loading an expansion in the compiled plugin results in a "Samples Folder Missing" popup loop

    Barebones project with binary attached

    image

    neatplayerdebug.zip

    opened by nytemairqt 9
  • [feature request] Folder Access for

    [feature request] Folder Access for "Program Files" on Win & "Applications" on macOS

    On the FileSystem, the direct access for Documents, Downloads, AppData...etc. is great. Could you please add FileSystem.Applications feature for accessing:

    "Applications" folder on macOS "Program Files" folder on Windows

    This is the missing puzzle of this great FileSystem features.

    opened by beyhanklc 7
  • SampleThreadPool thread safety

    SampleThreadPool thread safety

    In ~SampleThreadPool(), the pimpl is deleted before stopping the background thread. I could be missing some external synchronization/safety here, but it looks like a race condition:

    1. ~SampleThreadPool() does pimpl = nullptr;
    2. The thread could still be running, so run() calls pimpl->jobQueue.peek() for example, which is a null pointer dereference.
    3. ~SampleThreadPool() calls stopThread. After that has returned, we know that the thread isn't running anymore.

    I get crash reports in SampleThreadPool::run(), while the main thread is inside ~SampleThreadPool().

    A solution could be to use atomic shared_ptr, keeping a local shared_ptr<Pimpl> inside run()'s while loop.

    opened by martinfinke 6
  • projects/standalone: increase warning level to /W2

    projects/standalone: increase warning level to /W2

    This commit increases the compile warning level on Windows from /W0, which suppresses all warnings to /W2. I noticed that issue after pulling from the current develop, when there were several compiler warnings on Linux again, which should have triggered on Windows as well.

    opened by romsom 4
  • Faust integration

    Faust integration

    This PR integrates the Faust programming language into HISE. It addresses #224 by providing:

    • Access to libfaust's just-in-time-compiler and interpreter backends via a special script node
    • Static export of the generated C++ code

    Testing was done on Linux, Windows and macOS (native x86_64 and M1 via emulation). With the current implementation there is access to the Faust programming language for monophonic FX processing. Sound generator and polyphony support are planned as future extensions.

    The code in this PR was developed as a Google Summer of Code project, which was mentored by @sletz and @christoph-hart. Documentation on setup and usage are currently available on my blog.

    opened by romsom 4
  • Errors building on MacOS 11.2.1

    Errors building on MacOS 11.2.1

    This could very well be something I misconfigured. Please let me know if I can provide more info.

    $ sw_vers
    ProductName:    macOS
    ProductVersion: 11.2.1
    BuildVersion:   20D74
    

    I built off 9813dfdcfceff2bdd605996b90c51e51b71105d1. Here is the build log: https://gist.github.com/ajw0100/5008f3c742e017292a77e8f19ee745e2

    opened by ajw0100 4
  • [feature request] JUCE Interpolators Class

    [feature request] JUCE Interpolators Class

    There are great interpolators in JUCE. Linear, Windowed Sinc, Lagrange, Catmull Rom, Zero Order Hold interpolations all of them are here: https://docs.juce.com/master/classInterpolators.html

    It will be extremely easy to use these in Hise for processing large amount of data.

    opened by beyhanklc 3
  • [bug] Tooltip floating tile not working on old projects

    [bug] Tooltip floating tile not working on old projects

    Forum Discussion

    https://forum.hise.audio/topic/6104/tooltip-panel-is-not-working-on-the-project-i-m-working-on

    Commit

    6e5c8628d306caaebab9cba13b451ac921f8d175

    Tested

    OS: Windows HISE: yes Compiled Project: n/a

    Description

    Tooltip floating tile is not visible on projects created before this build.

    opened by dustbro 0
  • [bug] Batch monolith export is broken

    [bug] Batch monolith export is broken

    Forum Discussion

    https://forum.hise.audio/topic/5863/monolith-export-is-broken https://forum.hise.audio/topic/6113/convert-to-monolith-issues

    Commit

    https://github.com/christophhart/HISE/commit/75ee78426af32e3b96cac86d7affae9c6ba05fd9

    Tested

    OS: Windows, GNU/Linux HISE: yes Compiled Project: n/a

    Description

    Batch monolith export is not working here. Causes an instant crash.

    Exporting a single monolith works, but (if I use the context menu option) even when a sample map is loaded into the sampler the dialog is wanting me to manually select a sample map.

    opened by davidhealey 0
  • Simple gain pan modulation table range

    Simple gain pan modulation table range

    Forum Discussion

    https://forum.hise.audio/topic/6062/simple-gain-pan-modulation-issue

    Commit

    https://github.com/christophhart/HISE/commit/75ee78426af32e3b96cac86d7affae9c6ba05fd9

    Tested

    OS: MacOS, GNU/Linux HISE: yes Compiled Project: yes

    Description

    I have a MIDI controller global mod. This is assigned to the pan modulation of a simple gain.

    The balance knob of the simple gain is set to 100R - this is needed for the pan modulation to do anything.

    The modulator is set to 100% intensity (same as 100R).

    If I have the modulation table set to uni-polar the right channel is always 100% but I can vary the left channel - this is as expected.

    So I set the table to bi-polar so that I can pan left to right across the range of the table. The problem is that in this mode the table values go from 300L to 100R. Instead of 100L to 100R, why is this and how can I fix it?

    opened by davidhealey 0
Releases(3.0.1)
Open source digital sound effects based on JACK audio connection kit.

Noiseworks Digital Audio Effects Repository Open source digital sound effects based on JACK audio connection kit. This repository is intended to provi

null 5 Jul 29, 2022
PeakEater is a free open-source VST3/AU waveshaper plugin

PeakEater Free open source VST3/AU wave shaping plugin for macOS and Windows. View Demo · Download · Report Bug Table of Contents About The Project Fe

Vladyslav Voinov 44 Oct 5, 2022
Mumble is an Open Source, low-latency, high quality voice chat software

Mumble is an Open Source, low-latency and high-quality voice-chat program written on top of Qt and Opus.

Mumble 5.1k Nov 24, 2022
Free and open-source (GPL3+) VCVrack modules made by Allieway Audio

AlliewayAudio_Freebies Free and open source VCVrack modules made by Allieway Audio with love <3 Disclaimer: All direct clones or recreations were made

Allie 5 Jan 10, 2022
eSpeak NG is a compact open source software text-to-speech synthesizer for Linux, Windows, Android and other operating systems

eSpeak NG is an open source speech synthesizer that supports more than hundred languages and accents.

null 1.6k Dec 3, 2022
projectM - cross-platform music visualization. Open-source and Milkdrop-compatible

projectM - cross-platform music visualization. Open-source and Milkdrop-compatible

projectM Visualizer 2.5k Nov 27, 2022
PendulumSynth is an on-going and open-source project, running on Arduino platform with the goal of mixing real-world physics into music composition and musical performance.

PendulumSynth PendulumSynth is an on-going and open-source project, running on Arduino platform with the goal of mixing real-world physics into music

Mohammadreza Anvari 3 Oct 7, 2022
AudMonkey - Free and open source audio editor

AudMonkey is an easy-to-use, multi-track audio editor and recorder for Windows, Mac OS X, GNU/Linux and other operating systems. AudMonkey is open source software licensed under GPL, version 2 or later.

AudMonkey 36 Mar 15, 2022
Open-source audio fingerprint by MusicIP

README for the Open Fingerprint Architecture library "LIBOFA" Copyright (C) 2006, MusicIP Corporation 605 E. Huntington Dr. Suite 201, Monrovia CA 910

Adriano Bonat 40 Sep 1, 2022
A basic infrastructure for a polyphonic synthesiser, written with the JUCE framework.

JuceSynthBase This JUCE module is a complete infrastructure for a polyphonic synthesizer, providing voice management, MIDI management, and some more a

Ben Vining 14 May 28, 2021
Lightweight Embedded Audio Framework

LEAF (Lightweight Embedded Audio Framework) is a C library for audio synthesis and processing created by Jeff Snyder, Mike Mulshine, and Matt Wang at Princeton University's New Instrument Research Lab. It was originally called OOPS when we started writing it in 2017, so you may see references to it under that name as well.

Jeff Snyder 107 Nov 1, 2022
Linux client for Archo Music written in C++, uses Qt Framework.

ArchoMusicLinux Linux client for Archo Music written in C++, uses Qt Framework. For the original client, visit Archo Music Compiling Setting up the li

GianXD 2 Nov 13, 2021
C++ audio plug-in framework for desktop, mobile (iOS) and web

iPlug 2 C++ audio plug-in framework for desktop, mobile (iOS) and web iPlug 2 is a simple-to-use C++ framework for developing cross-platform audio plu

iPlug 2 Framework 1.4k Nov 29, 2022
FAudio - Accuracy-focused XAudio reimplementation for open platforms

FAudio - Accuracy-focused XAudio reimplementation for open platforms

FNA Development Team 424 Nov 9, 2022
OBS Plugin with image that reacts to sound source.

OBS Image Reaction Plugin Image that reacts to sound source. Installing binaries Download binaries from Releases. For Windows, Move the contents of pl

null 36 Nov 29, 2022
Arduino+Python to create a ultrasound sensor array based on the HC-SR04

Using the cheap HC-SR04 ultrasonic sensor and an arduino nano we can build a low cost sensor array for robotics. The arduino code will poll all the sensors and send byte packets via serial interface with the index and the distance to a Python app to process.

Alberto 27 Aug 10, 2022
ChowKick is a kick drum synthesizer plugin based on creative modelling of old-school drum machine circuits

ChowKick is a kick drum synthesizer plugin based on creative modelling of old-school drum machine circuits. MIDI input to the plugin triggers a pulse with a parameterized size and shape. The pulse is then passed into a resonant filter which can be tuned to a specific frequency, or matched to the frequency of the incoming MIDI notes.

null 110 Nov 6, 2022
Modem based on software defined radios.

Modem based on software defined radios.

dernasherbrezon 20 Nov 11, 2022
SSMLSDL - Simple Sound Manipulation Library, Based on SDL and LIBWAV.

SSM-lib SSMLSDL - Simple Sound Manipulation Library, Based on SDL and LIBWAV. This library is open source and free software. It's aims to provide YOU,

UtoECat 1 Jan 20, 2022