Initial release
This commit is contained in:
Vendored
+193
@@ -0,0 +1,193 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Project : VST SDK
|
||||
//
|
||||
// Category : Helpers
|
||||
// Filename : public.sdk/source/vst/interappaudio/VSTInterAppAudioAppDelegateBase.mm
|
||||
// Created by : Steinberg, 08/2013.
|
||||
// Description : VST 3 InterAppAudio
|
||||
// Flags : clang-format SMTGSequencer
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
// This file is part of a Steinberg SDK. It is subject to the license terms
|
||||
// in the LICENSE file found in the top-level directory of this distribution
|
||||
// and at www.steinberg.net/sdklicenses.
|
||||
// No part of the SDK, including this file, may be copied, modified, propagated,
|
||||
// or distributed except according to the terms contained in the LICENSE file.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#import "VSTInterAppAudioAppDelegateBase.h"
|
||||
#import "public.sdk/source/vst/interappaudio/AudioIO.h"
|
||||
#import "public.sdk/source/vst/interappaudio/HostApp.h"
|
||||
#import "public.sdk/source/vst/interappaudio/MidiIO.h"
|
||||
#import "public.sdk/source/vst/interappaudio/VST3Editor.h"
|
||||
#import "public.sdk/source/vst/interappaudio/VST3Plugin.h"
|
||||
|
||||
using namespace Steinberg::Vst::InterAppAudio;
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
static OSType fourCharCodeToOSType (NSString* inCode)
|
||||
{
|
||||
OSType rval = 0;
|
||||
NSData* data = [inCode dataUsingEncoding:NSMacOSRomanStringEncoding];
|
||||
[data getBytes:&rval length:sizeof (rval)];
|
||||
HTONL (rval);
|
||||
return rval;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
@interface VSTInterAppAudioAppDelegateBase ()
|
||||
//------------------------------------------------------------------------
|
||||
{
|
||||
VST3Plugin plugin;
|
||||
VST3Editor editor;
|
||||
|
||||
BOOL audioIOInitialized;
|
||||
}
|
||||
@end
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
@implementation VSTInterAppAudioAppDelegateBase
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
- (BOOL)initAudioIO
|
||||
{
|
||||
id auArray = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AudioComponents"];
|
||||
if (auArray)
|
||||
{
|
||||
id desc = [auArray objectAtIndex:0];
|
||||
if (desc)
|
||||
{
|
||||
NSString* typeStr = [desc objectForKey:@"type"];
|
||||
NSString* subtypeStr = [desc objectForKey:@"subtype"];
|
||||
NSString* manufacturerStr = [desc objectForKey:@"manufacturer"];
|
||||
NSString* nameStr = [desc objectForKey:@"name"];
|
||||
if (typeStr && subtypeStr && manufacturerStr && nameStr)
|
||||
{
|
||||
OSType type = fourCharCodeToOSType (typeStr);
|
||||
OSType subtype = fourCharCodeToOSType (subtypeStr);
|
||||
OSType manufacturer = fourCharCodeToOSType (manufacturerStr);
|
||||
AudioIO* audioIO = AudioIO::instance ();
|
||||
if (audioIO->init (type, subtype, manufacturer, (__bridge CFStringRef)nameStr) ==
|
||||
Steinberg::kResultTrue)
|
||||
{
|
||||
if (plugin.init ())
|
||||
{
|
||||
InterAppAudioHostApp::instance ()->setPlugin (&plugin);
|
||||
audioIO->addProcessor (&plugin);
|
||||
audioIOInitialized = YES;
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
- (BOOL)createUI
|
||||
{
|
||||
if (audioIOInitialized)
|
||||
{
|
||||
[UIApplication sharedApplication].statusBarHidden = YES;
|
||||
self.window = [UIWindow new];
|
||||
self.window.backgroundColor = [UIColor redColor];
|
||||
CGRect screenSize = self.window.bounds;
|
||||
|
||||
if (editor.init (screenSize))
|
||||
{
|
||||
self.window.rootViewController = editor.getViewController ();
|
||||
[self.window makeKeyAndVisible];
|
||||
if (editor.attach (plugin.getEditController ()) == false)
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
- (void)savePluginState:(NSCoder*)coder
|
||||
{
|
||||
NSData* processorState = plugin.getProcessorState ();
|
||||
NSData* controllerState = plugin.getControllerState ();
|
||||
if (processorState)
|
||||
[coder encodeObject:processorState forKey:@"VST3ProcessorState"];
|
||||
if (controllerState)
|
||||
[coder encodeObject:controllerState forKey:@"VST3ControllerState"];
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
- (void)restorePluginState:(NSCoder*)coder
|
||||
{
|
||||
NSData* processorState = [coder decodeObjectForKey:@"VST3ProcessorState"];
|
||||
if (processorState)
|
||||
{
|
||||
plugin.setProcessorState (processorState);
|
||||
}
|
||||
NSData* controllerState = [coder decodeObjectForKey:@"VST3ControllerState"];
|
||||
if (controllerState)
|
||||
{
|
||||
plugin.setControllerState (controllerState);
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// UIApplicationDelegate methods
|
||||
//------------------------------------------------------------------------
|
||||
- (BOOL)application:(UIApplication*)application
|
||||
willFinishLaunchingWithOptions:(NSDictionary*)launchOptions
|
||||
{
|
||||
return [self initAudioIO];
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
- (BOOL)application:(UIApplication*)application
|
||||
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
|
||||
{
|
||||
BOOL result = [self createUI];
|
||||
if (result)
|
||||
{
|
||||
AudioIO::instance ()->start ();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
- (BOOL)application:(UIApplication*)application shouldSaveApplicationState:(NSCoder*)coder
|
||||
{
|
||||
[self savePluginState:coder];
|
||||
[coder encodeBool:MidiIO::instance ().isEnabled () forKey:@"MIDI Enabled"];
|
||||
return YES;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
- (BOOL)application:(UIApplication*)application shouldRestoreApplicationState:(NSCoder*)coder
|
||||
{
|
||||
[self restorePluginState:coder];
|
||||
BOOL midiEnabled = [coder decodeBoolForKey:@"MIDI Enabled"];
|
||||
MidiIO::instance ().setEnabled (midiEnabled);
|
||||
return YES;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
- (void)applicationDidBecomeActive:(UIApplication*)application
|
||||
{
|
||||
AudioIO* audioIO = AudioIO::instance ();
|
||||
audioIO->start ();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
- (void)applicationWillResignActive:(UIApplication*)application
|
||||
{
|
||||
AudioIO* audioIO = AudioIO::instance ();
|
||||
if (audioIO->getInterAppAudioConnected () == false && MidiIO::instance ().isEnabled () == false)
|
||||
{
|
||||
audioIO->stop ();
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user