Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Building OSX version (AudioUnit under XCode) #12

Closed
ghost opened this issue Dec 9, 2013 · 84 comments
Closed

Building OSX version (AudioUnit under XCode) #12

ghost opened this issue Dec 9, 2013 · 84 comments
Labels

Comments

@ghost
Copy link

@ghost ghost commented Dec 9, 2013

I did a test build under Xcode 5.0.2, and get the error "cast from pointer to smaller type 'Bitu' loses information" on lines 1443 and 1458 of dbopl.cpp. Also the error "use of undeclared identifier 'fmod' on line 62 of adlib.h. I haven't dug any deeper yet.

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Dec 9, 2013

Thanks a lot for trying this out! I'll see if I can figure out these issues by cranking up the warning level on my compiler or something.

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Dec 9, 2013

When you have a chance, could you please pull the latest code and try again?

This commit will hopefully fix those issues:
cbc57c5

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Dec 10, 2013

Hi, thanks for making this plug-in! It's exactly what I was thinking of building, but I'm too much of a greenhorn to sift through DOSBox emulator code. :)

I patched the CoreAudio SDK files per this blog: http://feature-space.com/en/post161.html

When I try to compile your new commit, I get two errors:
SbiLoader.h - has a "C:" path hard-coded in the include, I just stripped out the path
EnumFloatParameter.h - "Extra qualification on member 'set ParameterIndex' on this line:
void EnumFloatParameter::setParameterIndex(int);

Thanks for all the help!

  • Nick
@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Dec 10, 2013

Nick,

You're welcome, glad you like it. Thanks for your efforts!

If I understand correctly, you're still not able to build on OSX because of the issue in EnumFloatParameter.h? Or you've built it successfully now?

If you've managed to build it already, could you please do me (and Mac users) a huge favour and:

  1. Send me a link to the binary.
  2. Fork the repo and make a pull request with your source changes, or just comment back here with a diff of the
    changes you made if that's easier.

Cheers.

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Dec 10, 2013

I haven't been able to build successfully yet. After applying Xcode's recommended fixes, and switching the C++ compiler strictness to "compiler default" rather than C++11, I get some new errors:

Config.h - doesn't like "__int64" so I replaced it with 'long long'
PluginGui.cpp - lines 71-80 and 96-98, lots of "expected a class or namespace" where 'NotificationType::dontSendNotification' appears in the parameters to slider setValue() calls.

  • Nick
@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Dec 10, 2013

Nick,

Please pull the latest code. Hopefully the following commit fixes the issues:

de9f873

If not, please paste the complete console output of Xcode and we'll keep working through any issues.

Thanks.

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Dec 11, 2013

I still get the "expected a class or namespace" on those lines. Also, Xcode didn't like the redefinition of __int64 so I replaced them with 'long long' manually.

Oh, and just a heads-up... you may get a spike in downloads. I mentioned your plug-in on Slashdot this morning. :)

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Dec 12, 2013

Hi Nick,

Thanks for the info. If you switch back to C++11 now does it solve the issue, or do you get some different errors?

I'm a bit confused about it not being able to resolve the names on those lines, but I'll look into that when I can. As you can probably tell, I don't have a Mac / XCode, so I appreciate you helping me work through solving these issues.

Thanks for the heads up. It's all hosted on github so hopefully it's not a problem :)

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Dec 12, 2013

Hi Bruce,

It seems to get farther with C++11 enabled. Everything compiles, but I get a link error at the end - it says it can't find the CoreAudio and CoreAudioKit frameworks (yes, they do exist, I checked!). Clang output is below, thanks!

Ld build/Debug/JuceOPLVSTi.component/Contents/MacOS/JuceOPLVSTi normal x86_64
cd /Users/nick/Downloads/JuceOPLVSTi-master2/Builds/MacOSX
setenv MACOSX_DEPLOYMENT_TARGET 10.7
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -bundle -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -L/Users/nick/Downloads/JuceOPLVSTi-master2/Builds/MacOSX/build/Debug -F/Users/nick/Downloads/JuceOPLVSTi-master2/Builds/MacOSX/build/Debug -filelist /Users/nick/Library/Developer/Xcode/DerivedData/JuceOPLVSTi-cuuknkxgvnyyyedlmrprkyxjunnq/Build/Intermediates/JuceOPLVSTi.build/Debug/JuceOPLVSTi.build/Objects-normal/x86_64/JuceOPLVSTi.LinkFileList -mmacosx-version-min=10.7 -bundle -lAudioUnit, CoreAudio, CoreAudioKit -stdlib=libc++ -framework Accelerate -framework AudioToolbox -framework AudioUnit -framework Carbon -framework Cocoa -framework CoreAudio -framework CoreAudioKit -framework CoreMIDI -framework DiscRecording -framework IOKit -framework OpenGL -framework QTKit -framework QuartzCore -framework QuickTime -framework WebKit -Xlinker -dependency_info -Xlinker /Users/nick/Library/Developer/Xcode/DerivedData/JuceOPLVSTi-cuuknkxgvnyyyedlmrprkyxjunnq/Build/Intermediates/JuceOPLVSTi.build/Debug/JuceOPLVSTi.build/Objects-normal/x86_64/JuceOPLVSTi_dependency_info.dat -o /Users/nick/Downloads/JuceOPLVSTi-master2/Builds/MacOSX/build/Debug/JuceOPLVSTi.component/Contents/MacOS/JuceOPLVSTi

clang: error: no such file or directory: 'CoreAudio,'
clang: error: no such file or directory: 'CoreAudioKit'

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Dec 12, 2013

Nick,

CoreAudio is a dependency of Juce. Seems like Apple has futzed with it in XCode 5 and Juce has not caught up yet. Please see this thread to see if it helps you fix the issue:

http://www.juce.com/forum/topic/aus-xcode-5

If not, would it be possible to try an older version of XCode?

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Dec 12, 2013

Thanks, Bruce, that is a good suggestion. I have an older hard drive with Xcode 3.2.6 on it, but when I tried to build the plug-in, it failed with 1483 errors. I'll try again after work!

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Dec 14, 2013

Well, I finally got a clean build in Xcode 5! I downloaded your latest commit, added the CoreAudio frameworks to Xcode Contents > Developer > Extras (patched per the above blog), and set the build settings in Introjucer to AudioUnit only, base SDK default, compatibility OS X 10.6, and architecture 32-bit universal.

There were a lot of warnings (semantic issue: '__forceinline' attribute ignored; 'setToggleState' is deprecated) but no errors, and I got an AU component for the debug target!

I can't get it to show up in GarageBand, but I was able to load it in Apple's AU Host tool and get sound out of it! Many thanks for the help!

Project files are here: http://www.rezmerski.com/nick/code/

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Dec 15, 2013

That's really great news Nick! Thank you so much for all your efforts and your detailed notes. I'll add them to the documentation

Could you please put up the final binary too, so I can add it as a release here on github? I've had quite a few requests for an OSX binary but unfortunately I don't have access to any Macs...

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Dec 15, 2013

The binary is in JuceOPLVSTi.component.zip!

Incidentally, can this version import .sbi instruments? I haven't found a way to do it, since "Load" doesn't want to read .sbi files.

  • Nick
@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Dec 15, 2013

Hi Nick,

Ah! now I see the binary. To install the Mac version, do users just need "Components/MacOS/JuceOPLVSTi" ? Or do they need all the files in the zip? Also, out of curiosity, have you tried building in Release mode?

Yes, this version should be able to import .SBI files if you drag and drop them onto the UI window. Of course I've only tested that under Windows though :)

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Dec 16, 2013

Hi Bruce,

Yes, you drop the component into /Library/Audio/Plug-ins/Components, and the VST version (which is also a component, just with a .vst extension instead of .component) into the VST folder. They should become available to applications with a relaunch.

However, I can't recommend doing that right now - I'm having a lot of problems with it in GarageBand. When I first insert a track using the plugin, I often get horrible loud grinding noises from the speakers. Stopping the playback doesn't silence it, but closing the project does. It is really annoying... definitely not ready for distribution.

I didn't think of dragging and dropping! Awesome. The plug-in successfully imported .sbi files that way, but as I said, I'm having trouble getting them to play back cleanly! Tracks are often noisy, warbly, or off-pitch.

Have you looked at Robson Cozendey's OPL3 emulator? He wrote it in Java, but the Zdoom project translated it to C++ to integrate it with their other FM engines. I tried compiling it into a JUCE plug-in, but it has a lot of spaghetti header dependencies I need to sort through...

Cheers,

  • Nick
@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Dec 16, 2013

Hi Nick,

Thanks for letting me know about the issue. I might open another issue for that. I suspect I'm not zeroing a buffer, or not implementing one of the Juce audio plugin methods correctly.

Funny you should mention Robson's emulator. I emailed him about a week ago to see if he minds if I have a hack on it. No promises, but when I have some time in a couple of weeks I might experiment with the code from Zdoom.

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Dec 16, 2013

Oh, one thing to note about the binaries - on the Mac, components are bundles, so they look like folders in other filesystems. On the Mac it appears to be a single file... but it's really a folder in disguise. :)

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Dec 23, 2013

Hi Nick, thanks for that.

I took a look at the code, but I'm at a bit of a loss when it comes to figuring out the weird issues you're seeing in GarageBand. If you get time to look at it again:

  • Is there very high CPU usage when the plugin is running?
  • Did you try building in release mode?
  • Is GarageBand configured to run at 44.1 kHz? Unfortunately the plugin is currently hardcoded to work at that sample rate.

Cheers.

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Dec 23, 2013

Hi Bruce,

I haven't tried building it in release mode yet, but I will give it a shot. GarageBand seems to run consistently at 40%-50% of CPU regardless of whether I'm using the plug-in. I didn't notice any spikes with different tracks. As far as I know, GarageBand is fixed at 44.1kHz.

I don't know if this issue is JUCE-related or the DOSBox code, but I can try building some more plug-ins with JUCE and see if they exhibit the same behavior.

Thanks for looking into it! BTW, I told Bobby Prince about your work and he put it on his blog. :)

  • Nick
@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Dec 24, 2013

Hi Nick,

Your idea to try building some other Juce based plug-ins is a good one. Let me know what you find.

Thanks for spreading the word :) Bobby Prince, nice one!

Bruce

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Aug 31, 2014

Hi Bruce, I finally got around to updating my Xcode environment in Mavericks to support Core Audio (Audio Units) and after much fiddling, I was able to get a clean build! Now to see how it works.

Adjustments I made include:

  • Set Introjucer project module paths for “XCode (MacOSX)” to “~/Desktop/JUCE-master”
  • Set Introjucer Xcode target “VST folder” to “~/SDKs/vstsdk2.4”
  • Installed CoreAudio files from Audio Tools Feb. 2012
  • Made edits to CoreAudio SDK files per: http://teragonaudio.com/article/Building-AudioUnits-with-modern-Mac-OSX.html
  • Copied AUResources.r to JuceLibraryCode/modules/juce_audio_plugin_client/AU/
  • Changed __int64 in config.h to “long long”
  • Fixed #define DebugMessage(msg) error in Core Audio/PublicUtility/CADebugMacros.h
  • Fixed implicit cast in audioaffect.cpp line 512
  • Added vstsdk2.4 to header search path
    • Nick

Update: still get odd buzzing noises when I add the instrument into GarageBand. It comes and goes depending on which tracks I have muted. Not sure if this is a Core Audio thing, a Juce thing, or a DOSbox emulator thing.

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Sep 1, 2014

Great! Hope it goes better this time. I updated to the latest version of
juce for the windows build. Might be worth a try for the osx build too if
you haven't already.

If possible, please send a binary and push up a merge request when you're
done!
On 1 Sep 2014 03:07, "nrezmerski" notifications@github.com wrote:

Hi Bruce, I finally got around to updating my Xcode environment in
Mavericks to support Core Audio (Audio Units) and after much fiddling, I
was able to get a clean build! Now to see how it works.

Adjustments I made include:

  • Set Introjucer project module paths for “XCode (MacOSX)” to
    “~/Desktop/JUCE-master”

  • Set Introjucer Xcode target “VST folder” to “~/SDKs/vstsdk2.4”

  • Installed CoreAudio files from Audio Tools Feb. 2012

  • Made edits to CoreAudio SDK files per:
    http://teragonaudio.com/article/Building-AudioUnits-with-modern-Mac-OSX.html

  • Copied AUResources.r to
    JuceLibraryCode/modules/juce_audio_plugin_client/AU/

  • Changed __int64 in config.h to “long long”

  • Fixed #define DebugMessage(msg) error in Core
    Audio/PublicUtility/CADebugMacros.h

  • Fixed implicit cast in audioaffect.cpp line 512

    Added vstsdk2.4 to header search path

    • Nick


Reply to this email directly or view it on GitHub
#12 (comment)
.

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Sep 1, 2014

I'd like to resolve the noise issues if possible before posting a binary. Also, I haven't yet figured out how to compile it for older versions of OS X (>= 10.6) or make it Universal 32/64-bit, which would be useful to more people. Is it possible to modify the synthesis module to just output a simple sine wave or something for testing?

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Sep 2, 2014

So the noise is still there? Bummer :(

You should be able to get a straight sine by setting carrier to sine and
setting modulator attenuation down as low as possible (-47.25 dB).

I don't know much about OSX or AudioUnit, but are VSTs supported at all
under OSX?

Bruce
On 2 Sep 2014 08:44, "nrezmerski" notifications@github.com wrote:

I'd like to resolve the noise issues if possible before posting a binary.
Also, I haven't yet figured out how to compile it for older versions of OS
X (>= 10.6) or make it Universal 32/64-bit, which would be useful to more
people. Is it possible to modify the synthesis module to just output a
simple sine wave or something for testing?


Reply to this email directly or view it on GitHub
#12 (comment)
.

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Sep 3, 2014

Yes, OS X can use VSTs, just not ones compiled for Windows. Apple doesn't really support them, though, hence GarageBand used AudioUnits instead.

I was thinking instead to bypass the synth engine in the plugin, to see if the noise is mitigated when the DOSbox code isn't used, rather than setting it up to output a sine wave.

In the meantime, do you think any of the tweaks I made might have affected its functionality? I'm wary of that __int64 > long long substitution, for example.

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Sep 3, 2014

Nick,

Might be time to hit it with the debug stick.

If you open up PluginProcessor.cpp and go to void
JuceOplvstiAudioProcessor::processBlock .. at the end where it calls
Opl->Generate(). That's where data gets copied into the audio buffer
provided by the host.

So, you could just hack HiOpl::Generate to put out a pure sine wave if you
wanted. For VST, Juce expects normalized floating point values. I don't
know about AudioUnit.

Notice I put a comment about how I should use Juce's in-built format
conversion, but I couldn't get it working.

Happy hacking, and let me know if you have any questions.

Bruce

On Wed, Sep 3, 2014 at 1:14 PM, nrezmerski notifications@github.com wrote:

Yes, OS X can use VSTs, just not ones compiled for Windows. Apple doesn't
really support them, though, hence GarageBand used AudioUnits instead.

I was thinking instead to bypass the synth engine in the plugin, to see if
the noise is mitigated when the DOSbox code isn't used, rather than setting
it up to output a sine wave.

In the meantime, do you think any of the tweaks I made might have affected
its functionality? I'm wary of that __int64 > long long substitution, for
example.


Reply to this email directly or view it on GitHub
#12 (comment)
.

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Sep 4, 2014

Bruce, I tried a simple trick by setting all the samples to 0.0f in Generate(), and the plugin makes no noise - so that rules out issues with Juce and AudioUnits if I'm correct.

Next, I tried a simple sine and sawtooth pattern using a second float variable j to set the samples. The plugin makes a monotone noise in each case. The interesting thing is, it doesn't stop making noise when I stop playback - the track is not playing, but the noise keeps coming. Not sure why that would happen. I'll keep digging.

  • Nick
@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Sep 4, 2014

Sounds like you're on the right road. Might be nice to visualize the data
coming out of the plugin - maybe using an oscilloscope in your host
software. That might give you some idea what's going on.

The reason the sound doesn't stop is that you're ignoring all inputs from
the host and just spamming it continuously with your output.

You could try generating a pure sine in the integer sample format used by
the DOSBox code (I think it's 16-bit signed, but stored in a 32-bit
buffer), and push it through my crufty conversion. Maybe the issue is there?

On Thu, Sep 4, 2014 at 10:56 AM, nrezmerski notifications@github.com
wrote:

Bruce, I tried a simple trick by setting all the samples to 0.0f in
Generate(), and the plugin makes no noise - so that rules out issues with
Juce and AudioUnits if I'm correct.

Next, I tried a simple sine and sawtooth pattern using a second float
variable j to set the samples. The plugin makes a monotone noise in each
case. The interesting thing is, it doesn't stop making noise when I stop
playback - the track is not playing, but the noise keeps coming. Not sure
why that would happen. I'll keep digging.

  • Nick


Reply to this email directly or view it on GitHub
#12 (comment)
.

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Sep 5, 2014

I haven't figured out the source of the noise, but the plugin seems to work with a single instance and has trouble when I add a second track. I'm not sure how JUCE audio plugins handle multiple voices, but as I mentioned, I need to bite the bullet and dig into the code!

I don't think sample conversion is the problem, because it sounds pretty good with only a single track playing using an instance of the plugin.

I did check my data sizes since I'm compiling on a 64-bit system:
Size of int: 4
Size of short: 2
Size of long: 8
Size of float: 4
Size of double: 8
Size of long double: 16
Size of long long: 8

@Jeff-Russ

This comment has been minimized.

Copy link
Contributor

@Jeff-Russ Jeff-Russ commented Feb 23, 2015

Weird. I tested it in Ableton Live, Reaper and Logic Pro and it worked fine in all of them. I have no idea...

@Jeff-Russ

This comment has been minimized.

Copy link
Contributor

@Jeff-Russ Jeff-Russ commented Feb 23, 2015

Yeah I get "plugin failed to load" on my older mac. It's definitely an Apple framework issue too. I'm gonna unpublish the page until I work it out. Thanks for testing!!!

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Feb 23, 2015

I managed to build the Juce plugin host demo, which gave me trouble before. I had a lot of errors in the VST3 files, so I just disabled the VST3 features and it compiled. When I ran it, I was able to see your binary plugin, and load it - and it made noise! Multiple instances with no problems. :)

@Jeff-Russ

This comment has been minimized.

Copy link
Contributor

@Jeff-Russ Jeff-Russ commented Feb 23, 2015

It made noise as in good noise or bad noise? lol Is this the VST or the AU?

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Feb 23, 2015

It sounded good, is what I mean. Not white noise, music. I should have been clear. :)

This is the AU binary you most recently uploaded.

@Jeff-Russ

This comment has been minimized.

Copy link
Contributor

@Jeff-Russ Jeff-Russ commented Feb 23, 2015

Apparently some DAWs will fail a plugin if it's mono and you try to insert it into a stereo channel. Apparently VSTi does not have this issue. This would explain why AU validation does not fail but loading does fail. I am 99.999% sure this is the answer. I will try to find and answer to this.

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Feb 23, 2015

That's correct-- Garage Band v.10 and '08 (v.4) don't see it. Here's the auval output:

AU Validation Tool
Version: 1.6.1a1 
Copyright 2003-2013, Apple Inc. All Rights Reserved.
Specify -h (-help) for command options

VALIDATING AUDIO UNIT: 'aumu' - 'PwAB' - 'Pwve'

2015-02-23 14:21:45.926 auvaltool[28563:d07] 14:21:45.898 WARNING: [0x7fff75e53310] >compload> AudioComponentPluginLoader.cpp:662: RegisterComponentsFromArray:
Manufacturer String: Plainweave Software
AudioUnit Name: AdlibBlaster
Component Version: 0.11.1 (0xB01)
Component's Bundle Version: 0.0.0

* * PASS

TESTING OPEN TIMES:
COLD:
JUCE v3.1.1

=== Starting debug console.....
Time to open AudioUnit: 2048.391 ms
WARM:

=== Starting debug console.....
Time to open AudioUnit: 147.424 ms
FIRST TIME:
Time for initialization: 0.012 ms

=== Exited debug console ===

* * PASS

VERIFYING DEFAULT SCOPE FORMATS:
Input Scope Bus Configuration:
Default Bus Count:0

Output Scope Bus Configuration:
Default Bus Count:1
Default Format: AudioStreamBasicDescription: 1 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved

* * PASS

VERIFYING REQUIRED PROPERTIES:

* * PASS

VERIFYING RECOMMENDED PROPERTIES:
VERIFYING PROPERTY: Latency
ca_require: inScope == kAudioUnitScope_Global InvalidScope /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp:402
ca_require: inScope == kAudioUnitScope_Global InvalidScope /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp:402
ca_require: inScope == kAudioUnitScope_Global InvalidScope /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp:402
ca_require: inScope == kAudioUnitScope_Global InvalidScope /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp:402
ca_require: inScope == kAudioUnitScope_Global InvalidScope /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp:402
ca_require: inScope == kAudioUnitScope_Global InvalidScope /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp:402
PASS

* * PASS

VERIFYING OPTIONAL PROPERTIES:
VERIFYING PROPERTY Tail Time
ca_require: inScope == kAudioUnitScope_Global InvalidScope /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp:408
ca_debug_string: AudioUnitGetProperty: *ioDataSize == 0 on entry /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp:178
ca_require: inScope == kAudioUnitScope_Global InvalidScope /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp:408
ca_debug_string: AudioUnitGetProperty: *ioDataSize == 0 on entry /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp:178
ca_require: inScope == kAudioUnitScope_Global InvalidScope /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp:408
ca_debug_string: AudioUnitGetProperty: *ioDataSize == 0 on entry /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp:178
PASS
ca_debug_string: AudioUnitGetProperty: *ioDataSize == 0 on entry /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp:178
ca_debug_string: AudioUnitGetProperty: *ioDataSize == 0 on entry /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp:178
ca_debug_string: AudioUnitGetProperty: *ioDataSize == 0 on entry /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp:178
ca_debug_string: AudioUnitGetProperty: *ioDataSize == 0 on entry /Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp:178

* * PASS

VERIFYING SPECIAL PROPERTIES:

VERIFYING CUSTOM UI
Cocoa Views Available: 1
JUCE_AUCocoaViewClass_6f7c1de6d12b6298
PASS

HAS FACTORY PRESETS
ID: 0 Name: Buzcut Bass
ID: 1 Name: Dark Future Sweep
ID: 2 Name: Death Toll Bell
ID: 3 Name: Desert Pipe
ID: 4 Name: Emperor Chord
ID: 5 Name: Harpsi
ID: 6 Name: Mercenary Bass
ID: 7 Name: Patrol Bass
ID: 8 Name: Sinister Bass
ID: 9 Name: Subdue Bass
ID: 10 Name: Tromba
ID: 11 Name: Westwood Chime
ID: 12 Name: Y2180 Strings
ID: 13 Name: bassdrum

VERIFYING CLASS INFO
PASS

TESTING HOST CALLBACKS
PASS

* * PASS

PUBLISHED PARAMETER INFO:

# # 32 Global Scope Parameters:

Parameter ID:0
Name: Carrier Wave
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:1
Name: Modulator Wave
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:2
Name: Carrier Frequency Multiplier
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:3
Name: Modulator Frequency Multiplier
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:4
Name: Carrier Attenuation
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:5
Name: Modulator Attenuation
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:6
Name: Tremolo Depth
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:7
Name: Vibrato Depth
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:8
Name: Carrier Tremolo
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:9
Name: Carrier Vibrato
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:10
Name: Carrier Sustain
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:11
Name: Carrier Keyscale Rate
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:12
Name: Modulator Tremolo
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:13
Name: Modulator Vibrato
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:14
Name: Modulator Sustain
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:15
Name: Modulator Keyscale Rate
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:16
Name: Carrier Keyscale Level
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:17
Name: Modulator Keyscale Level
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:18
Name: Algorithm
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:19
Name: Modulator Feedback
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:20
Name: Carrier Attack
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:21
Name: Carrier Decay
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:22
Name: Carrier Sustain Level
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:23
Name: Carrier Release
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:24
Name: Modulator Attack
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:25
Name: Modulator Decay
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:26
Name: Modulator Sustain Level
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:27
Name: Modulator Release
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:28
Name: Carrier Velocity Sensitivity
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:29
Name: Modulator Velocity Sensitivity
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:30
Name: Emulator
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Parameter ID:31
Name: Percussion Mode
Parameter Type: Generic
Values: Minimum = 0, Default = 0, Maximum = 1
Flags: Values Have Strings, Readable, Writable
-parameter PASS

Testing that parameters retain value across reset and initialization
PASS

* * PASS

FORMAT TESTS:

Reported Channel Capabilities (explicit):
[0, 1]

No Input, Output Chans:
0-1 0-2 0-4 0-5 0-6 0-7 0-8
X

* * PASS

RENDER TESTS:

Output Format: AudioStreamBasicDescription: 1 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved
Render Test at 512 frames
Slicing Render Test at 64 frames
PASS

Render Test at 64 frames, sample rate: 22050 Hz
Render Test at 137 frames, sample rate: 96000 Hz
Render Test at 4096 frames, sample rate: 48000 Hz
Render Test at 4096 frames, sample rate: 192000 Hz
Render Test at 4096 frames, sample rate: 11025 Hz
Render Test at 512 frames, sample rate: 44100 Hz
PASS

1 Channel Test:
Render Test at 512 frames
PASS

Bad Max Frames - Render should fail
/Applications/Xcode.app/Contents/Developer/Extras/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp:1439 inFramesToProcess=8192, mMaxFramesPerSlice=512; TooManyFrames
from AU (0x810001): 'aumu' 'PwAB' 'Pwve', render err: -10874
PASS

Checking parameter setting
Using AudioUnitSetParameter
Using AudioUnitScheduleParameter
PASS

Test MIDI
PASS

* * PASS

=== Exited debug console ===

AU VALIDATION SUCCEEDED.

@Jeff-Russ

This comment has been minimized.

Copy link
Contributor

@Jeff-Russ Jeff-Russ commented Feb 23, 2015

If my theory is correct, the following will work in Garage Band, putting out audio only in the left channel...

http://bit.ly/1FPNA4h

This is also a possible explanation for the garbage noise when first loading the AU in Logic. It's taking audio from a buffer that doesn't exist for the right channel. What it finds is garbage.

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Feb 23, 2015

No luck... it doesn't load in GB and auval shows this:


VALIDATING AUDIO UNIT: 'aumu' - 'PwAB' - 'Pwve'

2015-02-23 15:02:22.971 auvaltool[30261:d07] 15:02:22.970 WARNING: [0x7fff75e53310] >compload> AudioComponentPluginLoader.cpp:662: RegisterComponentsFromArray:
Manufacturer String: Plainweave Software
AudioUnit Name: AdlibBlaster
Component Version: 0.11.1 (0xB01)
Component's Bundle Version: 0.0.0

* * PASS

TESTING OPEN TIMES:
COLD:
2015-02-23 15:02:23.068 auvaltool[30261:d07] Error loading /Library/Audio/Plug-Ins/Components/AdlibBlaster.component/Contents/MacOS/AdlibBlaster: dlopen(/Library/Audio/Plug-Ins/Components/AdlibBlaster.component/Contents/MacOS/AdlibBlaster, 262): Symbol not found: OBJC_CLASS$_NSHTTPURLResponse
Referenced from: /Library/Audio/Plug-Ins/Components/AdlibBlaster.component/Contents/MacOS/AdlibBlaster
Expected in: /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
in /Library/Audio/Plug-Ins/Components/AdlibBlaster.component/Contents/MacOS/AdlibBlaster
FATAL ERROR: OpenAComponent: result: -50,0xFFFFFFCE

@Jeff-Russ

This comment has been minimized.

Copy link
Contributor

@Jeff-Russ Jeff-Russ commented Feb 23, 2015

I've pretty much confirmed that the issue is caused by the way different DAW's handle mono AU's. When I made the AU be stereo with nothing in the right channel it worked in every DAW.

I think it's best to just avoid mono AU's and make a right channel that just mirrors the left. I don't think this will impact the windows version but If I does, I have a project snapshot taken now, just before I retool it to be "stereo."

@Jeff-Russ

This comment has been minimized.

Copy link
Contributor

@Jeff-Russ Jeff-Russ commented Feb 25, 2015

@ghost

This comment has been minimized.

Copy link
Author

@ghost ghost commented Feb 25, 2015

Thanks for the update! However, it makes scratching noises in GB 4, and doesn't show up at all in GB 10. Maybe you can get another GB user to try it?

Edit: I had an older version in my user library. New version doesn't show up in either GB. :(

@Jeff-Russ

This comment has been minimized.

Copy link
Contributor

@Jeff-Russ Jeff-Russ commented Feb 25, 2015

if GB is like Logic, it cashes versions until there is a name change. Look to see if there is a way to reset and reload.

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Nov 30, 2015

Nick,

In case you're still interested, I finally merged Jeff's code into the master branch. Hopefully it builds under OSX now.

Cheers,

Bruce

@Jeff-Russ

This comment has been minimized.

Copy link
Contributor

@Jeff-Russ Jeff-Russ commented Dec 3, 2015

Great!

@rpazyaquian

This comment has been minimized.

Copy link

@rpazyaquian rpazyaquian commented Feb 6, 2016

So does this mean this can be built for OSX machines now? Are there instructions for doing so anywhere aside from the comment line here?

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Feb 7, 2016

Rebecca,

It should build under OSX now, but unfortunately I have no way to confirm.

I'm afraid I also can't help much with build instructions, beyond what's in the comments here. If you are able to do it and can contribute instructions, that would be much appreciated!

For help, you could try the Juce forums, or possibly Jeff (who produced the first Mac build here: https://github.com/Jeff-Russ/AdlibBlaster)

Bruce

@Jeff-Russ

This comment has been minimized.

Copy link
Contributor

@Jeff-Russ Jeff-Russ commented Feb 7, 2016

Everybody: I'm consumed in a web development project at the moment but I plan to return and fix the Mac build as soon as I can. Sorry I've been AWOL!!

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Feb 7, 2016

Jeff, no worries at all! My day job is web development too..

Thanks a lot for your work getting it working under OSX.

@Jeff-Russ

This comment has been minimized.

Copy link
Contributor

@Jeff-Russ Jeff-Russ commented Feb 8, 2016

@rpazyaquian
This is by no stretch a "release" but I had some free time to I fired up Xcode. I just made a few changes and it compiled. It ran with no major issues in OSX 10.10 Logic Pro X and OSX 10.10 Ableton Live 9 as both AUi and VSTi. I didn't test it very much but see if this works for you...

Download AUi
Download VSTi
my fork of JuceOPLVSTi

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Feb 8, 2016

Great, thanks Jeff!

@gdreyband

This comment has been minimized.

Copy link

@gdreyband gdreyband commented Jan 30, 2017

Compiled for Mac this afternoon. Thanks for all the hard work! :)

JuceOPLVSTi-0.14.1-Mac.zip

@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented Jan 30, 2017

Thanks a lot for building! I'll add it to the release downloads.

Was it hard to build, or did it basically work out of the box?

@gdreyband

This comment has been minimized.

Copy link

@gdreyband gdreyband commented Jan 30, 2017

Pretty much right out of the box in Xcode once I relinked the JUCE plugins correctly.


Visual bugs I noticed (not sure if it's on the PC version):
-Selecting a checkbox creates a really noticeable white border around the entire option.
-Clicking on a DDL makes the green box around it disappear until an unrelated area is clicked.
-Load SBI instrument still opens window behind all other active DAW windows.
-When loading SBI files, the channel window doesn't reflect in-use channels (likely a deeper issue).


Another question, rather than messing with SBI files would you be interested in me creating a number of presets? A lot of VST/AUs provide a whole host of presets built into the plugin. Right now there's 14, but I'd be happy to create a lot more.


Also, if it's not too much hassle for you, I'm going to continue working on the GUI in my spare time to make it better. Right now there are some things bothering me.
-Attentuation slider (might be better placed to the right of the envelope), I see some chunky "step" motion when dragging it, which leads me to believe it could be shorter.
-Desire for custom elements for sliders and knobs to replace most DDLs.

I'm not going to foist any major changes on you, but I'm going to work on a couple of more drastic variations and see how far I can get before I present them to you. Once I figure out how to make good looking functional custom elements in JUCE, I'll provide some of that myself.

@bsutherland bsutherland added the osx label Oct 29, 2018
@bsutherland

This comment has been minimized.

Copy link
Owner

@bsutherland bsutherland commented May 31, 2019

To anyone interested in an OPL plugin for OSX, I recently found out about an excellent project called ADLplug. It is maintained, has builds for Windows and OSX, and does everything which JuceOPLVSTi does and more.

https://github.com/jpcima/ADLplug

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
4 participants
You can’t perform that action at this time.