当使用谷歌语音到文本时,音频移植到苹果芯片

问题描述

我在 Mac OS X 应用程序中使用谷歌语音转文本。在所有低于 11.0 的 Mac OS 中,它的工作正常。但是在 Apple Silicon Mac 中,当我启动 Google Speech to Text 时,它会在扬声器中产生一些噪音。我在苹果网站上读到我们需要为 Apple Silicon 移植音频代码。在我的代码中,audiobufferlist 使用的是 Core Audio,它必须迁移到其他不使用核心音频系列的地方。

var callbackStruct = AURenderCallbackStruct()
callbackStruct.inputProc = recordingCallback
callbackStruct.inputProcRefCon = nil//UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque())
status = AudioUnitSetProperty(inputUnit,//neh - remoteIoUnit
                              kAudioOutputUnitProperty_SetInputCallback,kAudioUnitScope_Global,bus1,&callbackStruct,UInt32(MemoryLayout<AURenderCallbackStruct>.size));
if (status != noErr) {
  return status
}


func recordingCallback(
  inRefCon:UnsafeMutableRawPointer,ioActionFlags:UnsafeMutablePointer<AudioUnitRenderActionFlags>,inTimeStamp:UnsafePointer<AudioTimeStamp>,inBusNumber:UInt32,inNumberFrames:UInt32,ioData:UnsafeMutablePointer<audiobufferlist>?) -> Osstatus {

  var status = noErr

  let channelCount : UInt32 = 1

  var bufferList = audiobufferlist()
  bufferList.mNumberBuffers = channelCount
    
  let buffers = UnsafeMutableBufferPointer<AudioBuffer>(start: &bufferList.mBuffers,count: Int(bufferList.mNumberBuffers))
  buffers[0].mNumberChannels = 1
  buffers[0].mDataByteSize = inNumberFrames * 2
  buffers[0].mData = nil
    
  // get the recorded samples
  status = AudioUnitRender(AudioController.sharedInstance.audioEngine.inputNode.audioUnit!,//neh - remoteIoUnit
                           ioActionFlags,inTimeStamp,inBusNumber,inNumberFrames,UnsafeMutablePointer<audiobufferlist>(&bufferList))
    
  if (status != noErr) {
    return status;
  }

  let data = Data(bytes:  buffers[0].mData!,count: Int(buffers[0].mDataByteSize))
  dispatchQueue.main.async {
    AudioController.sharedInstance.delegate.processSampleData(data)
  }

  return noErr
}

所以我的问题是什么相当于这段代码?哪个从现场录音中生成音频缓冲区?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)