无痛单词 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();
}
}