• 音频


    iOS音频的基础

    接着我们要整体了解下iOS为我们提供处理音频的基础技术,核心音频(Core Audio)。

    Core Audio 是iOS和 MAC 的关于数字音频处理的基础,它提供应用程序用来处理音频的一组软件框架,所有关于IOS音频开发的接口都是由Core Audio来提供或者经过它提供的接口来进行封装的,按照官方的说法是集播放,音频处理录制为一体的专业技术,通过它我们的程序可以同时录制,播放一个或者多个音频流,自动适应耳机,蓝牙耳机等硬件,响应各种电话中断,静音,震动等,甚至提供3D效果的音乐播放。

    Core Audio有5个框架:1.Core Audio.framework,2.AudioToolbox.framework,3.AudioUnit.framework ,4.AVFoundation.framework,5.OpenAL.framework。

    Core Audio.framework并不提供服务,仅提供其他框架可以使用的头文件和数据类型。这其中AVFoundation 框架 (AVFoundation.framework)提供一组播放、记录和管理声音和视频内容的Objective-C类,因此下面我就简单介绍一下他就可以了。

    AVFoundation的录音和播放

    音频的录制与播放主要和三个类有关AVAudioSession,AVAudioRecorder,AVAudioPlayer。

    AVAudioSession

    AVAudioSession类由AVFoundation框架引入,每个iOS应用都有一个音频会话,这个会话可以被AVAudioSession类的sharedInstance类方法访问,如下:
    1

    AVAudioSession *audioSession = [AVAudioSession sharedInstance];

    在获得一个AVAudioSession类的实例后,你就能通过调用音频会话对象的setCategory:error:实例方法,来从IOS应用可用的不同类别中作出选择。

    AVAudioRecorder

    在使用AVAudioRecorder进行音频录制的时候,需要设置一些参数,下面就是参数的说明,并且写下了音频录制的代码:

    1. //音频开始录制 
    2. - (void)startRecordWithFilePath:(NSString *)path{ 
    3. [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error:nil]; 
    4. [[AVAudioSession sharedInstance] setActive:YES error:nil]; 
    5. /** 
    6. AVFormatIDKey 音乐格式,这里采用PCM格式 
    7. AVSampleRateKey 采样率 
    8. AVNumberOfChannelsKey 音乐通道数 
    9. AVLinearPCMBitDepthKey,采样位数 默认 16 
    10. AVLinearPCMIsFloatKey,采样信号是整数还是浮点数 
    11. AVLinearPCMIsBigEndianKey,大端还是小端 是内存的组织方式 
    12. AVEncoderAudioQualityKey,音频编码质量 
    13.  
    14. */ 
    15. NSDictionary *recordSetting = @{ 
    16. AVFormatIDKey : @(kAudioFormatLinearPCM), 
    17. AVSampleRateKey : @(8000.f), 
    18. AVNumberOfChannelsKey : @(1), 
    19. AVLinearPCMBitDepthKey : @(16), 
    20. AVLinearPCMIsNonInterleaved : @NO, 
    21. AVLinearPCMIsFloatKey : @NO, 
    22. AVLinearPCMIsBigEndianKey : @NO 
    23. }; 
    24. //初始化录音 
    25. self.recorder = [[AVAudioRecorder alloc]initWithURL:[NSURL URLWithString:path] 
    26. settings:recordSetting 
    27. error:nil]; 
    28. _recorder.delegate = self; 
    29. _recorder.meteringEnabled = YES; 
    30.  
    31. [_recorder prepareToRecord]; 
    32. [_recorder record]; 
    33. //音频停止录制 
    34. - (void)stopRecord 
    35.  
    36. [self.recorder stop]; 
    37. self.recorder = nil; 
    38.  

    AVAudioPlayer

    AVAudioPlayer类是音频播放的类,一个AVAudioPlayer只能播放一个音频,如果你想混音你可以创建多个AVAudioPlayer实例,每个相当于混音板上的一个轨道,下面就是音频播放的方法。

    1. //音频开始播放 
    2. - (void)startPlayAudioFile:(NSString *)fileName{ 
    3. //初始化播放器 
    4. player = [[AVAudioPlayer alloc]init]; 
    5.  
    6. player = [player initWithContentsOfURL:[NSURL URLWithString:fileName] error:nil]; 
    7. self.player.delegate = self; 
    8. [player play]; 
    9. //音频停止播放 
    10. - (void)stopPlay{ 
    11. if (self.player) { 
    12. [self.player stop]; 
    13. self.player.delegate = nil; 
    14. self.player = nil; 

    转码

    上面我们用iOS录制了一个音频文件,并且录制成了wav格式,然而现在的情况确实安卓不支持wav格式,并且苹果的格式安卓全不支持,看好是全不,不是全部,反过来安卓的格式,苹果基本也不支持。

    这里可以让服务器去转码,不过服务器的压力会增加,这里我们可以让客户端进行转码。amr格式的音频文件是安卓系统中默认的录音文件,也算是安卓支持的很方便的音频文件,这里就把iOS录制的wav文件转成amr,我们采用的是libopencore框架。

    关于libopencore,Jeans有对它进行了一个比较好的Demo,大家可以参考他的Demo,iOS音频格式AMR和WAV互转(支持64位)。

      1. //转换amr到wav 
      2. + (int)ConvertAmrToWav:(NSString *)aAmrPath wavSavePath:(NSString *)aSavePath{ 
      3.  
      4. if (! DecodeAMRFileToWAVEFile([aAmrPath cStringUsingEncoding:NSASCIIStringEncoding], [aSavePath cStringUsingEncoding:NSASCIIStringEncoding])) 
      5. return 0; 
      6.  
      7. return 1; 
      8. //转换wav到amr 
      9. + (int)ConvertWavToAmr:(NSString *)aWavPath amrSavePath:(NSString *)aSavePath{ 
      10.  
      11. if (! EncodeWAVEFileToAMRFile([aWavPath cStringUsingEncoding:NSASCIIStringEncoding], [aSavePath cStringUsingEncoding:NSASCIIStringEncoding], 1, 16)) 
      12. return 0; 
      13.  
      14. return 1; 
  • 相关阅读:
    cogs 1272. [AHOI2009] 行星序列
    1027. 打印沙漏(20)
    1026. 程序运行时间(15)
    1023. 组个最小数 (20)
    《C语言程序设计(第四版)》阅读心得(四 文件操作)
    1022. D进制的A+B (20)
    1021. 个位数统计 (15)
    1020. 月饼 (25)
    1015. 德才论 (25)
    1009. 说反话 (20)
  • 原文地址:https://www.cnblogs.com/starainDou/p/5639136.html
Copyright © 2020-2023  润新知