我在Swift项目中有这个EZAudio方法,用于从麦克风捕捉音频:
func microphone(microphone: EZMicrophone!, hasAudioReceived bufferList: UnsafeMutablePointer<UnsafeMutablePointer<Float>>, withBufferSize bufferSize: UInt32, withNumberOfChannels numberOfChannels: UInt32) {
}但我真正需要的是将"bufferList“参数作为AudioBufferList类型输入,以便通过套接字发送音频数据包,就像我在目标C中所做的那样:
//Objective C pseudocode:
for(int i = 0; i < bufferList.mNumberBuffers; ++i){
AudioBuffer buffer = bufferList.mBuffers[i];
audio = ["audio": NSData(bytes: buffer.mData, length: Int(buffer.mDataByteSize))];
socket.emit("message", audio);
}如何将该UnsafeMutablePointer>变量转换为AudioBufferList?
发布于 2017-04-25 07:18:48
我能够将声音从麦克风中传输到插座中,如下所示:
func microphone(microphone: EZMicrophone!, hasBufferList bufferList: UnsafeMutablePointer<AudioBufferList>, withBufferSize bufferSize: UInt32, withNumberOfChannels numberOfChannels: UInt32) {
let blist:AudioBufferList=bufferList[0]
let buffer:AudioBuffer = blist.mBuffers
let audio = ["audio": NSData(bytes: buffer.mData, length: Int(buffer.mDataByteSize))];
socket.emit("message", audio);//this socket comes from Foundation framework
}这个通用的AudioStreamDescriptor设置为我工作,您可能不得不根据您自己的需要对其进行调整,或者添加一些部件,比如波形动画:
func initializeStreaming() {
var streamDescription:AudioStreamBasicDescription=AudioStreamBasicDescription()
streamDescription.mSampleRate = 16000.0
streamDescription.mFormatID = kAudioFormatLinearPCM
streamDescription.mFramesPerPacket = 1
streamDescription.mChannelsPerFrame = 1
streamDescription.mBytesPerFrame = streamDescription.mChannelsPerFrame * 2
streamDescription.mBytesPerPacket = streamDescription.mFramesPerPacket * streamDescription.mBytesPerFram
streamDescription.mBitsPerChannel = 16
streamDescription.mFormatFlags = kAudioFormatFlagIsSignedInteger
microphone = EZMicrophone(microphoneDelegate: self, withAudioStreamBasicDescription: sstreamDescription, startsImmediately: false)
waveview?.plotType=EZPlotType.Buffer
waveview?.shouldFill = false
waveview?.shouldMirror = false
}要让这东西运转起来太复杂了,祝你好运!
发布于 2016-06-16 16:05:55
我相信您将创建一个AudioBufferList指针并使用memory函数的结果。
let audioBufferList = UnsafePointer<AudioBufferList>(bufferList).memory https://stackoverflow.com/questions/37863088
复制相似问题