无痛单词 v1.8.1版本的 MD5 值为:7ae56c6858542fe70230b6be4f1a4b5a

以下内容为反编译后的 AudioFileTextToSpeechStrategy.java 源代码,内容仅作参考


package tech.xiangzi.painless.tts;

import android.content.Context;
import androidx.media3.exoplayer.ExoPlayer;
import kotlin.Lazy;
import kotlin.LazyKt;
import kotlin.Metadata;
import kotlin.ResultKt;
import kotlin.Unit;
import kotlin.coroutines.Continuation;
import kotlin.coroutines.intrinsics.IntrinsicsKt;
import kotlin.jvm.functions.Function0;
import kotlin.jvm.internal.Intrinsics;
import kotlinx.coroutines.BuildersKt;
import kotlinx.coroutines.CompletableDeferred;
import kotlinx.coroutines.CompletableDeferredKt;
import kotlinx.coroutines.CoroutineScopeKt;
import kotlinx.coroutines.Deferred;
import kotlinx.coroutines.Dispatchers;
import kotlinx.coroutines.MainCoroutineDispatcher;
import org.jetbrains.annotations.NotNull;

@Metadata(d1 = {"\u0000J\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0006\n\u0002\u0010\u000b\n\u0002\b\u0004\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\u0018\u00002\u00020\u0001B\r\u0012\u0006\u0010\u0002\u001a\u00020\u0003¢\u0006\u0002\u0010\u0004J\b\u0010\u000e\u001a\u00020\u000fH\u0016J\u0019\u0010\u0010\u001a\u00020\u000f2\u0006\u0010\u0011\u001a\u00020\u0006H\u0082@ø\u0001\u0000¢\u0006\u0002\u0010\u0012J\b\u0010\u0013\u001a\u00020\u0014H\u0016JB\u0010\u0015\u001a\b\u0012\u0004\u0012\u00020\u000f0\u00162\u0006\u0010\u0017\u001a\u00020\u00062\u0006\u0010\u0018\u001a\u00020\u00192\u0006\u0010\u001a\u001a\u00020\u001b2\f\u0010\u001c\u001a\b\u0012\u0004\u0012\u00020\u00140\u001d2\f\u0010\u001e\u001a\b\u0012\u0004\u0012\u00020\u00140\u001dH\u0016J\b\u0010\u001f\u001a\u00020\u0014H\u0016R\u000e\u0010\u0002\u001a\u00020\u0003X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u0005\u001a\u00020\u0006X\u0082D¢\u0006\u0002\n\u0000R\u001b\u0010\u0007\u001a\u00020\b8BX\u0082\u0084\u0002¢\u0006\f\n\u0004\b\u000b\u0010\f\u001a\u0004\b\t\u0010\nR\u000e\u0010\r\u001a\u00020\u0006X\u0082D¢\u0006\u0002\n\u0000\u0082\u0002\u0004\n\u0002\b\u0019¨\u0006 "}, d2 = {"Ltech/xiangzi/painless/tts/AudioFileTextToSpeechStrategy;", "Ltech/xiangzi/painless/tts/TextToSpeechStrategy;", "context", "Landroid/content/Context;", "(Landroid/content/Context;)V", "defaultNetworkUrl", "", "exoPlayer", "Landroidx/media3/exoplayer/ExoPlayer;", "getExoPlayer", "()Landroidx/media3/exoplayer/ExoPlayer;", "exoPlayer$delegate", "Lkotlin/Lazy;", "sentenceNetworkUrl", "isSpeaking", "", "playAudioFromUrl", "url", "(Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", "release", "", "speakAsync", "Lkotlinx/coroutines/Deferred;", "word", "voiceType", "Ltech/xiangzi/painless/tts/VoiceType;", "textType", "Ltech/xiangzi/painless/tts/TextType;", "onComplete", "Lkotlin/Function0;", "onError", "stop", "app_release"}, k = 1, mv = {1, 8, 0}, xi = 48)
public final class AudioFileTextToSpeechStrategy implements TextToSpeechStrategy {

    @NotNull
    private Context context;

    @NotNull
    private final String defaultNetworkUrl;

    @NotNull
    private final Lazy exoPlayer;

    @NotNull
    private final String sentenceNetworkUrl;

    public AudioFileTextToSpeechStrategy(@NotNull Context context) {
        Intrinsics.checkNotNullParameter(context, "context");
        this.context = context;
        this.defaultNetworkUrl = "https://image.xiangzi.tech/";
        this.sentenceNetworkUrl = "https://app.xiangzi.tech/app/painless/sentence/";
        this.exoPlayer = LazyKt.lazy(new Function0<ExoPlayer>() {
            {
                super(0);
            }

            @Override
            @NotNull
            public final ExoPlayer invoke() {
                Context context2;
                context2 = AudioFileTextToSpeechStrategy.this.context;
                return new ExoPlayer.Builder(context2).build();
            }
        });
    }

    public final ExoPlayer getExoPlayer() {
        return (ExoPlayer) this.exoPlayer.getValue();
    }

    public final Object playAudioFromUrl(String str, Continuation<? super Boolean> continuation) {
        AudioFileTextToSpeechStrategy$playAudioFromUrl$1 audioFileTextToSpeechStrategy$playAudioFromUrl$1;
        int i;
        CompletableDeferred completableDeferred;
        if (continuation instanceof AudioFileTextToSpeechStrategy$playAudioFromUrl$1) {
            audioFileTextToSpeechStrategy$playAudioFromUrl$1 = (AudioFileTextToSpeechStrategy$playAudioFromUrl$1) continuation;
            int i2 = audioFileTextToSpeechStrategy$playAudioFromUrl$1.label;
            if ((i2 & Integer.MIN_VALUE) != 0) {
                audioFileTextToSpeechStrategy$playAudioFromUrl$1.label = i2 - Integer.MIN_VALUE;
                Object obj = audioFileTextToSpeechStrategy$playAudioFromUrl$1.result;
                Object coroutine_suspended = IntrinsicsKt.getCOROUTINE_SUSPENDED();
                i = audioFileTextToSpeechStrategy$playAudioFromUrl$1.label;
                if (i != 0) {
                    ResultKt.throwOnFailure(obj);
                    CompletableDeferred CompletableDeferred$default = CompletableDeferredKt.CompletableDeferred$default(null, 1, null);
                    MainCoroutineDispatcher main = Dispatchers.getMain();
                    AudioFileTextToSpeechStrategy$playAudioFromUrl$2 audioFileTextToSpeechStrategy$playAudioFromUrl$2 = new AudioFileTextToSpeechStrategy$playAudioFromUrl$2(this, str, null);
                    audioFileTextToSpeechStrategy$playAudioFromUrl$1.L$0 = CompletableDeferred$default;
                    audioFileTextToSpeechStrategy$playAudioFromUrl$1.label = 1;
                    if (BuildersKt.withContext(main, audioFileTextToSpeechStrategy$playAudioFromUrl$2, audioFileTextToSpeechStrategy$playAudioFromUrl$1) == coroutine_suspended) {
                        return coroutine_suspended;
                    }
                    completableDeferred = CompletableDeferred$default;
                } else {
                    if (i != 1) {
                        if (i == 2) {
                            ResultKt.throwOnFailure(obj);
                        }
                        throw new IllegalStateException("call to 'resume' before 'invoke' with coroutine");
                    }
                    completableDeferred = (CompletableDeferred) audioFileTextToSpeechStrategy$playAudioFromUrl$1.L$0;
                    ResultKt.throwOnFailure(obj);
                }
                audioFileTextToSpeechStrategy$playAudioFromUrl$1.L$0 = null;
                audioFileTextToSpeechStrategy$playAudioFromUrl$1.label = 2;
                obj = completableDeferred.await(audioFileTextToSpeechStrategy$playAudioFromUrl$1);
                return obj != coroutine_suspended ? coroutine_suspended : obj;
            }
        }
        audioFileTextToSpeechStrategy$playAudioFromUrl$1 = new AudioFileTextToSpeechStrategy$playAudioFromUrl$1(this, continuation);
        Object obj2 = audioFileTextToSpeechStrategy$playAudioFromUrl$1.result;
        Object coroutine_suspended2 = IntrinsicsKt.getCOROUTINE_SUSPENDED();
        i = audioFileTextToSpeechStrategy$playAudioFromUrl$1.label;
        if (i != 0) {
        }
        audioFileTextToSpeechStrategy$playAudioFromUrl$1.L$0 = null;
        audioFileTextToSpeechStrategy$playAudioFromUrl$1.label = 2;
        obj2 = completableDeferred.await(audioFileTextToSpeechStrategy$playAudioFromUrl$1);
        if (obj2 != coroutine_suspended2) {
        }
    }

    @Override
    public boolean getSpeaking() {
        return getExoPlayer().isPlaying();
    }

    @Override
    public void release() {
        if (getExoPlayer().isPlaying()) {
            getExoPlayer().stop();
        }
        getExoPlayer().release();
    }

    @Override
    @NotNull
    public Deferred<Boolean> speakAsync(@NotNull String word, @NotNull VoiceType voiceType, @NotNull TextType textType, @NotNull Function0<Unit> onComplete, @NotNull Function0<Unit> onError) {
        Intrinsics.checkNotNullParameter(word, "word");
        Intrinsics.checkNotNullParameter(voiceType, "voiceType");
        Intrinsics.checkNotNullParameter(textType, "textType");
        Intrinsics.checkNotNullParameter(onComplete, "onComplete");
        Intrinsics.checkNotNullParameter(onError, "onError");
        return BuildersKt.async$default(CoroutineScopeKt.CoroutineScope(Dispatchers.getIO()), null, null, new AudioFileTextToSpeechStrategy$speakAsync$1(this, voiceType, word, textType, onComplete, onError, null), 3, null);
    }

    @Override
    public void stop() {
        getExoPlayer().stop();
    }
}