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 + "}";
}
}
}