一、音效播放
1、音效播放:是播放一些短音頻 常作爲點綴音頻 使用AudioToolbox.framework(系統聲音服務)
2、特點:
1>音頻播放的時間不能超過30s
2>數據必須是PCM或者IMA4格式
3>音頻文件必須打包成.caf、.aif、.wav的一種
3、使用System Sound Service 播放音效的步驟如下
1>註冊ID
2>播放
使用方法如下:
1>讀取音頻路徑
NSString *path = [[NSBundle mainBundle] pathForResource:@"背景音樂.caf" ofType:nil];
2>註冊系統聲音的ID
SystemSoundID ID = 1;
AudioServiceCreateSystemSoundID((_bridge CFURLRef) ([NSURL fileURLWithPath:path]), &ID);
3>播放
AudioServicesPlaySystemSound(ID);(播放音效)
AudioServicesPlayAlertSound(ID);(震動)
二、音樂播放
1、音樂播放:播放一些較長的音頻 對於這些音頻的播放通常需要進行精確的控制 使用AVFoundation.framework。使用AVFoundation(audio vidio) 處理 音視頻的操作
2、使用音樂播放功能 需要導入AVFoundation框架
3、使用AVAudioPlayer 播放音頻
1>設置音頻的音量(volume)、播放速率(rate)、音頻播放的位置、獲得播放的總時長、監測音頻是否播放完畢、音樂播放的循環次數
4、初始化音頻播放器
1> 獲取音樂路徑
NSString *path = [[NSBundle mainBundle] pathForResource:@"李榮浩 - 老街.mp3" ofType:nil];
2>初始化音視頻
NSError *error;
[AVAudioPlayer *player =[AVAudioPlayer alloc] initWithContentsOfURL:[URLWithPath:path] error:&error];
3>屬性
(1)音量
player.volume = 1;
(2)速率(如果想設置播放速率 必須得先開啓允許設置)
player.enableRate = YES;
player.rate = 2;(正常速度的兩倍播放)
(3)聲道(-1.0 左聲道 0.0 立體聲 1.0 右聲道)
player.pan = -1.0;
(4)預播放(把音樂文件的數據加載到內存)
[player prepareToPlay];
//播放
[player play];
[player pause];
[player stop];
(5)循環次數 0播放一次 負數無限循環 整數播放次數+1
player.numerOfLoops = -1;
(6)設置音樂播放器 當前播放的時間(設置從哪裏開始播放)
player.currentTime = 100;
(7)當前音樂的總時長(只讀)
NSLog(@“音樂的總時長:%f”, player.duration);
(8)通道的數量
NSLog(@"通道的數量:%lu", (unsigned long)player.numberOfChannels);
(9)獲取設備的當前時間
NSLog(@“設備的當前時間%f”, player.dexiceCurrentTime);
三、錄音
1、要想使用錄音,需要導入<AVFoundation/AVFoundation.h>框架
2、錄音的類是:AVAudioRecorder
3、使用AVAudioRecorder的步驟
1>創建一個存儲錄音的路徑
NSString*path=[NSTemporaryDirectory()stringByAppendingPathComponent:@"rec.caf"];
2>設置錄音的相關參數( settings 錄音的 音頻設置 採樣率 通道 質量…)
(1) AVSampleRateKey 採樣率
AVEncoderBitRateKey 比特率
AVNumberOfChannelsKey 錄音通道
AVEncoderAudioQualityKey 錄音質量
(2) 比特率 音頻的傳輸速度
有 8 16 32 64 值越大 傳輸速度越快 音質越高
NSDictionary *settings = @{AVNumberOfChannelsKey:@(2), AVEncoderAudioQualityKey:@(AVAudioQualityMax), AVEncoderBitRateKey:@(32), AVSampleRateKey:@(44100)};
audioRecorder = [[AVAudioRecorder alloc] initWithURL:[NSURL fileURLWithPath:path] settings:settings error:nil];
(1)掛上代理(代理名字:AVAudioRecorderDelegate)
audioRecorder.delegate = self;
3>屬性
(1)預錄製
[audioRecorder prepareToRecord];
(2)錄製
[audioRecorder record];
[audioRecorder stop];//停止
(3)錄音的當前時間
NSLog(@“%f”, audioRecorder.currenTime);
4>實現錄音結束的代理方法
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag{
NSLog(@"%@ %d", recorder, flag);
}
四、文件管理類(NSFileManager)
1、1>管理文件 創建文件 移動 複製 刪除
2>判斷文件(目錄)是否存在
3>是否可以讀取 寫入
2、subpathsAtPath 得到指定目錄下的 子文件
3、初始化 文件管理類
NSFileManager *manager = [NSFileManager defaultManager];
4、創建文件與存儲路徑
NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:@“錄音文件"];
//創建文件
// createFileAtPath 指定創建文件的目錄
// contents 指定創建文件的內容
// attributes 文件的屬性
[manager createFileAtPath:path contents:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"begin.png" ofType:nil]] attributes:nil];
5、移動文件
1>源文件和目標文件
(1)目標目錄
NSString *newPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"目標文件"];
NSError *error;
BOOL s = [manager moveItemAtPath:path toPath:newPath error:&error];
if (s) {
NSLog(@"%@", newPath);
}else{
NSLog(@"%@", error);
}
6、複製文件
1> 複製 新舊文件 都存在
[manager copyItemAtPath:path toPath:newPath error:nil];
7、 刪除文件
[manager removeItemAtPath:newPath error:nil];
8、 判斷文件是否存在
if ([manager fileExistsAtPath:newPath] == YES) {
NSLog(@"文件 已存在");
}
9、 獲得目錄裏面的子文件
// 返回值是一個數組 裏面存的 所有子文件的名字
NSArray *allSubFile = [manager subpathsAtPath:newPath];
NSLog(@"%@", allSubFile);
}
五、視頻
1、播放視頻(本地視頻、網絡視頻)需要導入<MediaPlayer/MediaPlayer.h>系統框架
2、播放視頻的類 MPMoviePlayerController
3、iOS支持的視頻格式
.mp4、.mov、.m4v、.m2v、.3gp、.3g2
*****
4、1>要想能夠成功的播放視頻需要在播放視圖的view給它一個座標
2>需要添加在某個視圖上
//播放視頻步驟
5、1>加載視頻路徑
NSString *path = [[NSBundle mainBundle] pathForResource:@"05-圖片瀏覽器02-數組和字典的使用.mp4" ofType:nil];
2>初始化視頻類
MPMoviePlayerController *moviePlayer = [MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:path]];
3>設置moviePlayer.view的frame和添加在需要播放的視圖上
(1)moviePlayer.view.frame = self.view.frame;
(2)[self.view addSubview:moviePlayer.view];
6、MPMoviePlayerController的屬性
1>設置視頻顯示的控制樣式
moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
2>設置視頻是否循環播放
// MPMovieRepeatModeNone 不循環
// MPMovieRepeatModeOne 循環
moviePlayer.repeatMode = MPMovieRepeatModeNone;
3>是否允許分享到airPlay
moviePlayer.allowsAirPlay = YES;
NSLog(@"是否使用了 AirPlay %d", moviePlayer.airPlayVideoActive);
4>是否播放的是網絡視頻 是否需要 自動繼續播放
moviePlayer.shouldAutoplay = YES;
5>設置視頻全屏
moviePlayer.fullscreen = YES;
[moviePlayer setFullscreen:YES animated:YES];
6>視頻播放停止
[moviePlayer play];
[moviePlayer stop];
7>當前播放時間currentPlaybackTime
NSLog(@"當前播放時間:%f", moviePlayer.currentPlaybackTime);
7>獲得視頻加載狀態
//MPMovieLoadStateUnknown = 0, 未知的狀態
// MPMovieLoadStatePlayable = 1 << 0, 可以播放的狀態
//MPMovieLoadStatePlaythroughOK = 1 << 1,
// Playback will be automatically started in this state when shouldAutoplay is YES 如果使用了 shouldAutoplay = YES 又可以播放的 自動播放
// MPMovieLoadStateStalled = 1 << 2, 沒有網絡數據 可以播放的時候
moviePlayer.loadState
NSLog(@"視頻加載狀態:%lu", (unsigned long)moviePlayer.loadState);
6、可以通過通知來監測視頻播放的狀態
通知名字:MPMoviePlayerPlaybackStateDidChangeNotification
1> [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeState:)name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];
2>可以獲得 整個視頻播放的對象
MPMoviePlayerController *mp = not.object;
3>playbackState 只讀屬性 可以通過它 來獲取播放的狀態
// MPMoviePlaybackStateStopped, 停止
// MPMoviePlaybackStatePlaying, 播放
// MPMoviePlaybackStatePaused, 暫停
// MPMoviePlaybackStateInterrupted, 中斷
// MPMoviePlaybackStateSeekingForward, 快進
// MPMoviePlaybackStateSeekingBackward 快退
7、截取視屏
方法一:
1>通過MPMoviePlayerController 獲得截圖的方法
(1) MPMovieTimeOptionNearestKeyFrame, 獲得相對時間截圖
(2)MPMovieTimeOptionExact 獲得絕對時間的截圖
2>截圖方法
[moviePlayer requestThumbnailImagesAtTimes:@[@(1), @(5)] timeOption:MPMovieTimeOptionNearestKeyFrame];
方法二
1>使用AVAssetImageGenerator 獲得截圖
(1)需要導入<AVFoundation/AVFoundation.h>系統框架
(2)AVAsset 通過URL獲得視頻的資源
(3)AVAssetImageGenerator可以得到視頻裏面的圖片
(4)檢測截圖成功的通知名字
MPMoviePlayerThumbnailImageRequestDidFinishNotification
(5)可以獲得通知傳過來的圖片的key
MPMoviePlayerThumbnailImageKey
2>使用步驟
(1)通過URL獲得視頻的資源
AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:path]];
或通過AVURLAsset來獲得視頻資源
(2)初始化視頻資源圖片的持有者
AVAssetImageGenerator *generator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
(3)開始截圖
//(CMTime)包含了時間的值
//copyCGImageAtTime 拷貝哪個時間段的圖片
//CGImageRef 是圖片的數據 參數
CGImageRef ref = [generator copyCGImageAtTime:CMTimeMake(1,2) actualTime:nil error:nil];
//CGImageRef 轉換成UIImage
UIImage *image = [UIImage imageWithCGImage:ref];
self.view.backgroundColor = [UIColor colorWithPatternImage:image];