     @_nextCalled = false
     @_worker.terminate() if @_worker
     @_worker = new AudioWorker(STD_LIBRARY + compiledSource)
+    @_worker.requestFrame()
     @_audioSource = globalAudioContext.createScriptProcessor(AUDIO_BUFFER_SIZE, 0, 2)
     @_audioSource.onaudioprocess = (event) =>
       volume = 0.2

    @worker.postMessage(["generate"])

  pop: ->
    @requestFrame()
    if @_buffer?
      buffer = @_buffer
      @_buffer = null
    else
      if @showDroppedFrameWarning
        console.log("Dropped an audio frame. If you don't see any other error messages you may be processing too much data.");
      buffer = new Float64Array(AUDIO_BUFFER_SIZE * 2)
      buffer.fill 0
    # Our worker lags behind the system by one frame so skip warning on the first pop()
    @showDroppedFrameWarning = true
    buffer

  terminate: ->


    @worker = new Worker(URL.createObjectURL(blob))
    @worker.onmessage = @_workerMessage
    @workerInitialized = false # Have we received our first frame

    if window.yieldWorker
      # Allows us to add a native error handler in Atom
