     private var activeSpeech: Speech?
     private var allSpeeches: [Speech] { ([activeSpeech] + speechQueue).compactMap { $0 } }
     private var recentSpeechTexts: [String] = []
+    private var trashQueue: [Speech] = []
 
     // min(normal): 1.0, fast: 2.0
     private var voiceSpeed: Float = 1.0

        speechQueue.removeAll()
        recentSpeechTexts.removeAll()
        activeSpeech = nil
        log.debug("stopped speech manager.")
    }


    func refreshSpeechQueueIfNeeded() {
        let tooManySpeechesInQueue = speechQueue.count > maxSpeechCountForRefresh
        guard tooManySpeechesInQueue else { return }
        trashQueue = speechQueue
        speechQueue.removeAll()
        appendToSpeechQueue(text: speechTextRefresh)
    }

    func preloadAudioIfAvailable() {
        if let firstLoadingInTrash = trashQueue.firstAudioLoader(state: .loading) {
            logPreloadStatus("Audio load in trash q is in progress for [\(firstLoadingInTrash.text)].")
            return
        }
        if let firstLoading = allSpeeches.firstAudioLoader(state: .loading) {
            logPreloadStatus("Audio load is in progress for [\(firstLoading.text)].")
            return
        }
        if let firstNotLoaded = allSpeeches.firstAudioLoader(state: .notLoaded) {
            logPreloadStatus("Requesting load for [\(firstNotLoaded.text)].")
            firstNotLoaded.startLoad(
                speedScale: voiceSpeed.asVoicevoxSpeedScale,
                volumeScale: voiceVolume.asVoicevoxVolumeScale,
                speaker: voiceSpeaker)
            return
        }
        logPreloadStatus("Seems no audio needs to request load.")
    }

    func adjustedVoiceSpeed(currentCommentLength current: Int, remainingCommentLength remaining: Int, currentVoiceSpeed: Float) -> Float {
