Coder Social home page Coder Social logo

pac-dev / protoplug Goto Github PK

View Code? Open in Web Editor NEW
269.0 26.0 36.0 8.63 MB

Create audio plugins on-the-fly with LuaJIT.

License: Other

C++ 51.07% C 38.04% Makefile 0.11% Shell 0.01% Objective-C++ 2.70% Objective-C 5.50% R 0.05% Java 0.64% HTML 1.23% CSS 0.05% Lua 0.60% Batchfile 0.01%
live-coding vst midi audio-plugins luajit

protoplug's Introduction

protoplug

Create audio plugins on-the-fly with LuaJIT.

Protoplug is a VST/AU plugin that lets you load and edit Lua scripts as audio effects and instruments. The scripts can process audio and MIDI, display their own interface, and use external libraries. Transform any music software into a live coding environment!

Cross-platform : builds for Windows, Linux, and macOS. This means that all protoplug scripts are compatible with these platforms and can be loaded into a huge amount of audio software (glory to JUCE)

Fast : Use the speed of LuaJIT to perform complex DSP tasks in realtime.

Free and open source : The source is MIT-licensed. Hack away.

Compiling from Source

There are prebuilt binaries, but building it from source is also simple:

Mac and Windows :

You'll need Visual Studio 2017 (Windows) or a recent XCode (macOS). Projects files are in the Builds folder.

Linux :

For example, on Ubuntu 16:

sudo apt-get install libluajit-5.1-2 libfftw3-3 build-essential pkg-config libgtk-3-dev libfreetype6-dev libx11-dev libasound2-dev libxinerama-dev libxcursor-dev libcurl4-openssl-dev
tar zxf protoplug-1.4.0.tar.gz
cd protoplug-1.4.0/Builds/multi/Linux/
make CONFIG=Release

Then, optionally run sudo make install or just copy the binaries from protoplug-1.4.0/Bin/linux to wherever you want them.

protoplug's People

Contributors

pac-dev avatar rukatt avatar snabeljoel avatar sonoro1234 avatar spotlightkid 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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

protoplug's Issues

GUI is broken in Ardour

In the latest Ardour (4.4) on Ubuntu Linux, the Protoplug window keeps flashing with about 1Hz frequency, which is very jarring. Also, the window cannot be easily resized because after first resizing, the "native" Protoplug resizer in the bottom right corner is hidden by encompassing Ardour frame. And resizing the Ardour frame does not resize the Protoplug window (it reverts back to original size after a fraction of second). Here is the video that shows how it looks: https://goo.gl/photos/eH4kZfFv7P2vesqN9

Multiport on AU3 and VST3

VST3 and AU3 both include the capability of handling more than 16 midi channels by using so called "ports". Please expose this parameter to the LUA script in order to get and set the midiPort of midi events, in addition to midi channel

running on lowend/embedded devices

Hi,

Congrats with this project.
Im using jesusonic a lot, since its an easy way of scripting midi & audio stuff.
Questions:

  • does protoplug have multi-audio input, and multi-audio output?
  • have you thought about 'stompbox'-possibilities (protoplug as a guitar-pedal)?

Concerning the last question, I think this is an interesting area.
These days lots of 32bit devices can be hacked and flashed with linux (for example: the pogoplug or netgear routers can run debian or archlinux).

hope all is well

Standalone version

Please consider also releasing a standalone version, which should not be too difficult from the JUCE framework, that can listen to midi ports, run the lua and send output to another midi port. With virtual midi ports this could be quite useful for situations where a standalone midi processor is needed.

Mac install instructions need correction

It was pointed out to me that the install instructions for mac have a problem. If you copy the ProtoPlugFiles folder into the user's Documents folder, as instructed, then the plugin will not start up, it complains about not being able to find the lib file.

However, I copied the folder into /Library/Audio/Plug-Ins/VST/ and /Library/Audio/Plug-Ins/Components/, which is where I copied the plugins too...and it seemed to work that way.

Either the plugin needs to be updated to match the docs, or the docs updated to match the plugin.

host-synchronized midicontrolled gate + midi MTC commands

I want to make the following linux plugin, and I would like to get some guidelines / feedback whether this is possible:

(and if not this'll be the featurerequest):

  • receive midi-in messages
  • delay these midi-in messages a variable amount of ms
  • send them to midi-out

and, at the same :

  • receive start- and stop- events from pluginhost (JACK transport?)
  • and send as MMC midi start- and stop- bytes to midi-out

so practically I need to send these raw midi-bytes:

 start MMC bytes: 0xF0 0x7F 0x7F 0x06 0x02
 stop  MMC bytes: 0xF0 0x7F 0x7F 0x06 0x01

'pop out' feature..pop in?

Is there a way to pop it in again?
Not really a big deal but if I do 'pop out' in buze (http://batman.no/buze), I can't seem to pop it in anymore :)

Anyways, love the plug..veeeery nice for trying out ideas.
(instead of fiddling with c++ code)

can compile scripts in Logic Pro, but nothing happens

First of all I apologize for posting an issue here. I went to the forum but I was not able to log in and it looks like nobody has posted for a few years.

Extreme newbie question....

I have Protoplug successfully (I think) installed in Logic Pro. I have installed Lua Protoplug Fx on a software instrument channel. I've pasted various examples into the editing window and successfully compiled them, but nothing happens. Am I missing some magic sauce to make the plugin work? Thanks....

Javascript?

What is the possibility of adding the google javascript interpreter to protoplug as an alternative? I am willing to do the coding for this, though I don't know much about how to setup google's javascript just yet, but if the author of protoplug can point me in the right direction for what needs to be done and where inside Protoplug, I could fork a version that does javascript in addition to lua. Javascript is preferable for me, plus LogicPro has a javascript scripter in it and if I did it right with some support functions, then LogicPro scripts could be made to run in ProtoPlug on other hosts.

README needs info about 2010 & 2015 VC++ Redistributable, for 64-bit Protoplug

Thanks again for the software. I work to keep unused Visual C++ Redistributables off of my PC. Programs install them but don't uninstall them. It's bad when great programs stop working on a new PC.

I got lucky with 32-bit Protoplug, but 64-bit Protoplug needs two versions of Visual C++ Redistributable installed: 2015 for Lua Protoplug Fx (x64).dll/Lua Protoplug Gen (x64).dll, and 2010 for lua51.dll.

Anyway, the problem is only a documentation problem. I provide links below to the Microsoft web pages I used to get the downloads, and I make a few comments about the file dates of lua51.dll.

Aside Number 1: ReaPlugs/Protoplug as a team, ReaPlugs vs. Protoplug

Only God knows the future: bad problems will show up fast, bad problems will take time to show up, things will work good enough, or things will work great.

But the plan is like this:

  • Use ReaPlugs VST to run JSFX scripts in other DAWS,
  • so that I can continue to use the JSFX scripts I now use (which are scripts I've used to get rid of all normal use of VSTs),
  • and then get up to speed with Lua and Protoplug,
  • and slowly replace all the JSFX scripts with Lua Protoplug scripts,
  • or, worst case, continue to use ReaPlugs and Protoplug together.

It's all good, but comparisons can be made between JSFX/ReaPlugs and Lua/Protoplug. In particular, Lua is a full-blown scripting language, so if it will work for real-time audio processing, it's better.

Preface comment about Visual Studio 2017

As a preface to what download I decided to use, the GitHub Protoplug README says this in section Compiling from Source:

*"You'll need Visual Studio 2017 (Windows.

I try to use only the minimal dependencies, but I decided to use Microsoft Visual C++ 2015-2019 Redistributable. On the page linked to below, it says this:

Note Visual C++ 2015, 2017 and 2019 all share the same redistributable files.

I know a little more now, but only a little.

Back to the Download Links

The file dates of 32-bit and 64-bit lua51.dll, of the v1.4.0 downloads, are 2014 file dates. The 32-bit Protoplug works with only Microsoft Visual C++ 2015 Redistributable (x86) installed, but 64-bit Protoplug needs two installs of Visuall C++ Redistributable.

In the process of finding the problem, I installed the 2012 and 2013 VC++R, but it was the 2010 version that finally got 64-bit lua51.dll working.

For the 64-bit VSTs, I installed Microsoft Visual C++ 2015-2019 Redistributable (14.21.27702.2). For security, I've started to try and make sure I get the latest versions, but Microsoft doesn't work hard to make doing that easy. I finally found this page:

For lua51.dll, I used this Microsoft download page:

The way everything works, like getting download sites from searches, it sets people up to download infected files, from sites that provide helpful information, but I guess that's not my problem.

is there an Idle callback?

Is there any kind of Idle callback or a way that we can have some lua code script code execute outside of process block? For example if we wanted to do some kind of housework that might be a bit expensive with the CPU and we don't want it happening inside the process block callback, how can we do that in ProtoPlug?

Plugin compiled in 64 bit doesn't load on Mac OS

I haven't had a chance to get to the bottom of why, but the VST and AU both fail to load when compiled in 64 bit or universal binaries.
I've tried both in Studio One and Bitwig and on Mac OS 10.8 and 10.10, the result is the same.
I will take a closer look when I have some time but thought I should ask in case you're aware of something.

FR: make a GUI-less version

I find the embedded editor in protoplug too limited and hard to use, so I use an external editor anyway.

Also, when you have a working script, the editor isn't need anymore, so it would be nice to have a version of protoplug without the GUI. The plugin's parameters could still be edited through the generic parameter interface of the host. One would just need a way to specify the script to load. Maybe through program changes and a protoplug configuration where programs can be mapped to script files?

Push controller support

Hi Pac,

I'm working on adding support for the Push midi controller, as you can see in my fork.
I did a quick proof of concept which works very well and I'm now working on making a full blown integrated API.
I would really like to merge this back to the official repository at some point; would you mind taking a look at what I've done so far to see if you agree with the direction, if not it would be better for me to make some changes now than later.

Thank you !
JT

Can't Load libluajit on OSX Yosemete

When I load Lua Protoplug FX into Apple's AU Lab, I see the following message in the log after telling it where the ProtoplugFiles are:

54:23 - Error: Could not load libluajit-5.1.so. Tried /Users/a/ProtoplugFiles/lib/libluajit-5.1.so and system path.

That file does exist, so I'm not quite sure what the problem would be. I'm a 64-bit OSX 10.10.5 system.

This may or may not be related to the other issue I'm having where Ardour refuses to recognize that Protoplug exists (same system). Despite clearing my AU cache and blacklist, and scanning multiple times (including after restarting Ardour), it still doesn't find it for some reason. If you want me to open a different issue for this (probably unrelated) problem, I can do that.

Protoplug looks very cool -- I'm looking forward to getting it working.

How to extend the midi API

I would like to extend the MIDI api that is available in LuaProtoPlug. I could do this either in C++ or LUA, as makes sense, but I would appreciate some pointers as to where in the code I could potentially add a couple more midi related features. Mainly I want to create the ability to schedule midi events into the future, but a few more things too. I could just use some pointers about the existing code structure to get my head wrapped around where in the code I could extend these capabilities.

Thanks

Understanding midi.noteToFreq

I'm having a bit of trouble figuring out midi.noteToFreq

I expected I'd have a function to turn MIDI notes into Hertz, as I already do the calculation to turn Hertz into the phaser delta in my synth.

But the documentation says :

midi.noteToFreq (note)
Convert a MIDI note number to frequency. Call this function to get a note's frequency.
Parameters:

    note the MIDI note (0-127)

Returns:

    the frequency in samples^-1 

I'm guessing that means frequency is samples to the power of -1. Ie. 1 / frequency in samples?

But how do I calculate the Hz from that? Or how do I use it exactly?

dynamic compressor

Some examples are shipped with protoplug.
Are these just a selection of your experiments?
I would love to see an example of a dynamics compressor, so if you happen to have something similar sitting on your HD let me know.

Add support for aftertouch and polyphonic aftertouch events

Hi,

I've written a bit of code to add support to the default libraries in midi.lua. It was very easy to implement, just using the event constructor and referencing the byte code. I've tested it with a MPE handler and it works alright, but would like this feature to be part of the default library for easier deployment. :)

EDIT: With a little testing I'm not sure if aftertouch is behaving as expected, might need to review this further when I have time time.

midi.txt

midi event constructor seems to be busted

Constructing a midi event seems not to work when a data table is explicitly passed in. At the interactive console:

midi.Event(0, 3) -- returns cdata<struct MidiEvent>, ok
midi.Event(0, 3, {0x90, 0x30, 0x7f}) -- seems to return nothing, not even nil

Not a show-stopper as the bytes can be manually set, but it is confusing.

64-bit VST won't load, 32-bit will (REAPER, OpenMPT)

Thanks for the software. I'm in an early phase of trying to use Protoplug as a replacement for JSFX scripting. And if Protoplug works, then it's a huge solution, since Lua is a mainstream programming language that's widely used. Doing music, and learning marketable job skills at the same time, that would be great.

PROBLEM: So in OpenMPT and in REAPER, neither of the 64-bit VST DLLs will load. REAPER fails silently, but OpenMPT returns an error. I'm using Windows 10.

Part of the OpenMPT error message is this: The specified module could not be found.. Maybe that doesn't mean anything special, but does a Microsoft Visual C++ redistributable have to be installed?

QUESTION: So as to script code that's been inserted in the VST editor. This Lua code gets recompiled everytime the DAW starts up and activates the Protoplug VST, right? And there are no external dependencies for the code, such as reading a file to get the code, right? It looks that way. This is big, because REAPER JSFX scripts have to exist as files when the DAW start up.

GREAT UI: From my "Hello, World!" tests, the basics are great. The sliders respond to the scroll wheel, and a double click allow me to enter in an exact value, and there's 127 slider available. Thanks.

AU-MFX version

Please consider compiling this also as AU-MFX. My understanding this is as simple as changing one line of code and building it as an AU-MFX target. There is some info on the JUCE forum about it.

LogicPro needs it to be AU-MFX in order to make any use out of it. It would basically be an alternative to Logic's Scripter plugin, but with a lot more capability, but unfortunately no access to the articulationID field of LogicPro midi events...but all the other pros outweight that con.

Mac 10.14.6 Cannot Load libluajit-5.1.so

Hello,
I installed this and directed it to the ProtoplugFiles folder that I put in ~/Documents

The plugin says it tries to load from /Users/username/Documents/ProtoplugFiles/lib/libluajit-5.1.so and system path

It definitely exists, I can see the presets in the menu, etc. I am wondering if I can get it to work by placing the ProtoplugFiles directory inside the VST folder, but I cannot figure out where it is saving the setting for this path. I have tried removing/reinstalling/rescanning but it continues to try to load from this location ( never pops up a dialog ).

Any help appreciated. Thank you.

Doesn't compile on Ubuntu Xenial

Trying to compile from source on Ubuntu Xenial and I'm getting

Compiling juce_core.cpp
../../../../Frameworks/JuceModules/juce_core/juce_core.cpp:116:110: note: #pragma message: "Please re-save your Introjucer project with the latest Introjucer version to avoid this warning"
 JUCE_COMPILER_WARNING ("Please re-save your Introjucer project with the latest Introjucer version to avoid this warning
                                                                                                             ^
In file included from ../../../../Frameworks/JuceModules/juce_core/juce_core.cpp:215:0:
../../../../Frameworks/JuceModules/juce_core/native/juce_linux_Files.cpp: In static member function ‘static bool juce::Process::openDocument(const juce::String&, const juce::String&)’:
../../../../Frameworks/JuceModules/juce_core/native/juce_linux_Files.cpp:203:44: error: expected ‘)’ before ‘...’ token
  if (URL::isProbablyAWebsiteURL (fileName) ... )
                                            ^
../../../../Frameworks/JuceModules/juce_core/native/juce_linux_Files.cpp:204:10: error: expected primary-expression before ‘||’ token
          || cmdString.startsWithIgnoreCase ("file:")
          ^
Makefile:202: recipe for target 'build/intermediate/Debug/juce_core_1a6f1539.o' failed
make[1]: *** [build/intermediate/Debug/juce_core_1a6f1539.o] Error 1
make[1]: Leaving directory '/media/phil/MyData/music_making_tools/protoplug/Builds/fx/Builds/Linux'
Makefile:7: recipe for target '../../../Bin/linux/Lua Protoplug Fx.so' failed
make: *** [../../../Bin/linux/Lua Protoplug Fx.so] Error 2

Any suggestions?

EBM generator [broken]

I modified your atonal MIDI generator to generate some EBM riffs. It somewhat works, but I ran into some some issues:

  • for some unknown reason it does not send note off when stopped
  • I am not able to figure out how to change parameter from interval to number of steps (per bar)

See ebmgen.lua

Not working on Catalina

Trying to use ProtoPlug on Catalina fails.... Is there something 32bit in there?

20:14 - Error: Could not load libluajit-5.1.so. Tried /Users/ProtoplugFiles/lib/libluajit-5.1.so and system path.
20:47 - Error: Could not load libluajit-5.1.so. Tried /Users/sjs/Library/Audio/Plug-Ins/VST/ProtoplugFiles/lib/libluajit-5.1.so and system path.

I have already tried to build it from scratch in Catalina, but the build fails too....

sampler?

Btw. I was checking the docs, but could not find it: does protoplug allow:

  • retrieving files from a specified dir
  • basic sampler: loading a .wav, and tie it to a note? (to make a drumkit from a dir e.g.)

problems in the timing API

I think I have found a few problems in the midi API regarding some of the timing aspects...perhaps there is something I am missing, please advise if so..but here are the couple of problems I am noting, which frankly makes LuaProtoPlug currently unsuitable for time based midi processing.

  1. plugin.positionInfo.ppqPosition is not what you say it is. This value, as near as I can see is a fractional beat number according to the host....there is nothing related to the host's PPQN ticks coded into that. We have no way to find out, either, what PPQN resolution the host might be using, but most hosts use PPQN only to dictate their GUI while midi events are stored internally using sample accurate values..which generally translate into either a number of samples...or as a fractional beat value. The name of this value is confusing and very unclear as to what it actually is, but I suspect it is a fractional beat value, which you should verify and either change the API name or document its true meaning, or both.

  2. We do not have any way to obtain any kind of time reference value for the start of the current process block. It seems we can obtain from the host what the current location is, using timeInSeconds or ppqPosition, but the actual start of the process block usually does not line up with the host's current time position. Meanwhile, each midi Event has a time stamp that is relative to the start of the process block. Therefore we cannot accurately determine the time position of each midi event relative to the song position pointer. This is demonstrated easily when the transport of the host is stopped...the midi events come in with many different time values..because it will depend on where the midi event came in relative to a process block (which is usually the audio buffer that is always running...but meanwhile timeInSeconds, timeInSamples and ppqPosition are not changing at all while the transport is stopped, which tells me they are not in any way synchronized with the process block start time. Really LuaProtoPlug should probably ensure that those values for the Host's song position pointer report the value at the start of the current process block...not some other value unrelated to process block. Anyway, this discrepancy makes LuaProtoPlug incapable of accurate time based midi processing as far as I can see. Unless there is something I am missing.

  3. timeInSamples is not returning a double value, it is returning cdata which I don't know what to do with it. Can't use it without more info.

Compatitbility with Logic Pro X on the Apple Mac

Hello, would I be correct in thinking that the 32-bit nature of these plugins mean that they are not compatible with Apple Logic X running on macOS 10.13.3? If this is true, is that situation likely to change in the near future?

midi output/midi-chordify.lua demo not working in FLStudio 12

capture
I have tried this in FLStudio 12 Patcher, with:

  • green lines representing midi data
  • yellow lines representing audio data

When I tried pressing the keyboard keys, there is no midi output from protoplug.
The Chip32 Plugin works when I directly send the midi input from FLStudio to itself.
I don't know if its just my software but protoplug's midi output doesn't work

Support for multichannel

I think it would be great if protoplug had support for more than two channels. For instance, Reaper and ReaJS support up to 64 channels.

FYI: Arch User Repository package for protoplug created

Just an FYI for the developer: I created an Arch User Repository (AUR) a package for protoplug:

https://aur.archlinux.org/packages/protoplug/

Arch Linux users can install this by either downloading the PKGBUILD and using makepkg:

$ sudo pacman -S curl git gtk3 luajit  # install required packages
$ git clone https://aur.archlinux.org/protoplug.git
$ cd protoplug
$ makepkg -ci

or by using an AUR manager, like e.g. aurman:

$ aurman -S protoplug

In the latter case all required dependencies will be installed automatically for you.


Feel free to close this issue after reading.

error calling plugin_processBlock() : not enough memory

I have a MIDI effect that, after a while, errors out with the message

error calling plugin_processBlock() : not enough memory

and stops doing anything.

My code is the following:

require "include/protoplug"
-- Use CC 4 to interfere with dynamics on CC 1.

CC = {}
CC.dynamic = 1
CC.interferic = 4

outEvents = {}
Channel = {}
function Channel:new(channelNumber)
	self.__index = self
	local o = {dynamic = 64, interferic = 64, channel = channelNumber}
	setmetatable(o, self)
	return o
end

function Channel:dynamicEvent(pos)
	local value = math.min(127, math.max(0, self.dynamic + (self.interferic - 64)))
	-- print(self.dynamic, self.interferic, value)
	return midi.Event.control(self.channel, CC.dynamic, value, pos)
end

chan = {}
for i=1, 16 do
	chan[i] = Channel:new(i)
end

function plugin.processBlock(samples, buffer_size, midiBuf)
	for i=0, #outEvents do outEvents[i] = nil end  -- Clear the list

	for ev in midiBuf:eachEvent() do
		if ev:isControl() then
			if CC.dynamic == ev:getControlNumber() then
				chan[ev:getChannel()].dynamic = ev:getControlValue()
				table.insert(outEvents, chan[ev:getChannel()]:dynamicEvent(ev.time))
			elseif CC.interferic == ev:getControlNumber() then
				chan[ev:getChannel()].interferic = ev:getControlValue()
				table.insert(outEvents, chan[ev:getChannel()]:dynamicEvent(ev.time))
			else
				table.insert(outEvents, midi.Event(ev))
			end
		else
			--print(ev)
			table.insert(outEvents, midi.Event(ev))
		end
	end
	refillMIDIBuffer(midiBuf)
end

function refillMIDIBuffer(midiBuf)
	midiBuf:clear()
	for _, e in ipairs(outEvents) do
		midiBuf:addEvent(e)
	end
end

I really don't see why this would complain about memory. Any help appreciated.

compiling with mingw

I would like to compile with mingw but I guess that (at least on windows) the compiler must be the same used compiling the vst-host to avoid run time libraries mismatches, and I guess that the standard is MSVC. Doing dependancy walker on Reaper dont show msvccrtxxx.dll so may be I could try.
What is your experience with this issue?

LV2 version?

Now JUCE 7 is out, could an LV2 version be possible? Thanks!

Protoplug 1.4.0 build no longer running on recent Ubuntus (and cannot rebuild)

Hello! Latest linux build is not working on Ubuntu 22.04.1 LTS:

Failed to load VST 2 plug-in /home/yves/.vst2/Lua Protoplug Fx.so: /lib/x86_64-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_3' not found (required by /home/yves/.vst2/Lua Protoplug Fx.so)

libcurl.so.4: version 'CURL_OPENSSL_3' not found is not really easy to fix. As you can guess, I cannot really switch libcurl versions on my system like that... So I tried to rebuild Protoplug from master but apparently the JUCE code coming along fails to build:

../../../../Frameworks/JuceModules/juce_graphics/colour/juce_PixelFormats.h:116:77: error: cannot bind packed field ‘((juce::PixelARGB*)this)->juce::PixelARGB::<anonymous>.juce::PixelARGB::<unnamed union>::comps[3]’ to ‘juce::uint8&’ {aka ‘unsigned char&’}
  116 |     forcedinline uint8& getAlpha() noexcept           { return comps [indexA]; }
      |                                                                ~~~~~~~~~~~~~^
../../../../Frameworks/JuceModules/juce_graphics/colour/juce_PixelFormats.h: In member function ‘juce::uint8& juce::PixelARGB::getRed()’:
../../../../Frameworks/JuceModules/juce_graphics/colour/juce_PixelFormats.h:117:77: error: cannot bind packed field ‘((juce::PixelARGB*)this)->juce::PixelARGB::<anonymous>.juce::PixelARGB::<unnamed union>::comps[2]’ to ‘juce::uint8&’ {aka ‘unsigned char&’}
  117 |     forcedinline uint8& getRed() noexcept             { return comps [indexR]; }
      |                                                                ~~~~~~~~~~~~~^
../../../../Frameworks/JuceModules/juce_graphics/colour/juce_PixelFormats.h: In member function ‘juce::uint8& juce::PixelARGB::getGreen()’:
../../../../Frameworks/JuceModules/juce_graphics/colour/juce_PixelFormats.h:118:77: error: cannot bind packed field ‘((juce::PixelARGB*)this)->juce::PixelARGB::<anonymous>.juce::PixelARGB::<unnamed union>::comps[1]’ to ‘juce::uint8&’ {aka ‘unsigned char&’}
  118 |     forcedinline uint8& getGreen() noexcept           { return comps [indexG]; }
      |                                                                ~~~~~~~~~~~~~^

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.