[marytts] Add LRU cache (#15227)

Signed-off-by: Gwendal Roulleau <gwendal.roulleau@gmail.com>
This commit is contained in:
Gwendal Roulleau 2023-07-12 19:23:51 +02:00 committed by GitHub
parent 7c9f66ffb3
commit 28e6da6342
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 4 deletions

View File

@ -43,3 +43,8 @@ The sample frequency depends on the chosen voice and ranges from 16kHz to 48kHz.
## Log files
The log messages of Mary TTS are not bundled with the openHAB log messages in the `openhab.log` file of your log directory but are stored in their own log file at `server.log` of your log directory.
## Caching
The MaryTTS service uses the openHAB TTS cache to cache audio files produced from the most recent queries in order to reduce traffic, improve performance and reduce number of requests.

View File

@ -21,9 +21,13 @@ import java.util.Set;
import org.openhab.core.audio.AudioFormat;
import org.openhab.core.audio.AudioStream;
import org.openhab.core.voice.AbstractCachedTTSService;
import org.openhab.core.voice.TTSCache;
import org.openhab.core.voice.TTSException;
import org.openhab.core.voice.TTSService;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -39,8 +43,8 @@ import marytts.modules.synthesis.Voice;
* @author Kelly Davis - Initial contribution and API
* @author Kai Kreuzer - Refactored to updated APIs and moved to openHAB
*/
@Component
public class MaryTTSService implements TTSService {
@Component(service = TTSService.class)
public class MaryTTSService extends AbstractCachedTTSService {
private final Logger logger = LoggerFactory.getLogger(MaryTTSService.class);
@ -56,7 +60,9 @@ public class MaryTTSService implements TTSService {
*/
private Set<AudioFormat> audioFormats;
protected void activate() {
@Activate
public MaryTTSService(final @Reference TTSCache ttsCache) {
super(ttsCache);
try {
marytts = new LocalMaryInterface();
voices = initVoices();
@ -77,7 +83,7 @@ public class MaryTTSService implements TTSService {
}
@Override
public AudioStream synthesize(String text, org.openhab.core.voice.Voice voice, AudioFormat requestedFormat)
public AudioStream synthesizeForCache(String text, org.openhab.core.voice.Voice voice, AudioFormat requestedFormat)
throws TTSException {
// Validate arguments
if (text == null || text.isEmpty()) {