iOS開發簡單的音訊播放器
今天第一次接觸IOS開發的UI部分,之前學Objective-C的時候一直在模擬的使用Target-Action回撥模式,今天算是真正的用了一次。為了熟悉一下基本控制元件的使用方法,和UI部分的回撥,下面開發了一個特別簡易的音訊播放器,來犒勞一下自己這一天的UI學習成果。在用到UI的控制元件時如果很好的理解之前部落格在Objective-C中的Target-Action回撥模式,感覺控制元件的用法會很順手。下面的簡易播放器沒有用到多高深的技術,只是一些基本控制元件和View的使用。
話不多說簡單的介紹一下今天的音訊播放器。在播放器中我們用到了UIProgressView(進度條)來顯示音訊的播放進度,用UILabel顯示播放的當前時間和總時間。用UIImageView和UIImagel來加入圖片,用UISegmentedControl來控制播放和暫停,用滑動器UISlider來控制音訊的音量。上面的執行元件都是UIKit中的元件,我們要定時的獲取音訊的播放時間,我們還要用到NSTimer來定時獲取CurrentTime。播放器怎麼能少的了關鍵的元件呢,我們還需要引入框架AVFoundation.framework。我們會用到元件AVAudioPlayer來播放我們的音訊。
下面是簡易音訊播放器的截圖:
1.功能介紹:
點選播放會播放預設歌曲,同時顯示播放進度和播放當前時間,下面的slider可以調節音訊的聲音大小。
2.主要開發過程
1.在我們的XCode中新建一個SingleView的iPhone的工程,為了更好的理解和配置控制元件和view,就不使用storyboard來進行控制元件的拖拽啦。在我們新建工程下面的ViewController.m編寫我們的程式碼,為了隱藏我們音訊播放器使用的控制元件和控制元件回撥的方法,我們在ViewController.m中用延展來對我們的元件和方法進行宣告。程式碼如下:
#import "ViewController.h" @interface ViewController () //新增背景用的ImageView @property (strong, nonatomic) UIImageView *backView; //播放進度條 @property (strong, nonatomic) UIProgressView *progress; //選項卡按鈕,賦值播放和暫停 @property (strong, nonatomic) UISegmentedControl * segment; //slider,用滑動器來設定音量的大小 @property (strong, nonatomic) UISlider *slider; //timer,來更新歌曲的當前時間 @property (strong, nonatomic) NSTimer *timer; //顯示時間的lable @property (strong, nonatomic) UILabel *label; //加入圖片,中間的圖片 @property (strong, nonatomic) UIImageView *imageView; //宣告播放器,來播放我們的音訊檔案 @property (strong, nonatomic) AVAudioPlayer *player; //在暫停和播放時回撥此按鈕 -(void)tapSegment; //更新歌曲時間 -(void)time; //改變聲音大小 -(void) changeVo; @end
2.上面是我們的延展部分,來進行我們的元件的宣告和方法的宣告,具體的實現就寫在本檔案中的@implementation中,我們把元件的實現和配置寫在-(void) viewDidLoad;方法中,該方法會在主檢視載入完畢後執行。在編寫實現程式碼之前我們要把我們用到的媒體檔案拖入到我們的Project中,下面是具體程式碼的實現。
1).下面的程式碼是為我們的應用新增背景圖片,也就是我們上面圖片中的黑色背景圖片,在初始化ImageView的時候我們知道view的位置和大小CGRectMack(x, y, width, height); 用Image來通過圖片檔案的名稱來載入我們的圖片,把圖片檢視插入到主檢視的最底層,同時設定其index來實現,程式碼如下。
/*新增背景圖片*/ //初始化ImageView,並設定大小 self.backView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, 320, 480)]; //載入圖片,我們的圖片名為background UIImage *backImage = [UIImage imageNamed:@"background"]; //新增背景圖片到ImageView self.backView.image = backImage; //把ImageView新增到view的最底層 [self.view insertSubview:self.backView atIndex:0];
2).初始化我們的進度條並設定進度條的位置和大小,對進度值初始化為零。同時把進度條通過addSubView加入到我們的主檢視中
/*例項化進度條,並新增到主檢視*/ self.progress = [[UIProgressView alloc] initWithFrame:CGRectMake(30, 60, 240, 10)]; [self.view addSubview:self.progress]; self.progress.progress = 0;
3).新增中間的圖片,和新增背景圖片相似,在這就不贅述了程式碼如下:
//新增中間的圖片 self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(80, 90, 160, 150)]; UIImage *image = [UIImage imageNamed:@"image.png"]; self.imageView.image = image; [self.view addSubview:self.imageView];
4).初始化我們的segment, 在初始化segment的同時,我們通過便利初始化方法來指定有幾個按鍵和每個按鍵中的值。配置的時候我們可以通過tintColor來設定我們segment的顏色,通過Target-Action來註冊segment要回撥的方法,同時指定回撥的事件,我們設定的時UIControlEventValueChange,就是當segment的selectedSegmentIndex改變時,呼叫我們註冊的方法。程式碼如下:
//新增segmentControl self.segment = [[UISegmentedControl alloc] initWithItems:@[@"Play", @"Pause"]]; self.segment.frame = CGRectMake(110, 255, 100, 40); self.segment.tintColor = [UIColor whiteColor]; //註冊回撥方法,在segment的值改變的時候回撥註冊的方法 [self.segment addTarget:self action:@selector(tapSegment) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:self.segment];
5).下面的程式碼是要初始化並配置我們的音訊播放器元件,配置的時候指定我們音訊所在路徑的url,並且回寫播放的錯誤程式碼如下
//配置播放器 NSBundle *bundle = [NSBundle mainBundle]; NSString * path = [bundle pathForResource:@"music" ofType:@"mp3"]; NSURL *musicURL = [NSURL fileURLWithPath:path]; NSError *error; self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:musicURL error:&error]; if (self.player == nil) { NSLog(@"error = %@", [error localizedDescription]); }
6).設定定時器,並註冊我們要間隔呼叫的方法。下面的定時器是1秒中重複呼叫我們當前view中的time方法,在time方法中我們會獲取當前音訊的當前播放時間,並在lable中顯示,稍後會提到
//設定時間,每一秒鐘呼叫一次繫結的方法 self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(time) userInfo:nil repeats:YES];
7).新增我們的音量控制元件,並繫結當slider的值改變是呼叫哪一個方法。同時指定slider的最大值和最小值,程式碼如下:
//新增slider self.slider = [[UISlider alloc] initWithFrame:CGRectMake(100,300, 120 , 50)]; [self.slider addTarget:self action:@selector(changeVo) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:self.slider]; //設定slider最小值和最大值 self.slider.minimumValue = 1; self.slider.maximumValue = 10;
3.元件初始化和配置完畢,接下來我們就得實現各控制元件要回撥的方法。
1).當slider的值改變是我們要呼叫的方法如下,就是要設定一下音訊播放器的聲音,程式碼如下:
//改變聲音 -(void)changeVo { self.player.volume = self.slider.value; }
2).定時器定時呼叫的方法如下,在此方法中我們要獲取音訊的總時間和當前播放時間,並把秒轉換成分鐘(下面的程式碼沒有使用NSDateFormat來轉換時間,讀者可以用自己的方法來轉換),轉換完以後在label中顯示當前時間和總時間,程式碼如下
//更新時間 -(void) time { //獲取音訊的總時間 NSTimeInterval totalTimer = self.player.duration; //獲取音訊的當前時間 NSTimeInterval currentTime = self.player.currentTime; //根據時間比設定進度條的進度 self.progress.progress = (currentTime/totalTimer); //把秒轉換成分鐘 NSTimeInterval currentM = currentTime/60; currentTime = (int)currentTime%60; NSTimeInterval totalM = totalTimer/60; totalTimer = (int)totalTimer%60; //把時間顯示在lable上 NSString *timeString = [NSString stringWithFormat:@"%02.0f:%02.0f|%02.0f:%02.0f",currentM, currentTime, totalM,totalTimer]; self.label.text = timeString; }
3).下面是segment要回撥的方法根據segment的selectedSegmentIndex來設定播放器的播放還是停止,程式碼如下:
//segment所回撥的方法 -(void) tapSegment { int isOn = self.segment.selectedSegmentIndex; if (isOn == 0) { [self.player play]; } else { [self.player pause]; } }
以上是整個簡易播放器的程式碼,以為功能特別簡單所以程式碼也不多。主要通過上面的簡易播放器來熟悉一下IOS開發中控制元件和view的使用流程,筆者也在一直學習,水平有限,歡迎批評指正。
相關文章
- iOS開發之簡單音訊播放器iOS音訊播放器
- 一個WPF開發的、介面簡潔漂亮的音訊播放器音訊播放器
- 簡單音樂播放器----java (美。。。。)播放器Java
- 音樂播放器的開發播放器
- FFmpeg iOS 音訊開發的小總結iOS音訊
- 好程式設計師前端分享使用JS開發簡單的音樂播放器程式設計師前端JS播放器
- iOS開發:音訊播放、錄音、視訊播放、拍照、視訊錄製iOS音訊
- ios下的語音開發——科大訊飛使用iOS
- vue..js 編寫的簡單音樂播放器VueJS播放器
- iOS開發系列--音訊播放、錄音、視訊播放、拍照、視訊錄製(轉)iOS音訊
- 直播軟體開發,Android自定義簡單的音訊波譜viewAndroid音訊View
- iOS 視訊播放的簡單使用iOS
- Windows 平臺上有許多開源的音訊開發庫,涵蓋了從簡單的音訊播放到複雜的音訊處理和生成。以下是一些常見且功能強大的開源音訊開發庫:Windows音訊
- IOS開發 製作簡單的計算器iOS
- 簡單的ARM+Linux音訊方案Linux音訊
- openwrt 音訊開發音訊
- IOS開發基礎—簡單的qq表情排列appiOSAPP
- More-iOS開發中的音訊相關內容總結iOS音訊
- Android 超簡單音樂播放器(十)歌詞的實現Android播放器
- HarmonyOS音訊開發指導:使用OpenSL ES開發音訊播放功能音訊
- FFmpeg+SDL2實現簡易音視訊同步播放器播放器
- 基於 electron-vue 開發的音樂播放器Vue播放器
- iOS音訊-AVAudioSessioniOS音訊Session
- 簡單的iOS直播推流——flv 編碼與音視訊時間戳同步iOS時間戳
- HarmonyOS音訊開發指導:使用AudioRenderer開發音訊播放功能音訊
- 網頁實現一個簡單的音樂播放器(大佬別看。(⊙﹏⊙))網頁播放器
- iOS好用的分類工具 讓開發更簡單 WHKitiOS
- 騰訊音樂招 iOS 開發, base 深圳,要求:本科、三年、OC,懂音視訊開發優先。iOS
- 音樂播放器的實現(簡易版)播放器
- 開源安卓播放器:Dolphin Player 簡單分析安卓播放器
- vue2.x 音訊播放器 使用element ui + Audio實現一款完整的音訊播放器Vue音訊播放器UI
- Android 音樂播放器開發實錄(MediaSession)Android播放器Session
- iOS-音訊-AVAudioSessioniOS音訊Session
- 【秒懂音視訊開發】08_音訊錄製音訊
- iOS 9音訊應用播放音訊之iOS 9音訊播放進度iOS音訊
- iOS開發-單例iOS單例
- MPV 播放器:Linux 下的極簡視訊播放器播放器Linux
- 音視訊基本概念和FFmpeg的簡單入門