194 lines
6.1 KiB
Plaintext
194 lines
6.1 KiB
Plaintext
//-----------------------------------------------------------------------------
|
|
// 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
|