SoundBuffer.java

com.mojang.blaze3d.audio.SoundBuffer

信息

  • 全限定名:com.mojang.blaze3d.audio.SoundBuffer
  • 类型:public class
  • 包:com.mojang.blaze3d.audio
  • 源码路径:src/main/java/com/mojang/blaze3d/audio/SoundBuffer.java
  • 起始行号:L12
  • 职责:

    TODO

字段/常量

  • data

    • 类型: ByteBuffer
    • 修饰符: private
    • 源码定位: L13
    • 说明:

      TODO

  • format

    • 类型: AudioFormat
    • 修饰符: private final
    • 源码定位: L14
    • 说明:

      TODO

  • hasAlBuffer

    • 类型: boolean
    • 修饰符: private
    • 源码定位: L15
    • 说明:

      TODO

  • alBuffer

    • 类型: int
    • 修饰符: private
    • 源码定位: L16
    • 说明:

      TODO

  • size

    • 类型: int
    • 修饰符: private final
    • 源码定位: L17
    • 说明:

      TODO

内部类/嵌套类型

构造器

public SoundBuffer(ByteBuffer data, AudioFormat format) @ L19

  • 构造器名:SoundBuffer
  • 源码定位:L19
  • 修饰符:public

参数:

  • data: ByteBuffer
  • format: AudioFormat

说明:

TODO

方法

下面的方法块按源码顺序生成。

OptionalInt getAlBuffer() @ L25

  • 方法名:getAlBuffer
  • 源码定位:L25
  • 返回类型:OptionalInt
  • 修饰符:package-private

参数:

说明:

TODO

public void discardAlBuffer() @ L51

  • 方法名:discardAlBuffer
  • 源码定位:L51
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public OptionalInt releaseAlBuffer() @ L62

  • 方法名:releaseAlBuffer
  • 源码定位:L62
  • 返回类型:OptionalInt
  • 修饰符:public

参数:

说明:

TODO

public AudioFormat format() @ L68

  • 方法名:format
  • 源码定位:L68
  • 返回类型:AudioFormat
  • 修饰符:public

参数:

说明:

TODO

public int size() @ L72

  • 方法名:size
  • 源码定位:L72
  • 返回类型:int
  • 修饰符:public

参数:

说明:

TODO

public boolean isValid() @ L76

  • 方法名:isValid
  • 源码定位:L76
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class SoundBuffer {
    private @Nullable ByteBuffer data;
    private final AudioFormat format;
    private boolean hasAlBuffer;
    private int alBuffer;
    private final int size;
 
    public SoundBuffer(ByteBuffer data, AudioFormat format) {
        this.data = data;
        this.format = format;
        this.size = data.limit();
    }
 
    OptionalInt getAlBuffer() {
        if (!this.hasAlBuffer) {
            if (this.data == null) {
                return OptionalInt.empty();
            }
 
            int audioFormat = OpenAlUtil.audioFormatToOpenAl(this.format);
            int[] intBuffer = new int[1];
            AL10.alGenBuffers(intBuffer);
            if (OpenAlUtil.checkALError("Creating buffer")) {
                return OptionalInt.empty();
            }
 
            AL10.alBufferData(intBuffer[0], audioFormat, this.data, (int)this.format.getSampleRate());
            if (OpenAlUtil.checkALError("Assigning buffer data")) {
                return OptionalInt.empty();
            }
 
            this.alBuffer = intBuffer[0];
            this.hasAlBuffer = true;
            this.data = null;
        }
 
        return OptionalInt.of(this.alBuffer);
    }
 
    public void discardAlBuffer() {
        if (this.hasAlBuffer) {
            AL10.alDeleteBuffers(new int[]{this.alBuffer});
            if (OpenAlUtil.checkALError("Deleting stream buffers")) {
                return;
            }
        }
 
        this.hasAlBuffer = false;
    }
 
    public OptionalInt releaseAlBuffer() {
        OptionalInt result = this.getAlBuffer();
        this.hasAlBuffer = false;
        return result;
    }
 
    public AudioFormat format() {
        return this.format;
    }
 
    public int size() {
        return this.size;
    }
 
    public boolean isValid() {
        return this.data != null || this.hasAlBuffer;
    }
}

引用的其他类

  • OpenAlUtil
    • 引用位置: 方法调用
    • 关联成员: OpenAlUtil.audioFormatToOpenAl(), OpenAlUtil.checkALError()