我有两个AVAudioPlayers,分别称为“节点”和“区域”。他们有时会同时玩。发生这种情况时,我需要将“区域”的音量降至0.2。当“节点”完成时,我需要将“区域”返回到其原始卷(从阵列中拉入)。我有一个AdjustPlayerVolume方法和另一个在节点完成时将'nodeIsPlaying'变量设置为false的方法。这些都很好。
以下代码用于检测音量是否需要增大或减小或保持原样。只要应用程序运行,它就会一直循环运行。
NSLog(@"Zone Volume = %f", zonePlayer.volume);
if ((nodeIsPlaying == false) && (zonePlayer.volume <= 0.200000)) {
float maxVolume = [[[locationArray objectAtIndex:1] valueForKey:@"volume"] floatValue];
[self adjustZoneVolume:maxVolume];
NSLog(@"adjustZoneVolume called, node isn't playing and zonePlayer volume needs to be raised");
}
if ((nodeIsPlaying == true) && (zonePlayer.volume != 0.200000)) {
float maxVolume = 0.2;
[self adjustZoneVolume:maxVolume];
NSLog(@"adjustZoneVolume called, node is playing and zonePlayer volume needs to be lowered");
}
顶部的日志始终向控制台打印0.200000。
当nodeIsPlaying设置为true时,即使NOT运算符应防止发生这种情况,也会返回底部条件。
当nodeIsPlaying设置为false时,什么也不会发生。
因此
可能真的很愚蠢...
有任何想法吗?
提前致谢。
最佳答案
对于精度运算,请使用NSDecimalNumber类。
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithFloat:zonePlayer.volume] decimalValue]];
NSDecimalNumber *number2 = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithFloat:0.2f] decimalValue]];
NSComparisonResult comparisonResult = [number compare:number2];
if ((nodeIsPlaying == false) && (comparisonResult == NSOrderedSame || comparisonResult == NSOrderedDescending)) {
}