Przeglądaj źródła

Added slider for sound input sensitivity

Thomas Buck 8 lat temu
rodzic
commit
2a0b6e3091

+ 28
- 1
CaseLights/AppDelegate.m Wyświetl plik

19
 #define PREF_LED_MODE @"LEDMode"
19
 #define PREF_LED_MODE @"LEDMode"
20
 #define PREF_BRIGHTNESS @"Brightness"
20
 #define PREF_BRIGHTNESS @"Brightness"
21
 #define PREF_COLOR @"ManualColor"
21
 #define PREF_COLOR @"ManualColor"
22
+#define PREF_SENSITIVITY @"Sensitivity"
22
 
23
 
23
 #define TEXT_MANUAL @"Select..."
24
 #define TEXT_MANUAL @"Select..."
24
 #define TEXT_CPU_USAGE @"CPU Usage"
25
 #define TEXT_CPU_USAGE @"CPU Usage"
73
 @property (weak) IBOutlet NSMenuItem *menuItemAudio;
74
 @property (weak) IBOutlet NSMenuItem *menuItemAudio;
74
 @property (weak) IBOutlet NSMenu *menuAudio;
75
 @property (weak) IBOutlet NSMenu *menuAudio;
75
 @property (weak) IBOutlet NSMenu *menuPorts;
76
 @property (weak) IBOutlet NSMenu *menuPorts;
76
-
77
 @property (weak) IBOutlet NSMenuItem *buttonOff;
77
 @property (weak) IBOutlet NSMenuItem *buttonOff;
78
 @property (weak) IBOutlet NSMenuItem *brightnessItem;
78
 @property (weak) IBOutlet NSMenuItem *brightnessItem;
79
 @property (weak) IBOutlet NSSlider *brightnessSlider;
79
 @property (weak) IBOutlet NSSlider *brightnessSlider;
80
 @property (weak) IBOutlet NSMenuItem *brightnessLabel;
80
 @property (weak) IBOutlet NSMenuItem *brightnessLabel;
81
 @property (weak) IBOutlet NSMenuItem *buttonLights;
81
 @property (weak) IBOutlet NSMenuItem *buttonLights;
82
+@property (weak) IBOutlet NSMenuItem *sensitivityItem;
83
+@property (weak) IBOutlet NSSlider *sensitivitySlider;
84
+@property (weak) IBOutlet NSMenuItem *sensitivityLabel;
85
+@property (weak) IBOutlet NSMenuItem *sensitivityMenu;
82
 
86
 
83
 @property (strong) NSMenuItem *menuItemColor;
87
 @property (strong) NSMenuItem *menuItemColor;
84
 
88
 
99
 @synthesize menuItemAudio, menuAudio;
103
 @synthesize menuItemAudio, menuAudio;
100
 @synthesize buttonOff, buttonLights;
104
 @synthesize buttonOff, buttonLights;
101
 @synthesize brightnessItem, brightnessSlider, brightnessLabel;
105
 @synthesize brightnessItem, brightnessSlider, brightnessLabel;
106
+@synthesize sensitivityItem, sensitivitySlider, sensitivityLabel, sensitivityMenu;
102
 @synthesize statusItem, statusImage;
107
 @synthesize statusItem, statusImage;
103
 @synthesize staticColors, animation;
108
 @synthesize staticColors, animation;
104
 @synthesize serial, lastLEDMode, microphone;
109
 @synthesize serial, lastLEDMode, microphone;
126
     [appDefaults setObject:[NSNumber numberWithBool:NO] forKey:PREF_LIGHTS_STATE];
131
     [appDefaults setObject:[NSNumber numberWithBool:NO] forKey:PREF_LIGHTS_STATE];
127
     [appDefaults setObject:@"" forKey:PREF_LED_MODE];
132
     [appDefaults setObject:@"" forKey:PREF_LED_MODE];
128
     [appDefaults setObject:[NSNumber numberWithFloat:50.0] forKey:PREF_BRIGHTNESS];
133
     [appDefaults setObject:[NSNumber numberWithFloat:50.0] forKey:PREF_BRIGHTNESS];
134
+    [appDefaults setObject:[NSNumber numberWithFloat:100.0] forKey:PREF_SENSITIVITY];
129
     [store registerDefaults:appDefaults];
135
     [store registerDefaults:appDefaults];
130
     [store synchronize];
136
     [store synchronize];
131
     NSString *savedPort = [store stringForKey:PREF_SERIAL_PORT];
137
     NSString *savedPort = [store stringForKey:PREF_SERIAL_PORT];
133
     NSString *lastMode = [store stringForKey:PREF_LED_MODE];
139
     NSString *lastMode = [store stringForKey:PREF_LED_MODE];
134
     float brightness = [store floatForKey:PREF_BRIGHTNESS];
140
     float brightness = [store floatForKey:PREF_BRIGHTNESS];
135
     NSData *lastColorData = [store dataForKey:PREF_COLOR];
141
     NSData *lastColorData = [store dataForKey:PREF_COLOR];
142
+    float sensitivity = [store floatForKey:PREF_SENSITIVITY];
136
     NSColor *lastColor = nil;
143
     NSColor *lastColor = nil;
137
     if (lastColorData != nil) {
144
     if (lastColorData != nil) {
138
         lastColor = (NSColor *)[NSUnarchiver unarchiveObjectWithData:lastColorData];
145
         lastColor = (NSColor *)[NSUnarchiver unarchiveObjectWithData:lastColorData];
324
     }
331
     }
325
     if ([inputDevices count] > 0) {
332
     if ([inputDevices count] > 0) {
326
         [menuItemAudio setHidden:NO];
333
         [menuItemAudio setHidden:NO];
334
+        
335
+        // Prepare sensitivity menu
336
+        sensitivityItem.view = sensitivitySlider;
337
+        [sensitivitySlider setFloatValue:sensitivity];
338
+        [sensitivityLabel setTitle:[NSString stringWithFormat:@"Value: %.0f%%", sensitivity]];
339
+        [sensitivityMenu setHidden:NO];
340
+        [AudioVisualizer setSensitivity:sensitivity];
327
     }
341
     }
328
 }
342
 }
329
 
343
 
512
     [self setLightsColor:[sender color]];
526
     [self setLightsColor:[sender color]];
513
 }
527
 }
514
 
528
 
529
+- (IBAction)sensitivityMoved:(NSSlider *)sender {
530
+    [sensitivityLabel setTitle:[NSString stringWithFormat:@"Value: %.0f%%", [sender floatValue]]];
531
+    [AudioVisualizer setSensitivity:[sender floatValue]];
532
+    
533
+    // Store changed value in preferences
534
+    NSUserDefaults *store = [NSUserDefaults standardUserDefaults];
535
+    [store setObject:[NSNumber numberWithFloat:[sender floatValue]] forKey:PREF_SENSITIVITY];
536
+    [store synchronize];
537
+}
538
+
515
 - (IBAction)brightnessMoved:(NSSlider *)sender {
539
 - (IBAction)brightnessMoved:(NSSlider *)sender {
516
     [brightnessLabel setTitle:[NSString stringWithFormat:@"Value: %.0f%%", [sender floatValue]]];
540
     [brightnessLabel setTitle:[NSString stringWithFormat:@"Value: %.0f%%", [sender floatValue]]];
517
     
541
     
728
         for (int  i = 0; i < [audioDevices count]; i++) {
752
         for (int  i = 0; i < [audioDevices count]; i++) {
729
             EZAudioDevice *dev = [audioDevices objectAtIndex:i];
753
             EZAudioDevice *dev = [audioDevices objectAtIndex:i];
730
             if ([[dev name] isEqualToString:[sender title]]) {
754
             if ([[dev name] isEqualToString:[sender title]]) {
755
+                // Send command to turn off LEDs
756
+                [self setLightsR:0 G:0 B:0];
757
+                
731
                 // Found device
758
                 // Found device
732
                 foundDev = YES;
759
                 foundDev = YES;
733
                 if (microphone != nil) {
760
                 if (microphone != nil) {

+ 1
- 0
CaseLights/AudioVisualizer.h Wyświetl plik

13
 @interface AudioVisualizer : NSObject
13
 @interface AudioVisualizer : NSObject
14
 
14
 
15
 + (void)setDelegate:(AppDelegate *)delegate;
15
 + (void)setDelegate:(AppDelegate *)delegate;
16
++ (void)setSensitivity:(float)sens;
16
 + (void)updateBuffer:(float *)buffer withBufferSize:(UInt32)bufferSize;
17
 + (void)updateBuffer:(float *)buffer withBufferSize:(UInt32)bufferSize;
17
 
18
 
18
 @end
19
 @end

+ 13
- 0
CaseLights/AudioVisualizer.m Wyświetl plik

54
 static AppDelegate *appDelegate = nil;
54
 static AppDelegate *appDelegate = nil;
55
 static EZAudioFFT *fft = nil;
55
 static EZAudioFFT *fft = nil;
56
 static int maxBufferSize = 0;
56
 static int maxBufferSize = 0;
57
+static float sensitivity = 1.0f;
57
 
58
 
58
 @implementation AudioVisualizer
59
 @implementation AudioVisualizer
59
 
60
 
61
     appDelegate = delegate;
62
     appDelegate = delegate;
62
 }
63
 }
63
 
64
 
65
++ (void)setSensitivity:(float)sens {
66
+    sensitivity = sens / 100.0;
67
+}
68
+
64
 + (void)updateBuffer:(float *)buffer withBufferSize:(UInt32)bufferSize {
69
 + (void)updateBuffer:(float *)buffer withBufferSize:(UInt32)bufferSize {
65
     // Create Fast Fourier Transformation object
70
     // Create Fast Fourier Transformation object
66
     if (fft == nil) {
71
     if (fft == nil) {
79
         fft = [EZAudioFFT fftWithMaximumBufferSize:maxBufferSize sampleRate:appDelegate.microphone.audioStreamBasicDescription.mSampleRate];
84
         fft = [EZAudioFFT fftWithMaximumBufferSize:maxBufferSize sampleRate:appDelegate.microphone.audioStreamBasicDescription.mSampleRate];
80
     }
85
     }
81
     
86
     
87
+    // Scale input if required
88
+    if (sensitivity != 1.0f) {
89
+        for (int i = 0; i < bufferSize; i++) {
90
+            buffer[i] *= sensitivity;
91
+        }
92
+    }
93
+    
94
+    // Perform fast fourier transformation
82
     [fft computeFFTWithBuffer:buffer withBufferSize:bufferSize];
95
     [fft computeFFTWithBuffer:buffer withBufferSize:bufferSize];
83
     
96
     
84
     static float history[FFT_BUCKET_COUNT][FFT_BUCKET_HISTORY];
97
     static float history[FFT_BUCKET_COUNT][FFT_BUCKET_HISTORY];

+ 27
- 1
CaseLights/Base.lproj/MainMenu.xib Wyświetl plik

28
                 <outlet property="menuItemDisplays" destination="1Cz-Xz-d16" id="rRz-n5-n2P"/>
28
                 <outlet property="menuItemDisplays" destination="1Cz-Xz-d16" id="rRz-n5-n2P"/>
29
                 <outlet property="menuPorts" destination="lFU-D0-M5p" id="pHd-AA-S3J"/>
29
                 <outlet property="menuPorts" destination="lFU-D0-M5p" id="pHd-AA-S3J"/>
30
                 <outlet property="menuVisualizations" destination="yZl-ae-7SI" id="b2b-dW-mvy"/>
30
                 <outlet property="menuVisualizations" destination="yZl-ae-7SI" id="b2b-dW-mvy"/>
31
+                <outlet property="sensitivityItem" destination="ioy-5y-tbs" id="huT-vf-Q9H"/>
32
+                <outlet property="sensitivityLabel" destination="luW-fv-Xlk" id="qbr-n1-q7M"/>
33
+                <outlet property="sensitivityMenu" destination="1Mp-yz-ggj" id="Xif-Mk-ff8"/>
34
+                <outlet property="sensitivitySlider" destination="0Vh-pa-Rae" id="4vd-WY-Jwv"/>
31
                 <outlet property="statusMenu" destination="g7M-LS-DgA" id="txO-T1-8yD"/>
35
                 <outlet property="statusMenu" destination="g7M-LS-DgA" id="txO-T1-8yD"/>
32
             </connections>
36
             </connections>
33
         </customObject>
37
         </customObject>
703
                     <modifierMask key="keyEquivalentModifierMask"/>
707
                     <modifierMask key="keyEquivalentModifierMask"/>
704
                     <menu key="submenu" title="Audio Inputs" id="KUj-jy-iwd"/>
708
                     <menu key="submenu" title="Audio Inputs" id="KUj-jy-iwd"/>
705
                 </menuItem>
709
                 </menuItem>
710
+                <menuItem title="Sensitivity" hidden="YES" id="1Mp-yz-ggj">
711
+                    <modifierMask key="keyEquivalentModifierMask"/>
712
+                    <menu key="submenu" title="Sensitivity" id="yt8-Dk-EIy">
713
+                        <items>
714
+                            <menuItem title="Item" id="ioy-5y-tbs">
715
+                                <modifierMask key="keyEquivalentModifierMask"/>
716
+                            </menuItem>
717
+                            <menuItem title="Value: 50%" enabled="NO" id="luW-fv-Xlk">
718
+                                <modifierMask key="keyEquivalentModifierMask"/>
719
+                            </menuItem>
720
+                        </items>
721
+                    </menu>
722
+                </menuItem>
706
                 <menuItem title="Brightness" id="Oh0-1U-yDg">
723
                 <menuItem title="Brightness" id="Oh0-1U-yDg">
707
                     <modifierMask key="keyEquivalentModifierMask"/>
724
                     <modifierMask key="keyEquivalentModifierMask"/>
708
                     <menu key="submenu" title="Brightness" id="jRu-sM-3xB">
725
                     <menu key="submenu" title="Brightness" id="jRu-sM-3xB">
765
             <connections>
782
             <connections>
766
                 <action selector="brightnessMoved:" target="Voe-Tx-rLC" id="Wxj-Xc-ZtT"/>
783
                 <action selector="brightnessMoved:" target="Voe-Tx-rLC" id="Wxj-Xc-ZtT"/>
767
             </connections>
784
             </connections>
768
-            <point key="canvasLocation" x="370.5" y="496.5"/>
785
+            <point key="canvasLocation" x="122.5" y="326.5"/>
786
+        </slider>
787
+        <slider verticalHuggingPriority="750" id="0Vh-pa-Rae">
788
+            <rect key="frame" x="0.0" y="0.0" width="129" height="30"/>
789
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
790
+            <sliderCell key="cell" alignment="left" maxValue="200" doubleValue="100" tickMarkPosition="below" numberOfTickMarks="11" sliderType="linear" id="39W-Os-oE7"/>
791
+            <connections>
792
+                <action selector="sensitivityMoved:" target="Voe-Tx-rLC" id="4Vd-6i-qvd"/>
793
+            </connections>
794
+            <point key="canvasLocation" x="122.5" y="394.5"/>
769
         </slider>
795
         </slider>
770
     </objects>
796
     </objects>
771
 </document>
797
 </document>

+ 1
- 1
CaseLights/Info.plist Wyświetl plik

21
 	<key>CFBundleSignature</key>
21
 	<key>CFBundleSignature</key>
22
 	<string>????</string>
22
 	<string>????</string>
23
 	<key>CFBundleVersion</key>
23
 	<key>CFBundleVersion</key>
24
-	<string>391</string>
24
+	<string>397</string>
25
 	<key>LSApplicationCategoryType</key>
25
 	<key>LSApplicationCategoryType</key>
26
 	<string>public.app-category.utilities</string>
26
 	<string>public.app-category.utilities</string>
27
 	<key>LSMinimumSystemVersion</key>
27
 	<key>LSMinimumSystemVersion</key>

Ładowanie…
Anuluj
Zapisz