code: def read_data(self, blocksize=4096):
          
          frames = ctypes.c_uint(blocksize // self._client_fmt.mBytesPerFrame)
          buf = ctypes.create_string_buffer(blocksize)
  
          buflist = AudioBufferList()
          buflist.mNumberBuffers = 1
          buflist.mBuffers[0].mNumberChannels = \
              self._client_fmt.mChannelsPerFrame
          buflist.mBuffers[0].mDataByteSize = blocksize
          buflist.mBuffers[0].mData = ctypes.cast(buf, ctypes.c_void_p)
  
          while True:
              check(_coreaudio.ExtAudioFileRead(
                  self._obj, ctypes.byref(frames), ctypes.byref(buflist)
              ))
  
              assert buflist.mNumberBuffers == 1
              size = buflist.mBuffers[0].mDataByteSize
              if not size:
                  break
  
              data = ctypes.cast(buflist.mBuffers[0].mData,
                                 ctypes.POINTER(ctypes.c_char))
              blob = data[:size]
              yield blob
docs: Generates byte strings reflecting the audio data in the file.