- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 AVCaptureAudioDataOutput 来分析音频输入,如 here 所述.这不是我自己想出来的东西,所以我正在复制这个例子,但我遇到了困难。
Swift 3 中的 Xcode 提示我进行了一些更改。我在分配 samples
行时遇到编译错误。 Xcode 说,“无法使用类型为‘(UnsafeMutableRawPointer?)’的参数列表为类型‘UnsafeMutablePointer<_> 调用初始化器”
这是我修改后的代码:
func captureOutput(_ captureOutput: AVCaptureOutput!,
didOutputSampleBuffer sampleBuffer: CMSampleBuffer!,
from connection: AVCaptureConnection!){
var buffer: CMBlockBuffer? = nil
var audioBufferList = AudioBufferList(mNumberBuffers: 1,
mBuffers: AudioBuffer(mNumberChannels: 1, mDataByteSize: 0, mData: nil))
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(
sampleBuffer,
nil,
&audioBufferList,
MemoryLayout<AudioBufferList>.size, // changed for Swift 3
nil,
nil,
UInt32(kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment),
&buffer
)
let abl = UnsafeMutableAudioBufferListPointer(&audioBufferList)
var sum:Int64 = 0
var count:Int = 0
var bufs:Int = 0
for buf in abl {
let samples = UnsafeMutableBufferPointer<Int16>(start: UnsafeMutablePointer(buf.mData), // Error here
count: Int(buf.mDataByteSize)/sizeof(Int16))
for sample in samples {
let s = Int64(sample)
sum = (sum + s*s)
count += 1
}
bufs += 1
}
print( "found \(count) samples in \(bufs) buffers, sum is \(sum)" )
}
谁能告诉我如何修复这段代码?
最佳答案
答案是我需要包装 buf.mData
在OpaquePointer
.即,在调用 UnsafeMutableBufferPointer<Int16>(OpaquePointer(buff.mData))
时, 改变
start: UnsafeMutablePointer(buff.mData)
到
start: UnsafeMutablePointer(OpaquePointer(buff.mData))
这是完整的代码,针对 Swift 3 进行了更新:
func captureOutput(_ captureOutput: AVCaptureOutput!,
didOutputSampleBuffer sampleBuffer: CMSampleBuffer!,
from connection: AVCaptureConnection!){
var buffer: CMBlockBuffer? = nil
var audioBufferList = AudioBufferList(mNumberBuffers: 1,
mBuffers: AudioBuffer(mNumberChannels: 1, mDataByteSize: 0, mData: nil))
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(
sampleBuffer,
nil,
&audioBufferList,
MemoryLayout<AudioBufferList>.size,
nil,
nil,
UInt32(kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment),
&buffer
)
let abl = UnsafeMutableAudioBufferListPointer(&audioBufferList)
var sum:Int64 = 0
var count:Int = 0
var bufs:Int = 0
for buff in abl {
let samples = UnsafeMutableBufferPointer<Int16>(start: UnsafeMutablePointer(OpaquePointer(buff.mData)),
count: Int(buff.mDataByteSize)/MemoryLayout<Int16>.size)
for sample in samples {
let s = Int64(sample)
sum = (sum + s*s)
count += 1
}
bufs += 1
}
print( "found \(count) samples in \(bufs) buffers, RMS is \(sqrt(Float(sum)/Float(count)))" )
}
这满足了编译器的要求,并且似乎生成了合理的数字。
关于ios - swift 3 : Using AVCaptureAudioDataOutput to analyze audio input,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41818883/
我尝试制作的应用程序的主要目标是点对点视频流。 (有点像使用蓝牙/WiFi 的 FaceTime)。 使用 AVFoundation,我能够捕获视频/音频样本缓冲区。然后我发送视频/音频样本缓冲区数据
我使用 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 使用 AVFoundation 录制音频/视频。但是当我将我的 AVCaptureAud
我运行了一个 AVCaptureVideoDataOutput session ,设置如下,效果很好,并将缓冲区记录到文件中。 我还想录制音频,但缓冲区中似乎没有任何音频,即使我已将麦克风添加为 ca
Apple 最近的示例代码之一使用相同的串行队列从 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 委托(delegate)接收示例。我需要知道
我尝试从 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 获取 CMSampleBufferRef。 AVCamRecorder.h #impo
我试图通过使用“AVFoundation”制作一个像藤蔓一样的视频应用程序。现在我可以通过 AVCaptureVideoDataOutput 保存视频并可以播放。但不知何故音频不工作,我不知道为什么。
我在使用 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 录制音频+视频时遇到延迟问题。有时视频会停顿几毫秒,有时音频与视频不同步。 我插入了一
我正在尝试创建一个对麦克风数据运行 FFT 的应用程序,因此我可以检查例如输入中最响亮的频率。 我看到有很多获取音频输入的方法(RemoteIO AudioUnit、AudioQueue 服务和 AV
我使用 AVFoundation 创建了一个相机,它能够使用 AVCaptureVideoDataOutput 录制视频和音频和 AVCaptureAudioDataOutput .我创建我的捕获 s
我正在尝试使用 AVCaptureAudioDataOutput 来分析音频输入,如 here 所述.这不是我自己想出来的东西,所以我正在复制这个例子,但我遇到了困难。 Swift 3 中的 Xcod
我正在开发 iOS 应用程序,我想在其中录制分段视频。我读过https://developer.apple.com/library/content/documentation/AudioVideo/C
我是一名优秀的程序员,十分优秀!