Code Monkey home page Code Monkey logo

vmpc-juce's Introduction

vmpc-juce, a JUCE implementation of VMPC2000XL, the Akai MPC2000XL emulator

Building from source just to run, try or use VMPC2000XL or its tests

VMPC2000XL supports a typical CMake workflow, for example on Windows:

git clone https://github.com/izzyreal/vmpc-juce
cd vmpc-juce && mkdir build
cmake -B build -G "Visual Studio 17 2022"
cmake --build build --config Release --target vmpc2000xl_Standalone vmpc2000xl_VST3

and on macOS:

git clone https://github.com/izzyreal/vmpc-juce
cd vmpc-juce && mkdir build
cmake -B build -G "Xcode"
cmake --build build --config Release --target vmpc2000xl_Standalone vmpc2000xl_VST3

or Linux:

git clone https://github.com/izzyreal/vmpc-juce
cd vmpc-juce && mkdir build
cmake -B build -G "CodeBlocks - Ninja"
cmake --build build --config Release --target vmpc2000xl_Standalone vmpc2000xl_VST3 vmpc2000xl_LV2

Note that on Linux you need some system dependencies. I don't have an exhaustive list that will work for all distributions and installations. What I can provide is how the binaries that are published on izmar.nl are built, which is in an official Ubuntu 20.04 Docker container, using the below Dockerfile:

FROM ubuntu:20.04

ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
  && apt-get -y install build-essential \
  && apt-get install -y wget \
  && rm -rf /var/lib/apt/lists/* \
  && wget https://github.com/Kitware/CMake/releases/download/v3.24.1/cmake-3.24.1-Linux-x86_64.sh \
      -q -O /tmp/cmake-install.sh \
      && chmod u+x /tmp/cmake-install.sh \
      && mkdir /opt/cmake-3.24.1 \
      && /tmp/cmake-install.sh --skip-license --prefix=/opt/cmake-3.24.1 \
      && rm /tmp/cmake-install.sh \
      && ln -s /opt/cmake-3.24.1/bin/* /usr/local/bin
RUN rm -vf /var/lib/apt/lists/* && apt-get update
RUN apt-get -y install git
RUN apt-get -y install libasound2-dev libjack-jackd2-dev libfreetype6-dev libx11-dev libxcomposite-dev libxcursor-dev libxext-dev libxinerama-dev libxrender-dev
RUN apt-get -y install ninja-build
RUN apt -y install libxrandr-dev libudisks2-dev libglib2.0-dev

The targets described above are also the currently supported targets for each platform.

The above generators are just some examples. If you experience issues with generators other than the ones mentioned here, file an issue here.

Modifying and contributing to VMPC2000XL and its dependencies

Just skip the second cmake -B ... statement in the above examples and you have the IDE project that you can use for this flow. The code that is meant to be edited as part of VMPC2000XL will be located in vmpc-juce/editables after a successful cmake -G run. These editables are part of the IDE project that a cmake -G run produces in vmpc-juce/build. You may notice the editables being in a "detached HEAD" state (a Git thing where you're not currently on any branch), so it's required to do some git checkout master (or git checkout main if there is no master) and git checkout -b <your_feature_branch_name> before you can commit your changes.

Creating a source package for offline building

To create a source package that can be used for building VMPC2000XL offline, run (from the root of this repo):

mkdir build && cd build
cmake ..
make package_source

It creates a vmpc2000xl-0.4.4-Source.tar.gz which, unpacked, will yield a directory called vmpc2000xl-0.4.4-Source.

Finally, to build all available VMPC2000XL binaries run:

cd vmpc2000xl-0.4.4-Source
mkdir build && cd build
cmake ..
make vmpc2000xl_All -j 4

In this example the Makefile generator is used, but here too you can use any generator you like.


MPC® and Akai Professional® are a registered trademarks of inMusic Brands. Inc. This emulator is not affiliated with inMusic and use of the MPC® and Akai Professional® names has not been authorized, sponsored or otherwise approved by inMusic.

vmpc-juce's People

Contributors

deviant-syndrome avatar izzyreal avatar kottv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vmpc-juce's Issues

Make VMPC2000XL skinnable

The user should be able to provide a directory from where the files in https://github.com/izzyreal/vmpc-juce/tree/master/resources/img are optionally provided.

Credits screen

With the project gaining a bit of traction, credits where credits are due.

Let's make a dependency tree of the vmpc-juce, mpc, ctoot, moduru and akaifat libraries and accredit those.

Types of dependencies:

  • Included via CMake (see the use of FetchContent)
  • moduru/thirdp

No audio input in some scenarios

Sergio Frias reports that vMPC2000XL standalone on his Windows 10 machine has just silence on the audio inputs. When wrapping the plugin in Tone2 NanoHost everything's working fine, same for when running the plugin in Reaper.

Currently no clear indication as to root cause. A possible one is https://docs.juce.com/master/tutorial_audio_bus_layouts.html

Let's create a debug executable that logs bus layout details from bool VmpcAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const and ask Sergio to run it and send ~/vMPC/vmpc.log to me for analysis.

Large Error Block upon building with conan

Hey guys,

I have gotten stuck compiling VMPC-JUCE with VS2022 on Windows 11 x64.
The standalone binary work fine on my system, but I wanted to poke around the source code, and make some adjustments for fun.
On the final stage of building, the command "conan build ..", I get a hefty error block - https://pastebin.com/4R3YdS1V

Yeah. Apparently the problem is with juce_audio_plugin_client_Standalone.obj and unresolved externals.
What should I do? I have tried build_type in the conan profile, changing debug and release from within VS and manually setting the _ITERATOR_DEBUG_LEVEL in the files. In the file juce_audio_plugin_client_Standalone.obj, there is an error message reading To compile AudioUnitv3 and/or Standalone plug-ins, you need to add the juce_audio_utils module! Could this be the issue, and if so, how would I go about resolving it?

Thanks in advance and for this amazing piece of software.

User guide

There should be an online user guide covering all relevant aspects for a user, that are not covered by https://www.platinumaudiolab.com/free_stuff/manuals/Akai/akai_mpc2000xl_manual.pdf

Details should be available about

  • The virtual filesystem
  • The location of the virtual filesystem, log file, config files, required resources
  • What to do when the application won't start
  • More troubleshooting (?)
  • Keyboard controls
  • Mouse controls
  • The "Reset Screen Size" and "Keyboard Mapping" buttons
  • All functionality that is mapped to the VMPC2000XL-specific screens (Shift + 0)
  • Audio/MIDI setup with basic test (play metronome track)
  • Examples of common operations (load sound, assign to pad and play)

plugin-compatibility-matrix: Linux

So, just a quick test in jack on linux: with the native VST2 in Carla I see 2 channels input and 10 channels output.

When I play a sample (ie. a 16bit 44.1khz file from disk) it is played over the stereo outputs. Assigning it to a pad it can either be panned over the stereo outputs, or to any of the 8 single channel output expansions (or both at the same time).

Seems to work great.

In the compat matrix it's maybe better to call the outputs 2x stereo + 8x mono ? (as that is the implementation in the mpc).

Mouse clicks don't check currently pressed keys

The buttons for 0 up to 9 are currently not responsive to mouse clicks. The rectangles for them are defined in ButtonControl but they are not referred to in the rects map that PluginEditor uses to route events.

Additionally these buttons were never added to mpc::Hardware::buttonLabels, and that needs to be done too.

Finally PluginEditor has been maintaining its own version of buttonLabels. In this ticket this will be removed, and mpc::Hardware::buttonLabel will be used instead.

Also the height of the small buttons (the function keys and the numeric keypad) mouse capture rectangles will be increased.

LV2 plugin version?

Hi! I'm wondering if you would consider an LV2 plugin version? There is a well enough maintained fork of JUCE by @falkTX that supplies LV2 as a target that has been used for various projects and LV2 ports already.

Build error (Failed requirement 'rapidjson/1.1.0@bincrafters/stable')

Followed the build instructions in the readme and was given the following error

 conan install .. && conan build ..
Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=gcc
compiler.libcxx=libstdc++
compiler.version=11
os=Linux
os_build=Linux
[options]
[build_requires]
[env]

rapidjson/1.1.0@bincrafters/stable: Not found in local cache, looking in remotes...
rapidjson/1.1.0@bincrafters/stable: Trying with 'conancenter'...
rapidjson/1.1.0@bincrafters/stable: Trying with 'jfrog-izmar'...
ERROR: Failed requirement 'rapidjson/1.1.0@bincrafters/stable' from 'moduru/0.1@izmar/dev'
ERROR: Unable to find 'rapidjson/1.1.0@bincrafters/stable' in remotes

Tried compiling on Ubuntu 21:10

No demo data in Linux

On MacOS/Win VMPC2000XL comes with an installer that has the demo data packaged inside of it. Then it copies it to some AppData kinda folder, and every time VMPC2000XL starts it checks if you have the demo data in your ~/Documents/VMPC2000XL/.... If you don't, it will place a fresh copy from AppData in there.

Is this kind of behaviour desirable for Linux users? If yes, how can this be implemented?

Graceful handling of missing resource files

At the moment vMPC2000XL crashes without giving information to the user when one of the resource files is missing. We need to do a check for all the resources that result in this kind of behaviour and do a graceful shutdown after displaying which files are missing.

Note Off events are missing in latest master

Environment: macOS Catalina
Built from sources using XCode toolchain

Seems like the when running, sequencer forgets to produce noteOf MIDI events in the MIDI output
NoteOFF events are sent properly in the latest 0.4.4. release

Steps to reproduce:

  1. Go to settings and set MIDI output to some observable MIDI sink (IAC Driver can be used for that on Mac)
  2. Set the track device to 01 / channel 01A
  3. Input some notes in step mode
  4. Press play
  5. Attach any MIDI monitor and see that only noteON MIDI events are produced, and no noteOFF
  6. Notice, that pressed pads always stay highlighted

Possibly, related to these changes
Thank you

Code style

Settle on indentation. See if .editorconfig or something similar exists that Xcode, CLion and Visual Studio all respect.

Some WAV files don't drag-and-drop load

Reported by Strahinja Drakulic/Despot Strahinjic (same person).
Reported provided some WAV files in private.

Find out why the WAV files don't load
Add a popup explaining why there was an error when such an error takes place.

MIDI Clock Output severe jitter

Environment: macOS Catalina
Built from sources using XCode toolchain
Standalone Application Issue

Seems, like MIDI ticks sent from sequencer are transported to target MIDI out with some irregularities.

Steps to reproduce:

  1. Run standalone application
  2. Select some MIDI-bridge for MIDI output (IAM driver bus works on MacOS)
  3. Make sure Sync Out is set to MIDI Clock
  4. Create a 1 bar sequence
  5. Add 16 copies of this sequence to a song, thus have 16 bars of signal
  6. Run any DAW, make it sync to external clock. Use the MIDI out of VMPC as MIDI Clock source
  7. Run the song on MPC
  8. The sequence will play 16 bar and stop. VMPC sequence will stop at 017.01.00
  9. Notice, that DAW bar counter would stop at around 017.01.30, meaning that the clock was lagging

This jitter is clearly audible, when you, for example sync some VST arpeggiator or drum machine to Standalone VMPC.
After about 6 bars, they start to drift.

To eliminate the possible influence of third-party MIDI bridge to clock jitter, I also tried to sync, using a DAW (Reason) as a clock source through the same pipeline. It was rock solid.

According to the code, MIDI out is produced via an advanced concurrent non-blocking queue, which is "block-free", but not "wait free" or something. So, probably, MIDI Clock should be sent via separate high-priority pipeline.

P.S. I completely understand, that

  • This is a very rare and peculiar use case
  • The problem with clock jitters in electronic music is ubiquitous and there is no way this could be prioritised above any other feature
  • Could be a problem specific to MacOS

I can try my hand at cobbling something together on this topic, if you could give me any hints, where I should start digging.
Or we can just close this issue as "won't fix" if this is too overwhelming.

Thank you.

Partial focus

Sometimes vMPC2000XL has focus, we can move the cursor and turn the DATA wheel with +/-, SHIFT is also registered correctly judging by the DATA wheel increments, but SHIFT + 3 yields no screen change.

Custom standalone app

So far vMPC2000XL has relied on the default juce_StandaloneFilterWindow.h and juce_StandaloneFilterApp.cpp of JUCE.

To get more control over keyboard focus, and over cosmetic aspects, let's shift to a custom implementation of said source files.

For this ticket we don't actually customize any functionality, we just copy those files into our project's Source dir and make sure it is used for the Standalone compilation target.

iOS version

Initial research shows that a binary can easily be produced that actually runs. There are some graphical issues:

  • Disclaimer fills screen and doesn't disappear. When disabling the disclaimer in the code the main GUI actually shows up.
  • But the DATA wheel, slider, LCD screen rec gain and main volume knobs are displaced
    And
  • There's no way to interact with it without a keyboard

Plugin not detected in Logic Pro X

AU validation succeeds, yet the plugin is not found. The problem may be in the warning that auval produces:

WARNING: Source AU supports multi-channel output but does not provide a channel layout

auval.txt

No sound in FruityLoops

Reported by Son Ray Burns.

Sequencer does not start running, no metronome sound is produced.

Raw keyboard input

Would be nice to have raw keyboard input support, game-engine style. This would pave the road to internationalization and user-configurable keyboard keyboard mapping.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.