IOS音频开发

首先学习音频开发之前,必须了解音频的一些基础知识,比如文件格式与数据格式(编码格式),比特率,采样率,轨道,声道,FFT(傅里叶快速变化),频谱等。查了网上很多资料,到现在还是一知半解啊。。。擦擦擦。。。。
    接着我们要整体了解下ios为我们提供处理音频的基础技术:核心音频(core Audio)
   
有5个框架:
            1.Core Audio.framework
            2.AudioToolbox.framework
            3.AudioUnit.framework 
            4.AVFoundation.framework
            5.OpenAL.framework

      由于核心音频本身是一个很大的话题,涉及到很多领域的不同服务。因此,我们又将核心音频分割成较小的模块,方便我们去理解API以及框架

              1.AudioToolbox.framework:
           
             (1)   音频队列服务(Audio Queue service)
            (2)音频会话服务(Audio sessionservice)
            (3)音频文件服务(
              (4)音频文件流式服务
            (5)音频转化服务 
            (6)系统声音服务
            (7)扩展的音频文件服务

              2.AudioUnit.framework:音频单元服务
              3.OpenAL.framework: OpenAL
              4.AVFoundation.framework:(1)AVAudioPlayer(2)AVAudioRecorder(3)AVAudioSession
            5.CoreAudio:这个框架并不提供服务,仅提供其他框架可以使用的头文件和数据类型

一、音频播放
  详见链接: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
  6.音频单元服务
  7.系统声音播放
  

二、音频录制
   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 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString*documentsDirectoryPath = [dirs objectAtIndex:0];
    NSString*exportPath = [[documentsDirectoryPathstringByAppendingPathComponent: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:AVFileTypeCoreAudioFormat
                                                             error:&assetError]
                                 retain];
    if(assetError) {
       NSLog (@"error: %@", assetError);
       return;
    }

   3.创建音频输出会话
   AVAssetExportSession *exportSession = [AVAssetExportSessionexportSessionWithAsset:
songAsset
                                          presetName:AVAssetExportPresetAppleM4A];
   4.设置音频截取时间区域 (CMTime在CoreMedio框架中,所以要事先导入框架)
    CMTimestartTime = CMTimeMake([_startTime.text floatValue], 1);
    CMTimestopTime = CMTimeMake([_endTime.text floatValue], 1);
    CMTimeRangeexportTimeRange = CMTimeRangeFromTimeToTime(startTime,stopTime);
   5.设置音频输出会话并执行
   exportSession.outputURL = [NSURL fileURLWithPath:filePath];// output path
   exportSession.outputFileType = AVFileTypeAppleM4A; // output filetype
   exportSession.timeRange = exportTimeRange; // trim timerange
   [exportSessionexportAsynchronouslyWithCompletionHandler:^{
      
       if (AVAssetExportSessionStatusCompleted == exportSession.status){
           NSLog(@"AVAssetExportSessionStatusCompleted");
       } else if (AVAssetExportSessionStatusFailed ==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(@"AVAssetExportSessionStatusFailed");
       } else {
           NSLog(@"Export Session Status: %d", exportSession.status);
       }
    }];

总得来说:我们再APP的目录下创建了音频文件,然后创建了一个音频的AVAsset对象(AVAsset
代表一个抽象的媒体,包含标题,文件大小等等 ),接着创建一个AVAsset的输出会话 AVAssetExportSession,最后就是设置我们要剪切(截取)的时间区域 CMTimeRange,然后执行AVAssetExportSeesion的回调函数 exportAsynchronouslyWithCompletionHandler。

四、歌词同步

注:以上只是我的个人见解,如有什么错误,请大家见谅。。也是最近刚看的。我会持续跟新的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值