File: ViewController.mm

package info (click to toggle)
stk 4.6.1%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 5,668 kB
  • sloc: cpp: 31,646; ansic: 3,216; sh: 2,900; tcl: 2,414; perl: 114; objc: 60; makefile: 48
file content (108 lines) | stat: -rw-r--r-- 3,425 bytes parent folder | download | duplicates (3)
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