1. 程式人生 > >Android之自定義一個可播放某一時間段的音樂播放器

Android之自定義一個可播放某一時間段的音樂播放器

本文純屬蛋疼,實現一個可以拖動,選擇需要播放的時間段,然後播放效果是隻播放這一段選中的音樂。

  • 需求:自定義一個Android播放器
    • 可以隨意選擇需要播放音樂片段
    • 返回選中播放部分的音樂資料
  • 分析:
    • MediaPlayer 肯定是實現不了了,使用AudioTrack
    • 需要可以選擇播放的音樂片段,需要介面的支援,至少需要一個可以雙向選擇的SeekBar,感謝前輩的支援
    • 需要返回選中部分的音樂資料,返回的資料是byte[],可以選擇之間返回一堆byte陣列,可以寫入快取檔案,然後返回快取檔案,接收方再從檔案裡讀取;推薦第二種方式,更靈活一點,還可以自定義檔案頭,方便傳遞諸如SampleRate,ChannelCount等等引數,直接傳一堆陣列,如果選擇播放區域很大,很吃記憶體。
  • 實現:
    • 感謝感謝,雙向選擇的SeekBar的問題順利解決,當然也可以自己實現,但這個不是現在的主要矛盾
    • 使用AudioTrack 播放音樂, AudioTrack需要自己迴圈寫入資料,這種耗時操作最好線上程裡操作。
    • 想要實現那種邊邊播放邊解碼,解碼音樂需要開一個執行緒,播放時新開一個執行緒,但是這裡有個問題,如果已經全部解碼完,就沒有問題了,使用者可調整的SeekBar,min:0,max:解碼出來的資料長度,然後使用者拖到那裡,就獲取那部分資料播放,但是沒有解碼完成,max位置時一一直在變化的,此時使用者如果拖動,就有問題了,開始解碼音樂時,可以獲取到音樂的總時長,如何把時長加進來,使用者可見的時調整播放時間,處理時通過這個時間來找到對應的資料
    • 如何解決上面的問題,同時不能太佔用記憶體,依舊使用RandomAccessFile儲存獲取到的檔案,對檔案進行一個處理,新增一個檔案或者列表,標示某一秒內,對呀哪些音樂資料。
    • 最後實現的效果,基本可以做到拖動播放起點,播放該時間點的音樂
  • 附上 1.0原始碼 如果想直接下載原始碼成功執行,需要在手機根目錄下放一個“test.mp3“的音樂檔案
  • 測試介面很簡潔,原諒我放蕩不羈愛自由

    這裡寫圖片描述