izzyreal / vmpc-juce

JUCE implementation of VMPC2000XL
GNU General Public License v3.0
91 stars 7 forks source link

Large Error Block upon building with conan #50

Closed theModernSurrealist closed 2 years ago

theModernSurrealist commented 2 years ago

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.

izzyreal commented 2 years ago

@theModernSurrealist Thanks for reporting this issue. Which process are you using to build?

For what you describe I'd recommend to clone https://github.com/izzyreal/vmpc-workspace and run python build-workspace.py vs2022. Then you get a VS project in the build dir which allows editing of all the source code.

theModernSurrealist commented 2 years ago

@izzyreal I am using MSVC and following the instructions in the README (conan install .. --build missing and conan build..) if that is what you mean by process. I will try vmpc-workspace now and see if that will work.

Thanks for the fast response!

theModernSurrealist commented 2 years ago

I also have another question - is there a .jucer file I could use to modify the GUI a bit easier? If so, where can I download it?

izzyreal commented 2 years ago

The project is fully CMake-based I'm afraid, i.e. no Projucer involved. But I'd be happy to answer any questions you may have about the GUI code.

theModernSurrealist commented 2 years ago

@izzyreal I am working on an audio sampler box based on your software - poor mans MPC. It needs to run on linux, plus the extra keyboard controls meant that I can essentially recreate the MPC workflow without the limitations it had by emulating keypresses via push buttons.

I wanted to run your software on this device, but I only wanted the screen portion as everything else could be controlled via MIDI or keyboard. Would you have any guidance on achieving this?

izzyreal commented 2 years ago

Yes. In fact, the project architecture is designed for such cases. The core of VMPC2000XL is mpc: https://github.com/izzyreal/mpc

It is a static library that does nothing on its own. It needs a GUI or UI implementation. vmpc-juce is one such GUI implementation, but I have already experimented with 2 others: https://github.com/izzyreal/vmpc-unreal-plugin and https://github.com/izzyreal/vmpc

For your purpose, you would probably want to use mpc rather than vmpc-juce. Unfortunately there is no clear API or documentation for how to create your own (G)UI implementation for mpc. So it will take a bit of poking around in vmpc-juce, which can be considered a reference implementation, and maybe you can draw some inspiration from the other GUI implementations (vmpc and vmpc-unreal-plugin).

I'm not sure how much guidance you need, but I'd be happy to have a video call with screen sharing where I walk you through some relevant stuff and answer any questions you have. I think for initial communication that would be the most efficient, and we can switch to email or Discord after.

izzyreal commented 2 years ago

I should also mention that depending on your requirements there may be way simpler solutions! But if it's the real MPC2000XL flow and functionality that you need, mpc definitely fits the bill.

theModernSurrealist commented 2 years ago

Wow, I really did not expect such an offer! Of course, any help at all would be extremely appreciated.

I understand what you mean. I am fairly competent in C++, but I am clueless when it comes to JUCE, hence my struggle with vmpc-juce. Ideally I am looking for the MPC workflow because I want to emulate the good times I had with my dad on the old MPC2000XL as well as bring back some of the more hands-on approach of making music, without relying on a computer that takes upwards of 10 minutes to start.

I am planning on running (V)MPC off of a Raspberry Pi 4 with a small 360p display connected to a powerbank as well as an MPD218. I am a bit confused however on the structure of VMPC2000XL. As far as I am aware: MPC is the core. It relies on ctoot, moduru and akaifat to run properly. VMPC-JUCE is the GUI portion, and is not necessary for MPC to run. Would I then have to use something such as Ncurses for CLI interfaces or cairo to create a frontend for the sampler?

Your offer to help would be greatly appreciated considering that there is no specific documentation for MPC (although the comments in the code greatly help) and it would be great to sort out a video call with screen sharing at some point in the near future.

Just out of interest, what simpler solutions do you have in mind?

Thanks so much!

theModernSurrealist commented 2 years ago

Also, to build vmpc, there is a missing conan remote. In the readme, you've left What are the missing remotes?

izzyreal commented 2 years ago

vmpc is heavily unmaintained I'm afraid. I wouldn't spend too much time on getting it to build. You could browse the code using for example Sublime, or check some of the commit diffs on GitHub directly.

Simpler solutions: Depends on your requirements. From what I hear, I don't think simpler solutions would yield a close match. But if all you need is to trigger some samples, for example based on a text file that lists up to 16 absolute WAV file paths, you could write something from scratch with RtAudio and RtMidi for example.

Let's indeed do a video call then. Reach out to the below image and we'll take it from there.

izzyreal commented 2 years ago

VMPC-JUCE is the GUI portion, and is not necessary for MPC to run.

True, but mpc does need some (G)UI implementation -- something that instantiates the main entity mpc::Mpc and directs host system user input to it.

The only entry points (executable targets) in the mpc project are its unit tests. There are not many, but it does give some indication of how one would start out writing a (G)UI implementation. See for example https://github.com/izzyreal/mpc/blob/master/src/test/MainTest.cpp

theModernSurrealist commented 2 years ago

Again, thanks for the speedy reply.

I understand now - thanks for the clarification. I will begin to study the unit tests, and work on implementing a GUI. I will probably do it in Ncurses because it will allow for faster speeds (no window manager), it being written in C++ and ease-of-use seeing as I am only looking to use the screen portion of the VMPC.

Also, how could I go about linking the Mpc.hpp file to the GUI code - would I call the features from that file or from the individual .hpp files in /src/main? Could I take inspiration from how JUCE links to the static library? Can we discuss this in the future video call?

I will go to sleep soon, but I am happy to arrange a video call soon. I'll drop you an email as soon as I can.

Thanks for the help.

izzyreal commented 2 years ago

You're more than welcome! Would love to see this come alive. I think it will be a somewhat bumpy ride, as you are the first besides myself to try this. Since I have intimate knowledge of the code base, I have a pretty clear idea of what code of mpc is meant to interact with its consumer (i.e. a GUI implementation), and what code is for internal use only. But I consider what you want to do a very cool and valid use case of the mpc project, so I'll try to assist where I can. With some patience I think we can make it work, and hopefully I will get a clearer picture of how to extract an API from mpc and I can encapsulate things better for non-vmpc-juce consumers. For example, it's about time mpc gets one of those nice include directories that expose the headers that are meant for external consumption.

izzyreal commented 2 years ago

Also, how could I go about linking the Mpc.hpp file to the GUI code - would I call the features from that file or from the individual .hpp files in /src/main?

Indeed most easily discussed in a call, but with a bit of luck I can work alongside your efforts to at least refactor the project into having an include dir meant for external consumption.

theModernSurrealist commented 2 years ago

I have sent you an email from [scrambled]@gmail.com to [scrambled].nl. Looking forward to speak with you soon!

izzyreal commented 2 years ago

I've scrambled our email addresses, since this is a public thread that scrapers can pick up on. I'll keep an eye out for your message.

theModernSurrealist commented 2 years ago

Right! My apologies. Looking forward to speak soon.

izzyreal commented 2 years ago

It's all good :) Speak soon.