2011-05-18 54 views

回答

1

如果你想要的是顯示電影的視頻和聲音,MediaPlayer能做到這一點很容易。

所以我認爲你實際上是在談論同步某種動畫顯示的一個聲音文件被單獨播放。我們使用MediaPlayer並在動畫循環中輪詢getCurrentPosition。這或多或少地起作用,但是存在需要克服的嚴重問題。 (所有這些處理播放MP3文件;我們沒有嘗試任何其他音頻格式)。

首先,您的mp3 必須以44,100 Hz的採樣率錄製。否則,由getCurrentPosition返回的值是關閉的。 (我們認爲這是根據實際採樣率與44,100比例來縮放的,但我們沒有驗證這個假設)。128,000的比特率似乎效果最好。

其次,更嚴重的是,由getCurrentPosition返回的值似乎脫出裝置的聲音漸行漸遠隨着時間的推移。大約45秒後,這開始變得相當明顯。更糟糕的是,這種漂移在不同的操作系統級別(可能從設備到設備)顯着不同(但始終存在)。 (我們在仿真器和真實設備上對2.1和2.2進行了測試,在仿真器上對此進行了測試。)我們懷疑某種緩衝問題,但無法真正診斷它。我們的解決方法是將更長的mp3文件分解成短片段並鏈接它們的播放。大量的簿記惡化。這仍在測試中,但到目前爲止似乎已經奏效。

+0

不,不是電影播放器​​。我想將卡拉OK效果應用於TextView或Canvas Paint,但希望只是文本視圖。我已經將mp3與歌詞同步,沒有任何問題,但我無法應用卡拉OK效果(如突出顯示一個字母的一半)。目前我正在使用setSpan,它迫使我一次突出顯示一個字母,但這看起來有點笨重。 – xiaowoo 2011-05-18 21:08:04

+0

啊。我誤解了你有問題的地方。關於我的頭頂,我會提出這樣的建議:首先,將所有文本繪製成白色;然後在Canvas中設置一個剪輯區域,以覆蓋表示當前播放時間的文本部分,並再次繪製所有文本,但這次是彩色的。兩次樂趣的工作兩倍。 :) – 2011-05-18 22:05:02

0

泰德·霍普:對MP3文件的時間漂移​​可能是由那些MP3文件是VBR引起的。我一直在開發卡拉OK應用程序一段時間,幾乎所有的工具包 - 從Qt Phonon到ffmpeg - 都有問題報告可變MP3文件的正確音頻位置。我認爲這是因爲他們都試圖通過使用解碼幀數來計算當前音頻位置,這使得VBR MP3不可靠。我描述它在一個用戶友好的方式在Karaoke Lyrics Editor FAQ

不幸的是我發現的唯一的解決辦法是重新編碼的MP3到CBR。另一個是完全放棄當前位置,只依靠系統時鐘。這實際上對VBR MP3產生了更好的結果,但仍然不如將它們重新編碼到CBR中。