2015-08-30 25 views
2

我用libgdx + java開發了一款不錯的遊戲,用於android作爲目標平臺。 我幾乎到了最後,只有改進地圖纔是剩下的任務。 直到現在我正在運行 - 在桌面上調試我的遊戲,因爲您知道libgdx是跨平臺的,我的期望只是右鍵單擊並導出爲android。 當然我試過了,那又怎麼樣?突然之間我撞上了牆。 問題是我的聲音效果在android上聽起來不太好。他們在桌面上工作得很好,但在Android上不太好。讓我分析一下幾個問題和例子: 如果我們考慮爆炸音效: 一個場景;車輛撞擊到爆炸聲,我從box2d接觸到聯繫人,並在爆炸聲效果上調用播放方法。 我期望的是一個正常的爆炸聲。 在桌面我聽到它,沒有問題,但在Android的我所聽到的只是一個非常非常短的嘈雜(非常短的也許只有幾毫秒),那麼一段時間後,沉默了許久再次短嘈雜 我怎麼嘗試:Libgdx聲音效果不流暢或完全只在Android上發佈(聲音效果)

我試過許多其他線程的建議,他們是:

  1. 我想它在格式44.1K赫茲16位wav文件相同的格式OGG文件,22.05千赫wav文件,他們所有的聲音一樣。
  2. 音效不會太短或太長。好吧,我的罰款是3秒。
  3. 我試圖用fl-studio和audacity重新保存或安排它。

我在s5 mini experia z1和z3上試了一下。當我用音樂類 ,但我有很多的聲音效果和音樂類不是爲使用,所以我需要解決這個問題

我嘗試了一些其他的聲音文件不同

MP3文件工作的偉大比我同樣條件下的爆音效果(我的意思是聲音格式的頻率或比特率等)。

我檢查了聲音是否完全加載是否沒有。是的,它是完全加載,但聽起來一樣,當然我玩了一段時間後,我的遊戲開始。有了這句話,我的意思是我至少等待下一幀播放聲音,因爲有些人說它不能在某個線程的第一幀播放。

如果我們希望看到一些代碼: 我如何加載文件:

這是當比賽纔剛剛起步,而用戶耐心地按照加載畫面:)

private void loadSoundEffects(){ 
    assetMan.load("sounds/explosion.wav", Sound.class); 
} 
進度條叫

然後我得到的聲音進入另一種方法在全球分類地圖加載完成

soundEffects.put("explosion",assetMan.get("sounds/explosion.wav", Sound.class)); 

在我的聲音管理器類我小時後AVE這種方法

public void playSingle(String name,float x ,float y){ 
    Sound sound=null; 
    sound=soundEffects.get(name); 
    long id=sound.play(); 
    sound.setVolume(id, getVolume(x, y));//dont worry here volume returns always 1 for texting 
} 

當我打電話玩兒法就在這裏,它返回一個積極的ID(如出現問題情況下,它會返回-1)

對於裝載的東西,我也試過這樣:

sound=Gdx.audio.newSound(Gdx.files.internal("sounds/explosion.wav")); 

這是一個很大的項目,所以我可能有超過70個班級=>我不能在這裏粘貼所有這些:) 但我覺得隨時可以回答任何形式的問題,請問如果你需要更多的代碼或文件或者其他東西,請致電 hing讓我知道

讓我們看看它的聲音;我上傳的正常爆炸的WAV文件,我從電話記錄在此RAR的一個:

http://www.filedropper.com/soundeffects

你會聽到一些聲音,像滴答真的聽起來像這樣:)

編輯:添加一些更多信息

它是工作在Windows 7上我的操作系統是贏得7

我使用最新libGDX。我的IDE是日食。我試圖通過拔掉電纜來擺脫調試器,但結果是一樣的。

聲音效果使用的文件大小必須小於1 MB爲維基說,我的文件,688 KB

編輯:與性能相關的?

我開始思考它是否與我的代碼的性能有關。考慮一些導致延遲的其他原因,並且對聲音產生這種效果,但是這裏有一些值可以使用55-60 fps的遊戲,甚至有時候所有的計算都少於15毫秒,但是我聽到的聲音相同,只有很少的文件像60 KB。所以,我會繼續考慮這些文件。如果他們壞了?或仍然是一個格式問題?你有一個工作的音效文件?或有關格式的任何建議?我讀了96khz 16位ogg文件,我也試過了。

編輯:重要通知

我在手機上玩過我的遊戲。我開車撞了一些爆炸物。它聽起來一樣,然後我回到菜單。我忘了打開手機。遊戲正在運行。但屏幕自動鎖定。它就這樣離開了大約15-20分鐘。然後再試一次,我解鎖了屏幕,發生了什麼?突然之間,所有的爆炸物都爆炸了,我聽到的聲音非常好,完整,菜單屏幕仍在顯示。因此我認爲當遊戲暫停足夠的時間時,我可以得出結論,聲音效果已準備就緒,並且可以很好地播放。這是什麼意思?聲音效果沒有從內存加載,但我想玩?或準備就緒在這裏有另一種含義?我檢查了它是否被加載或者資產管理器的isLoaded()方法返回true。我只是在聲音上調用播放方法之前做了這個。我應該相信這是加載的方法嗎?或者是什麼?

好吧,各位先感謝您的幫助。

對不起我一直是有點長,我會繼續努力和研究..

回答

2

我發現它的實際問題和解決方案。

它與性能或文件或android無關。這是libGDX的android方面的一個問題(可能不被認爲是一個錯誤,但不同於桌面版本)。讓我很快標記情況,然後回答:

我有很多聲音效果實例。獨立加載並保持獨立指針。所以在我的代碼中這些音效實例之間沒有關係。但是它們在libGDX的某處相關。因爲情況是這樣的:我在我的遊戲中有一個槍班。並且槍具有音效。如果通過調用sound.resume()方法繼續通過調用按鈕按下的槍來循環其聲音效果,並且如果未按下按鈕,則會使用sound.pause()方法暫停該按鈕。在桌面上,此暫停方法僅暫停槍的聲音效果。但在Android中它會暫停所有聲音效果,或者不確定也許只有最後一個聲音效果被觸發。因此,在每一幀中,如果槍沒有發射,我會在調用其他一些聲音效果的播放時調用槍的聲音效果(我的錯誤實現)的暫停方法,暫停對槍的調用可取消所有其他聲音效果。這就是我聽到一個很短的噪音..

一種解決方案是調用暫停方法與將暫停聲音的ID。另一種解決方案是嘗試一種不需要暫停方法的不同實現。

感謝任何關心我的問題,甚至他無法回答的人。我認爲Nahro的答案可以留在那裏,因爲它也解決了問題,即使這不是我的情況。如果你認爲這個問題將來對別人沒有幫助,我可以刪除它,請在評論中告訴我,但我認爲它有點深刻,很難注意,所以我猜人們會在找到解決方案之前找到這篇文章。

3

我敢肯定這裏的問題是,你的聲音效果是1MB或更大。它在libgdx wiki中表示,如果一個聲音文件大於1MB,則會導致Android出現問題,需要使用音樂類而不是聲音類。

+0

感謝您的快速回復,但我確信兄弟我檢查如果Windows不計算錯誤最大的一個是787 KB,我在ra中共享的一個也不到1 MB,它是688 KB。對不起,我一定已經將這個信息添加到我的問題 –