首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将UnsafeMutablePointer<UnsafeMutablePointer<Float>>变量转换为AudioBufferList?

如何将UnsafeMutablePointer<UnsafeMutablePointer<Float>>变量转换为AudioBufferList?
EN

Stack Overflow用户
提问于 2016-06-16 15:12:23
回答 2查看 906关注 0票数 1

我在Swift项目中有这个EZAudio方法,用于从麦克风捕捉音频:

代码语言:javascript
复制
func microphone(microphone: EZMicrophone!, hasAudioReceived bufferList: UnsafeMutablePointer<UnsafeMutablePointer<Float>>, withBufferSize bufferSize: UInt32, withNumberOfChannels numberOfChannels: UInt32) {

}

但我真正需要的是将"bufferList“参数作为AudioBufferList类型输入,以便通过套接字发送音频数据包,就像我在目标C中所做的那样:

代码语言:javascript
复制
//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?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-25 07:18:48

我能够将声音从麦克风中传输到插座中,如下所示:

代码语言:javascript
复制
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设置为我工作,您可能不得不根据您自己的需要对其进行调整,或者添加一些部件,比如波形动画:

代码语言:javascript
复制
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
    }

要让这东西运转起来太复杂了,祝你好运!

票数 1
EN

Stack Overflow用户

发布于 2016-06-16 16:05:55

我相信您将创建一个AudioBufferList指针并使用memory函数的结果。

代码语言:javascript
复制
let audioBufferList = UnsafePointer<AudioBufferList>(bufferList).memory 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37863088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档