Ios 无法调用类型为';非女性化指针<;浮动>';具有类型为';(不可女性化的指针!)';
第5行上的此关联对应用程序的成功没有帮助。但我真的不明白那一刻发生了什么 ÜnsafeMutablePointer的重载与部分匹配的参数列表:(RawPointer)存在 但这意味着什么?谢谢Ios 无法调用类型为';非女性化指针<;浮动>';具有类型为';(不可女性化的指针!)';,ios,swift,Ios,Swift,第5行上的此关联对应用程序的成功没有帮助。但我真的不明白那一刻发生了什么 ÜnsafeMutablePointer的重载与部分匹配的参数列表:(RawPointer)存在 但这意味着什么?谢谢 override func buffer(withCsound cs: CsoundObj) -> Data { let length = Int(AKSettings.shared().numberOfChannels) *
override func buffer(withCsound cs: CsoundObj) -> Data {
let length = Int(AKSettings.shared().numberOfChannels) *
Int(AKSettings.shared().samplesPerControlPeriod) * 4
let num = length / 4
let floats = UnsafeMutablePointer<Float>(malloc(length))
/* The phase and amplitude are different for each line to get a nice
* gimmick. */
let phase = (self.amplifier + 0.8) / 1.8
for i in 0 ... num - 1 {
/* The amplitude is placed within the for-loop because it can fade
* to a slightly different value during one plot refresh. */
let amplitude = self.amplifier * self.amplitude
/* It is incredibly important that `time` and `phase` aren't
* multiplied with the frequency or else it will bump at each
* frequency change. */
var t = (time + Double(i) / Double(num) * self.frequency + phase)
floats[i] = Float(sin(t * 2 * 3.14))
/* It is multiplied with a "regular" 0.5 Hz sine to get both ends
* to fade out nicely. It's sort of a simplistic window function. */
t = Double(i) / Double(num)
floats[i] *= Float(sin(t * 1 * 3.14) * amplitude)
floats[i] *= 1 - pow(1 - Float(i) / Float(num), 2.0)
time += self.frequency / 44100 / 2
/* Fade smoothly to the next frequency and amplitude. */
self.frequency += (nextFrequency - self.frequency) / 44100.0 / 4.0
self.amplitude += (nextAmplitude - self.amplitude) / 44100.0 / 2.0
}
/* We keep the time between 0 and 1 to make sure it never overflows /
* loses the necessary precision. */
time = fmod(time, 1.0)
return Data(bytesNoCopy: UnsafeMutablePointer<UInt8>(floats), count: length, deallocator: .free)
}
覆盖函数缓冲区(使用csound cs:CsoundObj)->数据{
let length=Int(AKSettings.shared().numberOfChannels)*
Int(AKSettings.shared().samplesPerControlPeriod)*4
设num=length/4
设floats=unsafemeutablepointer(malloc(长度))
/*每一条线的相位和振幅是不同的,以获得一个好的结果
*花招*/
let相位=(自放大器+0.8)/1.8
对于0中的i…num-1{
/*振幅位于for循环中,因为它可能会衰减
*在一次打印刷新过程中设置为稍有不同的值*/
让振幅=自放大器*自振幅
/*“时间”和“阶段”的区别是非常重要的
*乘以频率,否则它将在每个
*频率变化*/
var t=(时间+双(i)/双(num)*自频率+相位)
浮点数[i]=浮点数(sin(t*2*3.14))
/*它与“常规”0.5 Hz正弦相乘,得到两端
*这是一个简单的窗口函数*/
t=双(i)/双(num)
浮点数[i]*=浮点数(sin(t*1*3.14)*振幅)
浮点数[i]*=1-功率(1-浮点数(i)/浮点数(num),2.0)
时间+=自身频率/44100/2
/*平滑衰减到下一个频率和振幅*/
self.frequency+=(下一个频率-self.frequency)/44100.0/4.0
自振幅+=(下一个振幅-自振幅)/44100.0/2.0
}
/*我们将时间保持在0和1之间,以确保它不会溢出/
*失去必要的精确度*/
时间=fmod(时间,1.0)
返回数据(字节nocopy:UnsafeMutablePointer(floats),计数:长度,deallocator:.free)
}
您可以找到一些类似的文章,其中包含错误消息
例如:
尤其是你最好读书
具体到你的情况 更改此行:
let floats = UnsafeMutablePointer<Float>(malloc(length))
并更改最后一行:
return Data(bytesNoCopy: UnsafeMutablePointer<UInt8>(floats), count: length, deallocator: .free)
备选案文2 将行
let floats=UnsafeMutablePointer(malloc(length))
更改为:
var data = Data(count: length)
data.withUnsafeMutableBytes {(floats: UnsafeMutablePointer<Float>) in
(它们之间的所有行都包含在…}中的闭包{(float:unsafemeutablepointer)让baseAddress=CVPixelBufferGetBaseAddress(imageBuffer)
var buf=unsafeBitCast(基址,收件人:UnsafeMutablePointer.self)
Hi OOper,现在事情更容易理解了。还有跑步。谢谢你的提名。再见。
return Data(bytesNoCopy: rawBytes, count: length, deallocator: .free)
var data = Data(count: length)
data.withUnsafeMutableBytes {(floats: UnsafeMutablePointer<Float>) in
}
return data
let baseAddress = CVPixelBufferGetBaseAddress(imageBuffer)
var buf = unsafeBitCast(baseAddress, to: UnsafeMutablePointer<UInt8>.self)