亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

OpenAL 只呈現一個“凹凸”,但沒有錯誤。到底是怎么回事?

OpenAL 只呈現一個“凹凸”,但沒有錯誤。到底是怎么回事?

躍然一笑 2023-03-23 16:31:34
我正在嘗試在 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
查看完整描述

1 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

我仍然不知道發生了什么,但我是如何按照教程進行操作的?;镉嫺嬖V我們使用這段代碼來加載 wav 文件,它似乎工作得很好!我的理論是它運作良好,因為它使用 LWJGL 緩沖區而不是 Java 緩沖區。查看 LWJGL 的源代碼,它似乎很重要,因為它試圖獲取緩沖區的內存地址。而且,當然,如果 LWJGL 是創建緩沖區的那個,它會確切地知道它在哪里。



查看完整回答
反對 回復 2023-03-23
  • 1 回答
  • 0 關注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號