有5个框架:
1.Core Audio.framework
(2)音频会话服务(Audio sessionservice)
(4)音频文件流式服务
(5)音频转化服务
一、音频播放
详见链接:http://www.cnblogs.com/jqyp/archive/2012/02/11/2346869.html
1.AVAudioPlayer
(1)在AVFoundation.framework框架中
(2)属性
(3)方法
(4)如何使用
2.音频服务(
System SoundServices
)
3.音频队列(Audio QueueServices)
4.OpenAL
5.MPMusciPlayController
二、音频录制
1.AVAuidoRecorder
2.
Audio Queue Services
三、音频剪切(截取)
1.创建AVURLAsset对象(继承了AVAsset)
NSString *path = [[NSBundlemainBundle] pathForResource:@"陈奕迅 - 想哭" ofType:@"mp3"];
NSURL *songURL = [NSURLfileURLWithPath:path];
AVURLAsset *songAsset =[AVURLAsset URLAssetWithURL:songURL options:nil];
2.创建音频文件
NSArray*dirs = NSSearchPathForDirectori esInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString*documentsDirectoryPath = [dirs objectAtIndex:0];
NSString*exportPath = [[documentsDirectoryPathstringByAppendingPathCom ponent:EXPORT_NAME]retain];//
EXPORT_NAME为导出音频文件名
if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath]){
[[NSFileManager defaultManager] removeItemAtPath:exportPatherror:nil];
}
NSURL*exportURL = [NSURL fileURLWithPath:exportPath];
AVAssetWriter *assetWriter = [[AVAssetWriterassetWriterWithURL:exportURL
fileType:AVFileTypeCoreAudioForma t
error:&assetError]
retain];
if(assetError) {
NSLog (@"error: %@", assetError);
return;
}
3.创建音频输出会话
AVAssetExportSession *exportSession = [AVAssetExportSessionexportSessionWithAsset:
songAsset
presetName:AVAssetExportPresetApple M4A];
4.设置音频截取时间区域 (CMTime在CoreMedio框架中,所以要事先导入框架)
CMTimestartTime = CMTimeMake([_startTime.text floatValue], 1);
CMTimestopTime = CMTimeMake([_endTime.text floatValue], 1);
CMTimeRangeexportTimeRange = CMTimeRangeFromTimeToTim e(startTime,stopTime);
5.设置音频输出会话并执行
exportSession.outputURL = [NSURL fileURLWithPath:filePath];// output path
exportSession.outputFileType = AVFileTypeAppleM4A; // output filetype
exportSession.timeRange = exportTimeRange; // trim timerange
[exportSessionexportAsynchronouslyWith CompletionHandler:^{
if (AVAssetExportSessionStat usCompleted == exportSession.status){
NSLog(@"AVAssetExportSessionStat usCompleted");
} else if (AVAssetExportSessionStat usFailed ==exportSession.status) {
// a failure may happen because of an event out of yourcontrol
// for example, an interruption like a phone call comming in
// make sure and handle this case appropriately
NSLog(@"AVAssetExportSessionStat usFailed");
} else {
NSLog(@"Export Session Status: %d", exportSession.status);
}
}];
总得来说:我们再APP的目录下创建了音频文件,然后创建了一个音频的AVAsset对象(AVAsset CompletionHandler。
四、歌词同步
注:以上只是我的个人见解,如有什么错误,请大家见谅。。也是最近刚看的。我会持续跟新的。
总得来说:我们再APP的目录下创建了音频文件,然后创建了一个音频的AVAsset对象(AVAsset
代表一个抽象的媒体,包含标题,文件大小等等
),接着创建一个AVAsset的输出会话
AVAssetExportSession,最后就是设置我们要剪切(截取)的时间区域
CMTimeRange,然后执行AVAssetExportSeesion的回调函数
exportAsynchronouslyWith四、歌词同步
注:以上只是我的个人见解,如有什么错误,请大家见谅。。也是最近刚看的。我会持续跟新的。