音频 (一) : 音频基础知识

音频基础知识

组成
音频文件的组成:文件格式(或者音频容器) + 数据格式(或者音频编码)。

文件格式(或音频容器)是用于形容文件本身的格式。

我们可以通过多种不同的方法为真正的音频数据编码。例如CAF文件便是一种文件格式,它能够包含MP3格式,线性PCM以及其它数据格式的音频。

数据格式(或音频编码)

我们将从音频编码开始阐述(而不是文件格式),因为编码是最重要的环节。

线性PCM:

这是表示线性脉冲编码调制,主要是描写用于将模拟声音数据转换成数字格式的技术。简单地说也就是未压缩的数据。因为数据是未压缩的,所以我们便可以最快速地播放出音频,而如果空间不是问题的话这便是iPhone音频的优先代码选择。

音频文件计算大小

声卡对声音的处理质量可以用三个基本参数来衡量,即采样频率、采样位数和声道数。

采样频率:

是指单位时间内的采样次数。采样频率越大,采样点之间的间隔就越小,数字化后得到的声音就越逼真,但相应的数据量就越大。声卡一般提供11.025kHz、22.05kHz和44.1kHz等不同的采样频率。

采样位数:
是记录每次采样值数值大小的位数。采样位数通常有8bits或16bits两种,采样位数越大,所能记录声音的变化度就越细腻,相应的数据量就越大。

声道数
是指处理的声音是单声道还是立体声。单声道在声音处理过程中只有单数据流,而立体声则需要左、右声道的两个数据流。显然,立体声的效果要好,但相应的数据量要比单声道的数据量加倍。

声音数据量的计算公式为:
数据量(字节/秒)= (采样频率(Hz)× 采样位数(bit)× 声道数)/ 8
单声道的声道数为1,立体声的声道数为2。

【例1】请计算对于5分钟双声道、16位采样位数、44.1kHz采样频率声音的不压缩数据量是多少?

根据公式:数据量=(采样频率×采样位数×声道数×时间)/8

得,数据量(MB)=[44.1×1000×16×2×(5×60)] /(8×1024×1024)=50.47MB

计算时要注意几个单位的换算细节:

时间单位换算:1分=60秒

采样频率单位换算:1kHz=1000Hz

数据量单位换算:1MB=1024×1024=1048576B

【例2】请计算对于双声道立体声、采样频率为44.1kHz、采样位数为16位的激光唱盘(CD-A),用一个650MB的CD-ROM可存放多长时间的音乐?

已知音频文件大小的计算公式如下:

文件的字节数/每秒=采样频率(Hz)X采样位数(位)X声道数/8

根据上面的公式计算一秒钟时间内的不压缩数据量:(44.1×1000×16×2)/8=0.168MB/s

那么,一个650MB的CD-ROM可存放的时间为:(650/0.168)/(60×60)=1.07小时。

学习之前必须了解一些音频框架之类的东西,比如文件格式与数据格式(编码格式),比特率,采样率,轨道,声道,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 session service)

(3)音频文件服务
(4)音频文件流式服务
(5)音频转化服务

(6)系统声音服务 (7)扩展的音频文件服务

2.AudioUnit.framework:音频单元服务

3.OpenAL.framework:
OpenAL

4.AVFoundation.framework:
(1)AVAudioPlayer(2)AVAudioRecorder(3)AVAudioSession

5.CoreAudio:这个框架并不提供服务,仅提供其他框架可以使用的头文件和数据类型

一、音频播放

1.AVAudioPlayer

(1)在AVFoundation.framework框架中

(2)属性

(3)方法

(4)如何使用

2.音频服务(System
Sound Services)

3.音频队列(Audio
Queue Services)

4.OpenAL

5.MPMusciPlayController

6.音频单元服务

7.系统声音播放等

二、音频录制

1.AVAuidoRecorder

2.Audio
Queue Services等

三、音频剪切(截取)

NSString*path = [[NSBundle mainBundle] pathForResource:@"陈奕迅 - 想哭" ofType:@"mp3"];

NSURL *songURL =[NSURL fileURLWithPath:path];

AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:songURL options:nil];

2.创建音频文件

NSArray *dirs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

NSString *documentsDirectoryPath = [dirs objectAtIndex:0];

NSString *exportPath = [[documentsDirectoryPath
stringByAppendingPathComponent:EXPORT_NAME] retain];EXPORT_NAME为导出音频文件名

if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath]) {

[[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil];

}

NSURL *exportURL = [NSURL fileURLWithPath:exportPath];

AVAssetWriter *assetWriter = [[AVAssetWriter assetWriterWithURL:exportURL
      
      fileType:AVFileTypeCoreAudioFormat
                     
        error:&assetError]
                     
  retain];

if (assetError) {

    NSLog (@"error: %@", assetError);

    return;

}

3.创建音频输出会话

AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:songAsset                                                           presetName:AVAssetExportPresetAppleM4A];

4.设置音频截取时间区域 (CMTime在Core Medio框架中,所以要事先导入框架)

CMTime startTime = CMTimeMake([_startTime.text floatValue], 1);
CMTime stopTime = CMTimeMake([_endTime.text floatValue], 1);
CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTime, stopTime);

5.设置音频输出会话并执行

exportSession.outputURL = [NSURL fileURLWithPath:filePath]; // output path

exportSession.outputFileType = AVFileTypeAppleM4A; // output file type

exportSession.timeRange = exportTimeRange; // trim time range

[exportSession exportAsynchronouslyWithCompletionHandler:^{

   if (AVAssetExportSessionStatusCompleted == exportSession.status) {

        NSLog(@"AVAssetExportSessionStatusCompleted");

    }else if (AVAssetExportSessionStatusFailed == exportSession.status) {

         a failure may happen because of an event out
of your control

         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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容