1. 程式人生 > >個人專案——音樂播放器(一)

個人專案——音樂播放器(一)

1 功能需求及技術可行性分析

1.1編寫目的  

現今社會生活緊張,而欣賞音樂史其中最好的舒緩壓力的方式之一,音樂播放類的軟 件數不勝數,為什麼我還要再寫一個播放器出來呢?因為現有的音樂播放器功能實在是有些多了,多未必不好,但是我總想要一個乾淨純粹的音樂播放器,只為聽歌的播放器,一個有著一些自己想要的功能的播放器,比如“切歌”,一個自己熟悉程式碼的播放器,甚至,一個可以自定義功能結構的音樂播放器。本專案的目 的是開發一個可以播放主流音樂檔案格式的播放器,本設計的實現的這主要功能是播放MP3等音樂檔案,並且能夠控制播放器播放,暫停,停止,上一曲,下一曲。介面簡單,操作簡單。  本軟體具備音樂播放器的播放歌曲、歌曲列表、拖動進度等基本功能,同時本播放器介面簡潔美觀,操作簡單便捷。

1.2專案背景  

隨著智慧手機的普及,使用者需要各種各樣的應用軟體,音樂播放器肯定是必不可少的。隨著計算機的廣泛運用,手機市場的迅速發展,各種音訊資源也在網上廣為流傳,這些資源卡是平常,但已經漸漸成為人們生活中必不可少的一部分了。於是各種手機播放器也緊跟著發展起來,但是很多播放器一味最求外觀花俏,功能龐大,對使用者的手機造成很多資源浪費,比如CPU,記憶體等的佔用率過高,在使用者需要多工操作時,受到不小的影響,帶來了許多不便,而對於大多數普通使用者,許多功能用不上,形同虛設。針對以上各種弊端,選擇了開發多語種的音訊播放器,將各種效能優化,繼承播放器的常用功能,滿足一般使用者聽歌的需求。

2  程式設計

介面靈感來自,迅雷看看播放器,在安卓裡面播放音訊用到時MediaPlayer類比較複雜點的有音軌的控制,進度和音軌控制用到的是seekBar

播放器最重要的一部分就是音軌與歌曲進度同步的實現。音軌設定了兩個TextView用來顯示當前歌曲播放的進度時間和歌曲的長度。音軌物件SeekBar在歌曲剛開始播放的時候呼叫方法SeekBar.setMax(),引數傳入歌曲的長度。SeekBar.setProgress(1)設定遊標的起始進度為1Android的執行緒的開始是通過Handler類來進行的,Handler類是執行緒與執行緒之間通訊的橋樑,實現Runnable介面會實現裡面的run方法,當執行緒開始的時候,

Runnable中的run方法會向Handler發一個Message訊息,這樣,Handler類就可以接收到run方法傳送過來的不同的訊息進行不同的程式碼處理。這樣就達到了各執行緒之間的通訊。要啟動一個執行緒呼叫Handler的方法postDelayed(Runnable1000)表示執行緒睡眠時間是1000ms。   

    讓播放歌曲的執行緒每隔1000ms,即每1秒對音軌的TextView重新設定時間且讓進度條前進1秒的進度。對音軌進行重新整理。這樣就實現了歌詞同步功能SeekBar有一個監聽器,該監聽器的作用是一直保持著對進度條的監聽,當我們用滑鼠向SeekBar的各位置進行點選時,它會自動監聽其位置,進行相應的位置顯示。這也是進度條上的遊標會不停的移動和歌詞時間會不停的變動的原因。

主頁面是本運用的核心介面,本介面擁有一Fragment。此時Activity上顯示的Fragment為正在播放,此頁面運用一張炫酷的網路圖片。中間一塊專輯及歌曲顯示的模組是屬於一個自定義模組。底部為音軌模組。

 

圖1 主介面

各按鈕水平放置,從左到右依次是上一首、播放、下一首功能按鈕。用的是佈局中的線性佈局LinearLayout;將其設定為水平,如圖所示。LinearLayout中依次放置播放/暫停,上一首、下一首按鈕屬性。  

歌曲專輯圖片顯示,如果有歌曲圖片,才會返回,否則為null

Android的媒體播放原理:Android源程式已經為我們封裝好了一個介面類,叫MediaPlayer。該介面在執行行需要一個數據源,通過如下步驟:  

第一步:MediaPlayer.reset();復位操作,為以後的媒體準備播放作準備。

第二步:傳入歌曲資料來源,這裡也是一個數據MediaPlayer.setDataSource(String path);引數需要傳一個路徑,該介面類在收到路徑後將其轉化為資料來源。  

第三步:準備播放資料來源,呼叫方法MediaPlayer.Prepare()。  

第四步:MediaPlayer.Start();播放資料來源,該資料來源播放後,不再與程式有關,需要用MediaPlayer.Stop()方法讓其停止或MediaPlayer.Start();讓其啟動。

3  功能設計    

該系統具有以下主要功能:

1)播放歌曲,顯示歌曲名字

2)播放上一首歌和下一首歌  

3)播放模式可以是迴圈的,也以是單曲迴圈

4)可以通過手勢調節歌曲進度

5)可以選取歌曲進行播放

4  主要程式碼

BaseActivity中的程式碼:

package com.wwj.sb.activity;


import com.wwj.sb.adapter.MenuAdapter;
import com.wwj.sb.utils.Settings;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;

public class BaseActivity extends Activity {
	public static final String BROADCASTRECEVIER_ACTON="com.wwj.music.commonrecevier";
	private CommonRecevier commonRecevier;
	public float brightnesslevel=0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
        // 設定面板背景
		Settings setting = new Settings(this, false);
		String brightness=setting.getValue(Settings.KEY_BRIGHTNESS);
		android.view.WindowManager.LayoutParams attributes = getWindow().getAttributes();
		brightnesslevel=attributes.screenBrightness;
		if(brightness!=null&&brightness.equals("0")){//夜間模式
			attributes.screenBrightness=Settings.KEY_DARKNESS;	
			getWindow().setAttributes(attributes);
		}
		this.getWindow().setBackgroundDrawableResource(
				setting.getCurrentSkinResId());
		commonRecevier=new CommonRecevier();
	}
	/**
	 * 設定正常模式和夜間模式
	 * */
	public void setBrightness(View v) {
       Settings setting = new Settings(this, true);
		String brightness=setting.getValue(Settings.KEY_BRIGHTNESS);
		MenuAdapter.ViewHolder viewHolder=(MenuAdapter.ViewHolder)v.getTag();
	   WindowManager.LayoutParams attributes = getWindow().getAttributes();
		if(brightness!=null&&brightness.equals("0")){//夜間模式
			viewHolder.tv_title.setText(getResources().getString(R.string.darkness_title));
			viewHolder.btn_menu.setBackgroundResource(R.drawable.btn_menu_darkness);
			attributes.screenBrightness=brightnesslevel;
			setting.setValue(Settings.KEY_BRIGHTNESS, "1");
			getWindow().setAttributes(attributes);
		}else{//正常模式
			viewHolder.tv_title.setText(getResources().getString(R.string.brightness_title));
			viewHolder.btn_menu.setBackgroundResource(R.drawable.btn_menu_brightness);
			attributes.screenBrightness=Settings.KEY_DARKNESS;	
			setting.setValue(Settings.KEY_BRIGHTNESS, "0");
			getWindow().setAttributes(attributes);
		}
	
	} 
	


	@Override
	protected void onStart() {
		super.onStart();
		registerReceiver(commonRecevier, new IntentFilter(BROADCASTRECEVIER_ACTON));
	}



	@Override
	protected void onStop() {
		super.onStop();
		unregisterReceiver(commonRecevier);
	}



	public class CommonRecevier extends BroadcastReceiver{
		@Override
		public void onReceive(Context context, Intent intent) {
			finish();
		}
	}
}


相關推薦

個人專案——音樂播放()

1 功能需求及技術可行性分析 1.1編寫目的   現今社會生活緊張,而欣賞音樂史其中最好的舒緩壓力的方式之一,音樂播放類的軟 件數不勝數,為什麼我還要再寫一個播放器出來呢?因為現有的音樂播放器功能實在是有些多了,多未必不好,但是我總想要一個乾淨純粹的音樂播放器,只為聽歌的

個人專案——音樂播放(二)

HomeActivity的程式碼: package com.wwj.sb.activity; import java.io.File; import java.util.ArrayList; import java.util.List; import android

Android AIDL技術實戰專案-音樂播放

實現功能 使用AIDL服務實現: 音樂播放、暫停、上一曲、下一曲、歌詞功能 音樂播放模式:順序播放 、隨機播放、單曲播放 多個頁面呼叫AIDL服務 主頁面底部音樂迷你控制器 音樂詳情頁面 程式

Android Studio學寫英語聽寫APP(音樂播放)

最近迷上了AndroidAPP,看了點資料就邊學邊寫,只是打發時間的個人愛好,工具為Android Studio3.0.1,為了偷懶,準備給孩子寫個聽寫APP,思路是到時候從APP下載音訊資源包到SD卡,APP播放直接讀取儲存路徑下的音訊,不用從Android自帶的媒體庫讀取(因為還不會遍歷

Android AIDL技術實戰專案-音樂播放(二)-使用retrofit完成音樂API的封裝

使用retrofit完成音樂API的封裝 程式碼結構 1、匯入retrofit相關庫 compile 'com.squareup.retrofit2:retrofit:2.2.0' 2、編寫介面API public interfac

如何寫一個正經的Android音樂播放

關於音樂列表的讀取,不同的音樂播放器都會有不同的方案,有的是有多重方案並用。例如說,全盤掃描音樂格式檔案等,但是Android本身有媒體庫,可以讀取本地媒體庫的資料,來快速獲知裝置上的音樂。 首先我封裝了一個Audio類來儲存讀取的音訊資訊。 public class Audio { privat

用c# -Winform開發音樂播放專案

最近一段時間有時間,就試著用c#-winform寫個音樂播放器的窗體,接著就進行了,我先前在網上收集好素材,另外還看了幾篇有關音樂播放器的專案,整合,融合自己的風格就完成了以下專案.雖然現在功能不多,但是在慢慢完善,如果有人想要看一下原始碼,請聯絡我QQ:1439802478 &n

個人搭建的React專案之React音樂播放

該專案是本人自使用react框架以來製作的較大的專案,目前該專案放在github上,感興趣的朋友可以去看看一下,覺得還行的話可以給個star,哈哈 地址:https://github.com/cocoxiaoyue/react-music-player 專案環境 執行   1、該專案是基於node環境,

Android開源專案音樂播放

作為一個有追求的程式設計師來說,專案原始碼必須看,但是網上那麼多資源是不讓你無從下手啊,博主今天為大家推薦五個經典專案吧。 一、android-UniversalMusicPlayer 這個開源專案展示瞭如何實現一個橫跨各種Android平臺的音樂播放器,包括手機,平板,汽車,手錶,電視等。 架構:

【Android】Android開源專案音樂播放原始碼彙總

作為一個有追求的程式設計師來說,專案原始碼必須看,但是網上那麼多資源是不讓你無從下手啊,博主今天為大家推薦五個經典專案吧。 一、android-UniversalMusicPlayer 這個開源專案展示瞭如何實現一個橫跨各種Android平臺的音樂播放器,包

個人APP樂逗專案(內部音樂播放實現,開源MaskProgressView使用)

1.所需工具 進度條: GitHub 獲取: 也可以免積分下載 音樂播放器進度條library : 2.效果演示 實現功能: (1) 音樂播放 (音樂播放地址URL) (2) 進度條 (MaskProgressVi

關於仿酷狗音樂播放開源:尋求音樂播放素材,讓仿酷狗開源

替換 log 設有 ext 軟件 水平 iss 開源 可靠 轉載請說明原出處,謝謝~~ 距離公布測試版的仿酷狗音樂播放器。已經幾個月過去了。期間非常多網友加我QQ來問我開源的問題,我也早有開源意向。但我也一直沒有得到可靠的信息,保證開

Android實現音樂播放

simple ani call ket 打開文件 界面 方式 .cn 點擊 Graphical User Interface 本篇文章記錄了我實現Android簡單音樂播放器的過程,(一)中介紹了怎麽構建音樂播放器的前端頁面。首先大家看一下,界面最後是這樣的(界面有

[嵌入式Linux專案實戰開發]基於QT4.7.4的音樂播放實現與設計【2018年給力專案

[嵌入式Linux專案實戰開發]基於QT4.7.4的音樂播放器實現與設計【2018年給力專案】是【創科之龍】團隊aiku嵌入式視訊教程系列製作的現有的音樂播放器。 主要功能實現: 1.新建工程,基類選擇Qwidget。雙擊開啟介面檔案,在介面檔案中建立label顯示時間、若干個tool

70行python程式碼製作款簡易的音樂播放

今天整理了以前的python作業程式碼,發現了一些有趣的小東西,比如下面這個,大概70行程式碼製作一款簡易的音樂播放器。 install some packages pip install pygame pygame是跨平臺Python模組,專為電子遊戲設計,包含影象

基於QT的網路音樂播放

自學Qt已經有一段時間了,但是始終感覺自己還是很弱(其實並不是感覺自己很弱,是自己本來就很弱,哈哈)。自己也照著書上敲了幾個例子,但覺得還是要寫點東西才能真正運用起來。所以,前段時間就寫了個很簡單的音樂播放器。在這裡總結一下,寫得不好,所以請各位不要介意。 先看

70行python程式碼製作款簡易的音樂播放

今天整理了以前的python作業程式碼,發現了一些有趣的小東西,比如下面這個,大概70行程式碼製作一款簡易的音樂播放器。 install some packages pip install pygame pygame是跨平臺Python模組,專為電子遊戲設計,包含影象、聲音。 我這裡

Android應用開發 MP3音樂播放程式碼實現

                Android應用開發--MP3音樂播放器程式碼實現(一)需求1:將記憶體卡中的MP3音樂讀取出來並顯示到列表當中1.   從資料庫中查詢所有音樂資料,儲存到List集合當中,List當中存放的是Mp3Info物件2.   迭代List集合,把每一個Mp3Info物件的所有屬性

Python學習之windows音樂播放之路(

1.python讀取檔案操作 與函式返回值: def getFilePath(): try: f = open("C:\\Users\\tangjing\\Desktop\\t

步實戰HTML音樂播放

在這裡我用HTML5從頭開始一步一步來製作一個簡約的音樂播放器,大家可以參考一下,接下來正式開始。 音樂播放器效果 播放器分析 這裡將播放器分兩塊來做: 檢視層(html + css) 邏輯層 ( js ) 檢視