我正在嘗試在 OpenAL 中制作一個簡單的聲音播放器作為學習練習。我瀏覽了幾個示例和教程,但總是得到相同的結果:沒有聲音,也沒有錯誤。我已經閱讀了OpenAL 文檔,但它從未提到過類似的內容。我最終認為我可能沒有安裝 OpenAL,這很有趣,我沒有。所以我安裝之后也是沒有聲音也沒有報錯。然后我認為我的緩沖區填充不正確,所以我嘗試只使用 Java 庫來播放它。事實證明它完全沒問題![經過大量測試,編輯]現在我有了音頻,但它只是在調用 alSourcePlay 之后以及有時在應用程序結束時出現的一個“顛簸”。如果我使用 AL_FORMAT_STEREO8 或 AL_FORMAT_MONO8 而不是 16 位格式,就會發生這種情況。我想這是格式的問題,但在其他方面正確的格式沒有任何反應;甚至沒有“顛簸”。我只是不知道出了什么問題。我必須承認,這是我第一次使用 OpenAL。關于 OpenAL 故障排除的信息很少,似乎主要關注 OpenGL 和 Vulkan。這是我到目前為止編寫的代碼。我正在使用LWJGL訪問 OpenAL 和 Java 8。自動字節緩沖區import java.io.InputStream;import java.nio.ByteBuffer;public class AutoByteBuffer { private byte[] array = new byte[0]; private int index; public void put(InputStream is) { int n; byte[] data = new byte[1024]; try { while ((n = is.read(data)) != -1) put(data, 0, n); } catch (Exception e) { e.printStackTrace(); } } public void put(byte[] src) { put(src, 0, src.length); } public void put(byte[] src, int off, int length) { resize(src.length); for (int i = 0; i < length; i++) { array[index++] = src[off + i]; } } protected void resize(int bytes) { Math.addExact(index, bytes); if (index + bytes >= array.length) { int newsize = (int) ((index + bytes) * 1.5 + 0.5); if (newsize < index + bytes) throw new RuntimeException("Could not store enough memory!"); byte[] copy = new byte[newsize]; System.arraycopy(array, 0, copy, 0, index); array = copy; } } public ByteBuffer flip() { ByteBuffer buffer = ByteBuffer.allocate(index); buffer.put(array, 0, index); buffer.flip(); return buffer; }}控制臺輸出 > Starting AudioMaster!AL lib: (EE) UpdateDeviceParams: Failed to set 44100hz, got 48000hz instead > ALC_NO_ERROR > AL_NO_ERROR > AL_NO_ERROR > Playing! > PLAYING
添加回答
舉報
0/150
提交
取消