2010-01-25 37 views
1
我的黑莓播放聲音時,具有下列問題

與播放問題聽起來對黑莓

  • 第一次發出聲音,應用程序掛起〜500毫秒(不是當玩家創建,只是當聲音實際上是扮演)
  • 有正在播放

我已經在除了模擬物理設備上測試了通話和聲音之間的延遲。在模擬器上,必須有一個錯誤,因爲在聲音開始前需要幾秒鐘(我聽說這是模擬器的問題,所以......)。

我也測試過.wav和.mp3文件,它給出了幾乎相同的結果。

這裏是我用來加載播放器的代碼:

  stream = new Object().getClass().getResourceAsStream(fileName); 
      result = javax.microedition.media.Manager.createPlayer(stream, fileName.endsWith(".wav")?"audio/x-wav":"audio/mpeg"); 
      if (prefetch) { 
       result.prefetch(); 
      } 

我然後存儲在播放器的參考,我使用後用下面的代碼來播放聲音:

  javax.microedition.media.Player player = (javax.microedition.media.Player)resources[soundId]; 
      if (player != null) { 
        //#debug 
        System.out.println("Player state: " + player.getState()); 
        if (player.getState() != javax.microedition.media.Player.STARTED) { 
         player.setLoopCount(loopCount); 
         player.start(); 
        } 
      } 

我是積極的延遲是由於聲音播放,因爲我有一個開關關掉它,當我這樣做時,延遲就會消失。有什麼我做錯了嗎?

更新

沒有工作,所以我最終改變的聲音來被處理的更好的MIDI文件。如果有人找到解決方案,我仍然希望聽到它。

回答

1

沒有很好地解決了這個問題,但這裏是如何減輕它:

  • 創建一個單獨的線程來對玩家扮演的聲音(即,將調用。開始(線程) ,因爲這是掛起的功能)
  • 如果您的遊戲的幀速率過高,並且因此您使用的是100%的CPU,則媒體播放器將無法獲得足夠的時間在幀之間準備緩衝區,因此運行需要很長時間。稍微降低幀頻以提供幫助。
  • 在開發者大會上,RIM展示了Wave Mixer的代碼,它應該通過保持播放器處於打開狀態,同時將傳入聲音文件混合到流中來解決問題。但是他們還沒有發佈代碼。
  • 在操作系統7上,在高cpu負載下,midi文件與幀速率混亂,因此請避免它。