public function stop()
    {
        $deferred = new Deferred();

        if ($this->stopAudio) {
            $deferred->reject(new \Exception('Audio is already being stopped.'));

            return $deferred->promise();
        }

        if (! $this->speaking) {
            $deferred->reject(new \Exception('Audio must be playing to stop it.'));

            return $deferred->promise();
        }

        $this->stopAudio = true;

        $deferred->resolve();

        return $deferred->promise();
    }