 		heartbeatQueue.asyncAfter(deadline: time) {[weak self] in self?.sendHeartbeat() }
 	}
 
+	private func sendSpeaking(_ speaking: Bool) {
+		let speakingObject: [String: Any] = [
+			"speaking": speaking,
+			"delay": 0
+		]
+
+		sendGatewayPayload(DiscordGatewayPayload(code: .voice(.speaking), payload: .object(speakingObject)))
+	}
+
 	/**
 		Sends OPUS encoded voice data to Discord. Because of the assumptions built into the engine, the voice data
 		should have a max length of `defaultAudioSize`.

		    if count == 1 {
		    	this.startTime = this.currentUnixTime

		    	this.sendGatewayPayload(DiscordGatewayPayload(code: .voice(.speaking), payload: .object([
		    		"speaking": true,
		    		"delay": 0
		    	])))
		    }

		    this.sendVoiceData(data)

	}

	private func handleDoneReading() {
		sendSpeaking(false)

		// Should we make a new encoder?
		// If no, that means a new encoder has already been requested, creating a new one could lead to a race where we
		// get stuck in a loop of making new encoders
