zoukankan      html  css  js  c++  java
  • 音频

    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; 
  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/starainDou/p/5639136.html
Copyright © 2011-2022 走看看