AudioKit 主要功能介绍

类似的音频库还有soundtouch,其中提供了 pitch、rate、tempo等来控制变速还是变调。

使用:
github上下载好之后,运行framework中的build_frameworks.sh(把文件移入终端)
之后会生成不同的framework文件,拖入项目中即可使用
xcode项目中的linker flags为 -lc++

Module compiled with Swift 4.1.2 cannot be imported by the Swift 4.2 compile
这是因为之前导入库的时候用的是4.1,而重新install只会去找podfile.lock中没有的库,所以还是原来的版本,因此用pod update 库名 就可以进行更新,不加名称就更新每一个

podfile.lock会锁定版本,不管有没有新的,install只安装lock中规定的,因此提交的时候最好把这个提交上去

notenum是速度,会变速也会变调 有些文件对应一个notenum 对于单一文件不能改变notenum
velocity是力度,越大声音越响
音符不再以频率的方式提供,而是以 MIDINoteNumber 类型提供。如果你按住 Command 键并点击左鼠键,查看它的定义,你会看到它只是一个整型:
public typealias MIDINoteNumber = Int
MIDI 标准全称是 Musical Instrument Digital Interface(乐器数字接口),它在乐器间进行通讯时广泛使用。 音符数字和标准键盘上的音符一一对应。play 方法的第二个参数 velocity 是另一个 MIDI 属性,用于描述一个音符的敲击力度。值越小表明敲击得越轻,会发出一个更小的声音。

//震荡子 是AKNode子类 node是构成你的音频序列的主要元素 一个振荡子会创建一个重复的、或者周期性的无限延续的信号。

let oscillator = AKOscillator()

有两个参数决定了振荡器发出的声音是什么样子:振幅,它是正弦波的高度并决定声音的大小,以及频率,它决定了音高。

oscillator.frequency = 300  频率(音高)
oscillator.amplitude = 0.5    振幅(音量)

倾听一会,你会发现现在的音量只是刚才的一半,而且音高也比刚才底了。频率单位为赫兹(即每秒周期数),决定了音符的音高。而振幅,范围从 0-1 ,决定了音量。

oscillator.rampDuration = 0.2 
oscillator.frequency = 500 
AKPlaygroundLoop(every: 0.5) { 
oscillator.frequency = 
       oscillator.frequency == 500 ? 100 : 500 
}

rampDuration(以前是time) 属性允许振荡器在属性值之间平滑过渡(比如频率或振幅)。AKPlaygroundLoop 是一个很有用的实用函数,允许周期性地执行 Playground 中的代码。在这里,你简单滴每 0.5 秒就切换一次振荡器的频率,从 500Hz 到 100 Hz。

ADSR

当乐器演奏出一个音符时,振幅(或音量)是会变化的,并且每个乐器都不相同。有一个能够模拟这个效果的模型,叫做 Attack-Decay-Sustain-Release (ADSR) 封皮:


ADSR

Attack 上升: 在这个阶段声音上行至最大音量。
Decay 下行: 这个时候声音下滑到 Sustain 水平。
Sustain 维持: 这个阶段声音会维持在退败终止时的音量,一直到开始松开。
Release 松开: 这个阶段音量开始下滑到 0。
一台钢琴,当琴弦被木锤敲击,会发出一个非常短促的上升音然后迅速下降。一把小提琴则会发出比较长的上升、下行和维持,因为演奏时琴弓不会离开琴弦。
通过修改ADSR的值,可以模拟不同乐器的效果。

Additive Sound Synthesis(加法合成)

let frequencies = (1...5).map { $0 * 261.63 }

这里用了一个 Range 操作来创建一个从 1 到 5 的序列。然后对这个序列进行 map 操作,将每个数字乘以 261.63。这个数字是标注键盘上的中音 C 的音频。将其他数字乘以这个值,这就是“和声”。
//再次进行一个 map 操作,以创建多个振荡器。

let oscillators = frequencies.map {
    createAndStartOscillator(frequency: $0)
}
let mixer = AKMixer()
oscillators.forEach { mixer.connect($0) }

AKMixer类是AudioKit的另一种节点.
它将 1 个或多个节点作为输出并将它们合成在一起。
后来发现要在AudioKit.start之后start才行,否则没有声音。

Polyphony(复音)

let bank = AKOscillatorBank()
AudioKit.output = bank
try? AudioKit.start()
let keyboard = AKKeyboardView()
keyboard.frame = CGRect(x: 0, y: 100, width: 440, height: 100)
keyboard.delegate = self
//复音模式   可以同时按多个键
keyboard.polyphonicMode = true

self.view.addSubview(keyboard)

然后实现代理方法noteon和off

Sample(取样)

位深 bit 一般16位 *6 能96分贝范围的声音
取样率 HZ 一般44100 原频率的两倍 能表现/2 22050 人耳是20-20000hz 根据奈奎斯特的理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音还原

let bitcrusher = AKBitCrusher(player!)
//位深 一般16位(二进制数)  越低音质越低
bitcrusher.bitDepth = 16
//取样率 HZ 一般44100可以表现/2 22050  人耳是20-20000
bitcrusher.sampleRate = 40000

延迟效果

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

推荐阅读更多精彩内容