1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
//
// ViewController.m
// iOS Demo
//
// Created by Ariel Elkin on 03/03/2014.
//
#import "ViewController.h"
#import "SineWave.h"
#import "Brass.h"
#import "Mandolin.h"
@implementation ViewController {
stk::SineWave *sineWave;
stk::Brass *brass;
}
- (void)loadView {
self.view = [UIView new];
[self.view setBackgroundColor:[UIColor whiteColor]];
[self setupUI];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSUInteger samplesToGenerate = 1000;
//Test SineWave:
sineWave = new stk::SineWave();
for (NSUInteger i = 0; i < samplesToGenerate; i ++) {
float sample = sineWave->tick();
NSLog(@"SineWave sample: %f", sample);
}
//Test Brass:
brass = new stk::Brass();
brass->noteOn(400, 1);
for (NSUInteger i = 0; i < samplesToGenerate; i ++) {
float sample = brass->tick();
NSLog(@"Brass sample: %f", sample);
}
//We're going to be making use of a class that needs
//raw wave files, we need to tell the STK where
//the files are:
stk::Stk::setRawwavePath([[[NSBundle mainBundle] pathForResource:@"rawwaves" ofType:@"bundle"] UTF8String]);
//Test Mandolin:
stk::Mandolin *mandolin = new stk::Mandolin(400);
mandolin->pluck(1);
for (NSUInteger i = 0; i < samplesToGenerate; i ++) {
float sample = mandolin->tick();
NSLog(@"Mandolin sample: %f", sample);
}
#pragma mark TODO - Audio playback
}
- (void)sineSliderMoved:(UISlider *)slider {
sineWave->setFrequency(slider.value);
NSLog(@"Setting SineWave frequency to %.2f", slider.value);
}
- (void)brassSliderMoved:(UISlider *)slider {
brass->setFrequency(slider.value);
NSLog(@"Setting Brass frequency to %.2f", slider.value);
}
- (void)setupUI {
//Add slider to control sine wave frequency:
UISlider *sineSlider = [[UISlider alloc] init];
[sineSlider addTarget:self action:@selector(sineSliderMoved:) forControlEvents:UIControlEventValueChanged];
[sineSlider setMinimumValue:0];
[sineSlider setMaximumValue:800];
[sineSlider setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:sineSlider];
NSDictionary *metrics = @{@"sliderWidth": @200};
NSArray *sliderConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-40-[sineSlider(sliderWidth)]" options:0 metrics:metrics views:@{@"sineSlider": sineSlider}];
[self.view addConstraints:sliderConstraints];
//Add slider to control brass's frequency:
UISlider *brassSlider = [[UISlider alloc] init];
[brassSlider addTarget:self action:@selector(brassSliderMoved:) forControlEvents:UIControlEventValueChanged];
[brassSlider setMinimumValue:0];
[brassSlider setMaximumValue:800];
[brassSlider setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:brassSlider];
sliderConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-40-[brassSlider(sliderWidth)]" options:0 metrics:metrics views:@{@"brassSlider": brassSlider}];
[self.view addConstraints:sliderConstraints];
sliderConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[sineSlider]-[brassSlider]" options:0 metrics:nil views:@{@"sineSlider": sineSlider, @"brassSlider": brassSlider}];
[self.view addConstraints:sliderConstraints];
}
@end
|