我正在实现AudioVisualizer
,并且我正在尝试计算音频时间,但是我遇到了错误
二进制运算符'*'不能应用于'Float'和'Double'类型的操作数
这是我的代码:
var lowPassReslts: Double = 0.0
var lowPassReslts1: Double = 0.0
let ALPHA: Float = 1.05
let averagePowerForChannel = pow(10, (0.05 * audioPlayer.averagePower(forChannel: 0)))
lowPassReslts = ALPHA * averagePowerForChannel + (1.0 - ALPHA) * lowPassReslts //HERE i am getting error which i mention above
let averagePowerForChannel1 = pow(10, (0.05 * audioPlayer.averagePower(forChannel: 1)))
lowPassReslts1 = ALPHA * averagePowerForChannel1 + (1.0 - ALPHA) * lowPassReslts1 //HERE i am getting error
上面的代码O是从Objective-C转换而来的。这段代码在Objective-C中可以完美地工作,但是在Swift中则不能。谁能告诉我如何解决此错误?
答案 0 :(得分:1)
var lowPassReslts: Double = 0.0
var lowPassReslts1: Double = 0.0
let ALPHA: Float = 1.05
let averagePowerForChannel = pow(10, (0.05 * audioPlayer.averagePower(forChannel: 0)))
lowPassReslts = Double(ALPHA * Float(averagePowerForChannel) + (1.0 - ALPHA) * Float(lowPassReslts))
let averagePowerForChannel1 = pow(10, (0.05 * audioPlayer.averagePower(forChannel: 1)))
lowPassReslts1 = Double(ALPHA * Float(averagePowerForChannel1) + (1.0 - ALPHA) * Float(lowPassReslts1))
答案 1 :(得分:0)
您需要为两个数据类型设置相同的数据类型,例如两者都是double或都为float。
答案 2 :(得分:0)
将ALPHA的参数类型设置为Double
,或将lowPassReslts更改为Float
。
尝试以下代码:
var lowPassReslts: Double = 0.0
var lowPassReslts1: Double = 0.0
let ALPHA: Double = 1.05
let averagePowerForChannel = pow(10, (0.05 * audioPlayer.averagePower(forChannel: 0)))
lowPassReslts = ALPHA * averagePowerForChannel + (1.0 - ALPHA) * lowPassReslts
let averagePowerForChannel1 = pow(10, (0.05 * audioPlayer.averagePower(forChannel: 1)))
lowPassReslts1 = ALPHA * averagePowerForChannel1 + (1.0 - ALPHA) * lowPassReslts1
很快就不需要声明变量类型了。您可以直接将变量声明为
var lowPassReslts = 0.0
var lowPassReslts1 = 0.0
let ALPHA = 1.05
尝试上述任何一种方法。希望对您有帮助。
答案 3 :(得分:0)
与目标C不同,您无法对2种不同类型的变量进行操作(因为 Swift Language是Type-Safe )。
要进行任何算术运算,两个操作数的类型必须相同。
如果您未指定变量的类型,则迅速从其值中推断出类型。
例如。
let a = 10 //Swift consider it -> Int type
let b = 20.0 //Swift consider it -> Double type
let result = a * b //Gives compile time error for the operand type
let result = Double(a) * b //No error, as Int is converted to Double
答案 4 :(得分:0)
Pow(Double,Double)它接受双精度型并返回双精度型。
让ALPHA:Float = 1.05,您明确声明了Float(更改命名约定,不应全部大写)。
快速地,您不能使用两种不同的类型执行任何二进制操作。
解决方案:将alpha类型更改为double或不声明数据类型,否则在操作期间将其转换为double。