OggVorbisInfoCache class

Пакет: com.hypixel.hytale.server.core.asset.common

Файл: com/hypixel/hytale/server/core/asset/common/OggVorbisInfoCache.java

Поля (25)

МодификаторыТипИмя
final HytaleLogger LOGGER
break
break
public final int channels
public final double duration
public final int sampleRate
OggVorbisInfoCache.OggVorbisInfo var1
OggVorbisInfoCache.OggVorbisInfo var1
OggVorbisInfoCache.OggVorbisInfo var1
OggVorbisInfoCache.OggVorbisInfo var1
String var1
MemorySegment var1
long var10
int var13
CommonAsset var2
CommonAsset var2
OggVorbisInfoCache.OggVorbisInfo var2
int var2
int var3
var3
int var4
var4
double var6
var6
int var9

Методы (12)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Vorbis id header not found")
OggVorbisInfo OggVorbisInfo(int var1, int var2, double var3)
for for(int var5 = var2 - 7; var4 <= var5; var4++)
abstract for for(int ix = Math.max(0, var2 - 14)
static OggVorbisInfoCache.OggVorbisInfo getNowOggVorbisInfoCache.OggVorbisInfo getNow(@Nonnull CommonAsset var0)
if if(var1 != null)
if if(var1 != null)
if if(var3 >= 0 && var3 + 16 <= var2)
if if(var13 > 0)
if if(var10 >= 0L)
static void invalidatevoid invalidate(String var0)
public String toStringpublic String toString()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.asset.common;

class="kw">import com.hypixel.hytale.common.util.CompletableFutureUtil;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.util.io.MemorySegmentUtil;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.util.Map;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class OggVorbisInfoCache {
   class="kw">public class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">static class="kw">final MemorySegment VORBIS_ID_HEADER = MemorySegment.ofArray(new byte[]{1, 118, 111, 114, 98, 105, 115});
   class="kw">private class="kw">static class="kw">final int OGGS_MAGIC = 1332176723;
   class="kw">private class="kw">static class="kw">final Map<String, OggVorbisInfoCache.OggVorbisInfo> vorbisFiles = new ConcurrentHashMap<>();

   class="kw">public OggVorbisInfoCache() {
   }

   @Nonnull
   class="kw">public class="kw">static CompletableFuture<OggVorbisInfoCache.OggVorbisInfo> get(String var0) {
      OggVorbisInfoCache.OggVorbisInfo var1 = vorbisFiles.get(var0);
      if (var1 != null) {
         class="kw">return CompletableFuture.completedFuture(var1);
      }

      CommonAsset var2 = CommonAssetRegistry.getByName(var0);
      class="kw">return var2 == null ? CompletableFuture.completedFuture(null) : get0(var2);
   }

   @Nonnull
   class="kw">public class="kw">static CompletableFuture<OggVorbisInfoCache.OggVorbisInfo> get(@Nonnull CommonAsset var0) {
      OggVorbisInfoCache.OggVorbisInfo var1 = vorbisFiles.get(var0.getName());
      class="kw">return var1 != null ? CompletableFuture.completedFuture(var1) : get0(var0);
   }

   @Nullable
   class="kw">public class="kw">static OggVorbisInfoCache.OggVorbisInfo getNow(String var0) {
      OggVorbisInfoCache.OggVorbisInfo var1 = vorbisFiles.get(var0);
      if (var1 != null) {
         class="kw">return var1;
      }

      CommonAsset var2 = CommonAssetRegistry.getByName(var0);
      class="kw">return var2 == null ? null : get0(var2).join();
   }

   class="kw">public class="kw">static OggVorbisInfoCache.OggVorbisInfo getNow(@Nonnull CommonAsset var0) {
      OggVorbisInfoCache.OggVorbisInfo var1 = vorbisFiles.get(var0.getName());
      class="kw">return var1 != null ? var1 : get0(var0).join();
   }

   @Nonnull
   class="kw">private class="kw">static CompletableFuture<OggVorbisInfoCache.OggVorbisInfo> get0(@Nonnull CommonAsset var0) {
      String var1 = var0.getName();
      class="kw">return CompletableFutureUtil._catch(var0.getBlob().thenApply(var1x -> {
         OggVorbisInfoCache.OggVorbisInfo var2 = parse(var1x);
         vorbisFiles.put(var1, var2);
         class="kw">return var2;
      }));
   }

   @Nonnull
   class="kw">static OggVorbisInfoCache.OggVorbisInfo parse(byte[] var0) {
      MemorySegment var1 = MemorySegment.ofArray(var0);
      int var2 = var0.length;
      int var3 = -1;
      int var4 = 0;

      for (int var5 = var2 - 7; var4 <= var5; var4++) {
         if (var0[var4] == 1 && var1.asSlice(var4, 7L).mismatch(VORBIS_ID_HEADER) == -1L) {
            var3 = var4;
            break;
         }
      }

      if (var3 >= 0 && var3 + 16 <= var2) {
         var4 = Byte.toUnsignedInt(var0[var3 + 11]);
         int var13 = var1.get(MemorySegmentUtil.INT_LE, var3 + 12);
         double var6 = -1.0;
         if (var13 > 0) {
            for (int ix = Math.max(0, var2 - 14); ix >= 0; ix--) {
               if (var0[ix] == 79 && var1.get(MemorySegmentUtil.INT_BE, ix) == 1332176723) {
                  int var9 = Byte.toUnsignedInt(var0[ix + 5]);
                  if ((var9 & 4) != 0) {
                     long var10 = var1.get(MemorySegmentUtil.LONG_LE, ix + 6);
                     if (var10 >= 0L) {
                        var6 = (double)var10 / var13;
                     }
                     break;
                  }
               }
            }
         }

         class="kw">return new OggVorbisInfoCache.OggVorbisInfo(var4, var13, var6);
      } else {
         throw new IllegalArgumentException("Vorbis id header not found");
      }
   }

   class="kw">public class="kw">static void invalidate(String var0) {
      vorbisFiles.remove(var0);
   }

   class="kw">public class="kw">static class OggVorbisInfo {
      class="kw">public class="kw">final int channels;
      class="kw">public class="kw">final int sampleRate;
      class="kw">public class="kw">final double duration;

      OggVorbisInfo(int var1, int var2, double var3) {
         this.channels = var1;
         this.sampleRate = var2;
         this.duration = var3;
      }

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return "OggVorbisInfo{channels=" + this.channels + ", sampleRate=" + this.sampleRate + ", duration=" + this.duration + "}";
      }
   }
}