Как преобразовать эту переменную UnsafeMutablePointer<UnsafeMutablePointer <Float >> в AudioBufferList?
У меня есть этот метод EZAudio в моем проекте Swift для захвата звука с микрофона:
func microphone(microphone: EZMicrophone!, hasAudioReceived bufferList: UnsafeMutablePointer<UnsafeMutablePointer<Float>>, withBufferSize bufferSize: UInt32, withNumberOfChannels numberOfChannels: UInt32) {
}
Но что мне действительно нужно, так это иметь параметр "bufferList", входящий в тип AudioBufferList, для отправки этих аудиопакетов через сокет, как я это делал в Objective 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?
2 ответа
Решение
Мне удалось потоковое аудио с микрофона, в разъем, как это:
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
}
Было сложно запустить эту штуку, удачи!
Я верю, что вы создадите AudioBufferList
указатель и использовать результат memory
функция.
let audioBufferList = UnsafePointer<AudioBufferList>(bufferList).memory