title: How to get Audio recording buffer data live?
body: <p>I am working on get audio data from iPhone mic and send it to socket, I already try AVAudioEngine to get audio buffer but some how its not woking. so can you please suggest me what it better way to get recording buffer data in live. </p>
  
  <pre><code>  override func viewDidLoad() {
          super.viewDidLoad()
  
  
  
          // initialize engine
          engine = AVAudioEngine()
          guard nil != engine?.inputNode else {
              // @TODO: error out
              return
          }
  
  
  
          SocketIOManager.sharedInstance.socket.on("listen") {data, ack in
  
              let BuffurData:Data = data[0] as! Data
  
              // let playData = self?.audioBufferToNSData(PCMBuffer: BuffurData as! AVAudioPCMBuffer)
              do {
                 // let data = NSData(bytes: &amp;BuffurData, length: BuffurData.count)
  
                  let player = try AVAudioPlayer(data:BuffurData)
                  player.play()
              } catch let error as NSError {
                  print(error.description)
              }
  
  
  
              print("socket connected \(data)")
          }
      }
  
   func installTap() {
  
          engine = AVAudioEngine()
          guard let engine = engine, let input = engine.inputNode else {
              // @TODO: error out
              return
          }
  
          let format = input.inputFormat(forBus: 0)
          input.installTap(onBus: 0, bufferSize:4096, format:format, block: { [weak self] buffer, when in
  
              guard let this = self else {
                  return
              }
  
              // writing to file: for testing purposes only
              do {
                  try this.file!.write(from: buffer)
              } catch {
  
              }
  
              if let channel1Buffer = buffer.floatChannelData?[0] {
                 let test = self?.copyAudioBufferBytes(buffer)
                  let stram = self?.toNSData(PCMBuffer: buffer)
                  SocketIOManager.sharedInstance.socket.emit("talk",stram!);
  
                 // socket.on("listen", function (data)
  
  
  
                  /*! @property floatChannelData
                   @abstract Access the buffer's float audio samples.
                   @discussion
                   floatChannelData returns pointers to the buffer's audio samples if the buffer's format is
                   32-bit float, or nil if it is another format.
  
                   The returned pointer is to format.channelCount pointers to float. Each of these pointers
                   is to "frameLength" valid samples, which are spaced by "stride" samples.
  
                   If format.interleaved is false (as with the standard deinterleaved float format), then
                   the pointers will be to separate chunks of memory. "stride" is 1.
  
                   If format.interleaved is true, then the pointers will refer into the same chunk of interleaved
                   samples, each offset by 1 frame. "stride" is the number of interleaved channels.
                   */
  
                  // @TODO: send data, better to pass into separate queue for processing
              }            
          })
  
          engine.prepare()
  
          do {
              try engine.start()
          } catch {
              // @TODO: error out
          }
      }
  </code></pre>