logarithmic volume control

CQTexperiment
vspader 2006-05-13 13:37:32 +00:00
parent 31e95e7125
commit 4933dd62cb
5 changed files with 19 additions and 9 deletions

View File

@ -79,6 +79,7 @@
playlistView = PlaylistView; playlistView = PlaylistView;
positionSlider = TrackingSlider; positionSlider = TrackingSlider;
timeField = NSTextField; timeField = NSTextField;
volumeSlider = NSSlider;
}; };
SUPERCLASS = NSObject; SUPERCLASS = NSObject;
}, },

View File

@ -3,7 +3,7 @@
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>IBDocumentLocation</key> <key>IBDocumentLocation</key>
<string>19 350 617 240 0 0 1024 746 </string> <string>-18 96 617 240 0 0 1024 746 </string>
<key>IBEditorPositions</key> <key>IBEditorPositions</key>
<dict> <dict>
<key>29</key> <key>29</key>
@ -28,11 +28,11 @@
<integer>3</integer> <integer>3</integer>
<key>IBOpenObjects</key> <key>IBOpenObjects</key>
<array> <array>
<integer>21</integer>
<integer>823</integer>
<integer>463</integer>
<integer>513</integer> <integer>513</integer>
<integer>463</integer>
<integer>823</integer>
<integer>29</integer> <integer>29</integer>
<integer>21</integer>
</array> </array>
<key>IBSystem Version</key> <key>IBSystem Version</key>
<string>8I127</string> <string>8I127</string>

Binary file not shown.

View File

@ -14,6 +14,7 @@
IBOutlet PlaylistView *playlistView; IBOutlet PlaylistView *playlistView;
IBOutlet TrackingSlider *positionSlider; IBOutlet TrackingSlider *positionSlider;
IBOutlet NSSlider *volumeSlider;
IBOutlet NSTextField *timeField; IBOutlet NSTextField *timeField;
IBOutlet NSTextField *lengthField; IBOutlet NSTextField *lengthField;
IBOutlet NSTextField *bitrateField; IBOutlet NSTextField *bitrateField;

View File

@ -23,6 +23,7 @@
- (void)awakeFromNib - (void)awakeFromNib
{ {
currentVolume = 100.0; currentVolume = 100.0;
[volumeSlider setDoubleValue:pow(10.0, log10(0.5)/4.0)*[volumeSlider maxValue]];
} }
@ -157,16 +158,23 @@
- (IBAction)changeVolume:(id)sender - (IBAction)changeVolume:(id)sender
{ {
currentVolume = (float)[sender doubleValue]; float percent;
//gravitates at the halfway mark //Approximated log
float v = ([sender frame].size.width/[sender maxValue])*(currentVolume-([sender maxValue]/2.0)); percent = (float)[sender doubleValue]/[sender maxValue];
percent = percent * percent * percent * percent;
//gravitates at the 100% mark
float v = [sender frame].size.width - ([sender frame].size.width*(percent*[sender maxValue])/100.0);
if (fabs(v) < 10.0) if (fabs(v) < 10.0)
{ {
currentVolume = [sender maxValue]/2.0; percent = 0.5;
[sender setDoubleValue:currentVolume]; v = pow(10.0, log10(percent)/4.0);
[sender setDoubleValue:v*[sender maxValue]];
} }
currentVolume = percent * [sender maxValue];
[soundController setVolume:currentVolume]; [soundController setVolume:currentVolume];
} }