Java OpenAL只渲染一个“文件”;“bump”;,但是没有错误。发生了什么事?

Java OpenAL只渲染一个“文件”;“bump”;,但是没有错误。发生了什么事?,java,audio,lwjgl,openal,Java,Audio,Lwjgl,Openal,我试图在OpenAL中制作一个简单的声音播放器作为学习练习。我看了几个例子和教程,结果都是一样的:没有声音,也没有错误。我读过这本书,它从来没有提到过类似的事情 我最终认为我可能没有安装OpenAL,这很有趣,我没有。所以在安装之后,我也没有声音,也没有错误 然后我认为我的缓冲区填充不正确,所以我尝试只使用Java库来播放它。结果证明它玩得很好 [经过大量测试,已编辑] 现在我有了音频,但在调用alSourcePlay之后,有时在应用程序结束时,只有一个“bump”。如果我使用AL_格式\u S

我试图在OpenAL中制作一个简单的声音播放器作为学习练习。我看了几个例子和教程,结果都是一样的:没有声音,也没有错误。我读过这本书,它从来没有提到过类似的事情

我最终认为我可能没有安装OpenAL,这很有趣,我没有。所以在安装之后,我也没有声音,也没有错误

然后我认为我的缓冲区填充不正确,所以我尝试只使用Java库来播放它。结果证明它玩得很好

[经过大量测试,已编辑]

现在我有了音频,但在调用alSourcePlay之后,有时在应用程序结束时,只有一个“bump”。如果我使用AL_格式\u STEREO8或AL_格式\u MONO8而不是16位格式,就会出现这种情况。我想这是格式的问题,但对于正确的格式,什么也不会发生;甚至连一个“肿块”都没有

我只是不知道会出什么问题。我必须承认,这是我第一次与OpenAL合作。关于OpenAL故障排除的信息很少,似乎主要集中在OpenGL和Vulkan上

这是我到目前为止写的代码。我正在使用访问OpenAL和Java8


导入静态org.lwjgl.openal.AL10.AL_缓冲区;
导入静态org.lwjgl.openal.AL10.AL_格式_MONO16;
导入静态org.lwjgl.openal.AL10.AL_格式_MONO8;
导入静态org.lwjgl.openal.AL10.AL_格式_16;
导入静态org.lwjgl.openal.AL10.AL_格式_8;
导入静态org.lwjgl.openal.AL10.AL_;
导入静态org.lwjgl.openal.AL10.AL_无效_枚举;
导入静态org.lwjgl.openal.AL10.AL\u无效值;
导入静态org.lwjgl.openal.AL10.AL\u无错误;
从内存中导入静态org.lwjgl.openal.AL10.AL\u;
导入静态org.lwjgl.openal.AL10.AL_PITCH;
导入静态org.lwjgl.openal.AL10.AL_位置;
导入静态org.lwjgl.openal.AL10.AL_VELOCITY;
导入静态org.lwjgl.openal.AL10.alBufferData;
导入静态org.lwjgl.openal.AL10.alDeleteBuffers;
导入静态org.lwjgl.openal.AL10.alDeleteSources;
导入静态org.lwjgl.openal.AL10.alGenBuffers;
导入静态org.lwjgl.openal.AL10.alGenSources;
导入静态org.lwjgl.openal.AL10.alge;
导入静态org.lwjgl.openal.AL10.alListener3f;
导入静态org.lwjgl.openal.AL10.alSource3f;
导入静态org.lwjgl.openal.AL10.alSourcePlay;
导入静态org.lwjgl.openal.AL10.alSourcef;
导入静态org.lwjgl.openal.AL10.alSourcei;
导入静态org.lwjgl.openal.ALC10.alcCloseDevice;
导入静态org.lwjgl.openal.ALC10.alcCreateContext;
导入静态org.lwjgl.openal.ALC10.alcMakeContextCurrent;
导入静态org.lwjgl.openal.ALC10.alcOpenDevice;
导入java.io.BufferedInputStream;
导入java.io.InputStream;
导入java.nio.ByteBuffer;
导入java.nio.IntBuffer;
导入javax.sound.sampled.AudioFormat;
导入javax.sound.sampled.AudioInputStream;
导入javax.sound.sampled.AudioSystem;
导入org.lwjgl.openal.AL;
导入org.lwjgl.openal.ALC;
导入org.lwjgl.openal.ALC10;
导入org.lwjgl.openal.alcapabilities;
导入dev.ckitty.engine.kc.io.AutoByteBuffer;
导入dev.ckitty.engine.kc.io.FileLoader;
导入dev.ckitty.engine.kc.main.engine;
导入dev.ckitty.engine.kc.utils.Util;
公共级音频主机{
专用长设备、上下文;
私有int缓冲区,源;
公共音频主机(){
init();
加载();
来源();
引擎日志(“正在播放!”);
play();
Util.waitSec(10);
脱硝();
}
公共void init(){
设备=alcOpenDevice((ByteBuffer)null);
如果(设备==0)
抛出新的IllegalStateException(“未能打开默认设备”);
alcapabilities deviceCaps=ALC.createCapabilities(设备);
context=alcreatecontext(设备,(IntBuffer)null);
如果(上下文==0)
抛出新的IllegalStateException(“未能创建开放上下文”);
alcMakeContextCurrent(上下文);
Engine.log(erroralc());
创建能力(deviceCaps);
Engine.log(error());
}
公共空荷载(){
AutoByteBuffer abb=新的AutoByteBuffer();
AudioFormat=null;
试一试{
InputStream is=FileLoader.Internal.getInputStream(“/kc/audios/LFZ-Popsicle.wav”);
BufferedInputStream bis=新的BufferedInputStream(is);
AudioInputStream ais=AudioSystem.getAudioInputStream(bis);
abb.put(ais);
format=ais.getFormat();
ais.close();
二、关闭();
}捕获(例外e){
e、 printStackTrace();
}
缓冲区=代数缓冲区();
int samplerate=(int)format.getSampleRate();
alBufferData(buffer,AL_格式_STEREO8,abb.flip(),samplerate);
}
公共空源(){
source=alGenSources();
Engine.log(error());
alSourcef(源,AL_增益,1f);
alSourcef(声源,阿尔苏音高,1f);
另一个源3F(源、AL_位置、0f、0f、0f);
alSourcei(源、AL_缓冲区、缓冲区);
}
公共游戏{
alListener3f(AL_位置,0,0,0);
alListener3f(AL_速度,0,0,0);
引擎日志(“播放”);
alSourcePlay(来源);
}
公共字符串erroralc(){
开关(ALC10.alcGetError(设备)){
case AL_NO_ERROR:返回“ALC_NO_ERROR”;
case AL_INVALID_ENUM:返回“ALC_INVALID_ENUM”;
案例ALU无效值:返回“ALC无效值”;
case AL_OUT_OF_MEMORY:返回“ALC_OUT_OF_MEMORY”;
/* ... */
违约:
返回“未知错误代码”;
}
}
公共字符串错误(){
开关(alGetError()){
case AL_NO_ERROR:返回“AL_NO_ERROR”;
case AL_INVALID_ENUM:返回“AL_INVALID_ENUM”;
case AL_INVALID_VALUE:返回“AL_INVALID_VALUE”;
case AL_OUT_OF_MEMORY:返回“AL_OUT_OF_MEMORY”;
/* ..
 > Starting AudioMaster!
AL lib: (EE) UpdateDeviceParams: Failed to set 44100hz, got 48000hz instead
 > ALC_NO_ERROR
 > AL_NO_ERROR
 > AL_NO_ERROR
 > Playing!
 > PLAYING