标签: audiounit

如何使用Swift在iOS中同时录制和播放音频?

在Objective-C中,同时录制和播放音频非常简单.互联网上有大量的示例代码.但我想在Swift中使用Audio Unit/Core Audio同时录制和播放音频.使用Swift有很多帮助和示例代码.我找不到任何可以说明如何实现这一目标的帮助.

我正在努力与波纹管代码.

let preferredIOBufferDuration = 0.005 
let kInputBus  = AudioUnitElement(1)
let kOutputBus = AudioUnitElement(0)

init() {
    // This is my Audio Unit settings code.
    var status: OSStatus

    do {
        try AVAudioSession.sharedInstance().setPreferredIOBufferDuration(preferredIOBufferDuration)
    } catch let error as NSError {
        print(error)
    }


    var desc: AudioComponentDescription = AudioComponentDescription()
    desc.componentType = kAudioUnitType_Output
    desc.componentSubType = kAudioUnitSubType_VoiceProcessingIO
    desc.componentFlags = 0
    desc.componentFlagsMask = 0
    desc.componentManufacturer = kAudioUnitManufacturer_Apple

    let inputComponent: AudioComponent = AudioComponentFindNext(nil, &desc)

    status = AudioComponentInstanceNew(inputComponent, &audioUnit)
    checkStatus(status)

    var flag = UInt32(1)
    status = AudioUnitSetProperty(audioUnit, …
Run Code Online (Sandbox Code Playgroud)

core-audio audiounit ios swift swift2

10
推荐指数
1
解决办法
1911
查看次数

不推荐使用'init()':在Swift 3中删除init().使用`nil`

我正在使用此代码.

var audioUnit:AudioUnit = AudioUnit()
Run Code Online (Sandbox Code Playgroud)

但是在Xcode 7.3(Swift 2.2)中,我收到了这个警告.知道为什么吗?我怎么能摆脱它呢?

NB我使用nil然后我的程序崩溃了.

截图

opaque-pointers audiounit ios swift swift2

10
推荐指数
1
解决办法
2491
查看次数

iOS音频单元:何时使用AUGraph是必要的?

我对iOS编程完全不熟悉(我更像是一个Android人......)并且必须构建一个处理音频DSP的应用程序.(我知道这不是接近iOS开发的最简单方法;))

该应用程序需要能够接受以下输入:

1-内置麦克风2- iPod库

然后可以将滤波器应用于输入声音,并将结果输出到:

1-扬声器2-录制到文件

我的问题如下:为了能够将多个过滤器应用于输入,或者通过处理具有不同渲染回调的样本可以应用这些不同的效果,是否必须使用AUGraph?

如果我使用AUGraph,我需要:每个输入1个音频单元,输出1个音频单元和每个效果/滤波器1个音频输入吗?

最后,如果我不这样做,我可能只有1个音频单元并重新配置它以选择源/目的地?

非常感谢您的回答!我迷失了这些东西......

ipod core-audio audiounit ios

9
推荐指数
1
解决办法
6418
查看次数

将CoreMIDI输入与AVAudioUnit一起使用

我正在努力实现一些看起来应该很简单的东西:在Mac应用程序中侦听MIDI消息,并使用它们来播放现有AVAudioUnit乐器的音符.

假设:我需要在与我的CoreMIDI客户端关联的MIDIReadBlock(通过MIDIInputPortCreateWithBlockMIDIClientRef)和我可以从我的AVAudioUnit的AUAudioUnit(via scheduleMIDIEventBlock)获得的AUScheduleMIDIEventBlock 之间建立一个桥梁.这似乎比它应该更复杂,因为我将使用原始MIDI数据 - 我觉得音频单元必须支持一些易于与CoreMIDI一起使用的MIDI抽象,但我找不到任何相关的例子这个的.也许有一种方法可以使用MIDIOutputPortCreateAV/AUAudioUnit?

我正在寻找的是一个将MIDI输入直接输入音频单元(理想情况下使用Swift 3)的工作示例,但如果您知道任何相对较新的相关资源,请分享这些链接.这些API的文档稀疏性非常令人沮丧.谢谢!

macos avfoundation audiounit coremidi swift

9
推荐指数
1
解决办法
309
查看次数

如何用iOS制作简单的EQ AudioUnit(低音,中音,高音)?

有谁知道如何用iOS制作一个简单的EQ音频单元(3个频段 - 低,中,高)?我知道如何在我的AU Graph中添加iPod EQ音频单元.但它只允许您访问预设,我需要适当控制EQ.

我四处寻找一些教程或解释,但没有运气.

谢谢.

安德烈

iphone signal-processing core-audio audiounit ios

8
推荐指数
3
解决办法
2万
查看次数

音频单元中的等功率交叉淡入淡出?

这实际上更像是一个理论问题,但在这里:

我正在开发一种效果音频单元,它需要在干信号和湿信号之间进行相等的功率交叉渐变.

但我对于从线性衰减器到干流和湿流信号幅度的比例因子(增益)的映射函数的正确方法感到困惑.

基本上,我看到它用cos/sin函数或平方根完成...基本上近似对数曲线.但是,如果我们对幅度的感知是开始时的对数,那么这些将推子位置映射到幅度的曲线实际上不应该是指数的吗?

这就是我的意思:

假设:

  • signal[i] 表示信号中的第i个样本.
  • 每个样本是一个范围为[-1,1]的浮点数,幅度在[0,1]之间.
  • 我们的GUI控件是一个NSSlider,范围从[0,1],所以它原则上是线性的.
  • fader 是具有NSSlider值的变量.

第一次观察: 我们以对数方式感知振幅.因此,如果我们有一个线性推子,只是通过这样做来调整信号的幅度:signal[i] * fader我们所感知的内容(听觉,无论数学如何)都是这样的:

在此输入图像描述

这就是所谓的蹩脚的推子效应:我们从静音变为滑块中最左边一段的剧烈音量增加,经过中间音量似乎没有那么响亮.

因此,为了使推子"正确",我们要么以dB尺度表示,然后,就信号而言,做:signal[i] * 10^(fader/20)或者,如果我们要保持[0,1]或推子单位,我们可以做:signal[i] * (.001*10^(3*fader))

无论哪种方式,我们从NSSlider到我们将在代码中使用的推子变量的新映射现在看起来像这样:

在此输入图像描述

这是我们真正想要的,因为由于我们以对数方式感知振幅,我们基本上从线性(NSSLider范围0-1)映射到指数,并将这个指数输出馈送到我们的对数感知.事实证明:log(10^x)=x所以我们最终以线性(也就是正确的)方式感知幅度变化.

大.

现在,我的想法是两个信号之间的等功率交叉淡化(在这种情况下是干/湿水平NSSlider将输入混合到AU和来自它的处理输出)基本上只相同,只有一个滑块作用于两个假设信号都干[i]和湿[i].

因此,如果我的滑块范围从0到100并且干完全左,而湿是完全右,我最终会得到以下代码:

Float32 outputSample, wetSample, drySample = <assume proper initialization>
Float32 mixLevel = .01 * GetParameter(kParameterTypeMixLevel);
Float32 wetPowerLevel = .001 * pow(10, (mixLevel*3)); 
Float32 dryPowerLevel = .001 * pow(10, ((-3*mixLevel)+1));
outputSample = (wetSample * wetPowerLevel) + (drySample * dryPowerLevel);
Run Code Online (Sandbox Code Playgroud)

其图表将是:

在此输入图像描述

和以前一样,因为我们以对数方式感知振幅,这种指数映射实际上应该使我们听到交叉渐变是线性的.

但是,我已经看到使用近似值来记录交叉淡化的实现.意思是:

在此输入图像描述

但这些曲线实际上不会强调我们对振幅的对数感知吗?

audio macos core-audio audiounit

8
推荐指数
1
解决办法
2361
查看次数

iOS:静音右声道音量

除了我控制的音频流之外,我正试图将所有音频的右声道静音.

我正在使用一些图书馆播放音频,包括用于文本到语音的OpenEars,我希望他们所有人只播放左耳机扬声器,而我在右扬声器播放其他内容.

我知道如何播放正确的扬声器创建音频单元流,但我不是为其他库创建音频流.有没有办法更改默认音频通道?或者是否可以创建一个努力或混音器,应用于所有音频输出,使正确的频道静音?

任何帮助/提示将不胜感激.

audiounit ios

8
推荐指数
1
解决办法
805
查看次数

在AV中将AVSpeechSynthesizer路由到AU主机

是否可以获取/保存/路由AVSpeechSynthesizer的输出,以便可以将其作为音频进行操作,以便我可以对音频(kAudioUnitSubType_Reverb2)运行音频处理然后播放它?

audio audiounit ios7 avspeechsynthesizer

8
推荐指数
0
解决办法
287
查看次数

CoreAudio崩溃 - AVAudioIONodeImpl.mm:365:_GetHWFormat:必需条件为false:hwFormat

我正在使用两个应用程序模块:

1)具有此audioSession设置的录制模块:

try audioSession.setCategory(AVAudioSessionCategoryRecord)
try audioSession.setMode(AVAudioSessionModeMeasurement)
try audioSession.setPreferredIOBufferDuration(0.05)
try self.audioSession.setActive(true)
Run Code Online (Sandbox Code Playgroud)

2)具有此audioSession设置的录制模块:

try audioSession.setCategory(AVAudioSessionCategoryPlayback) 
try audioSession.setMode(AVAudioSessionModeDefault)
try self.audioSession.setActive(true)
Run Code Online (Sandbox Code Playgroud)

对于从1-> 2和2-1的每个段落,我有一个 try self.audioSession.setActive(false)

如果我从1)模块传递到2)或重做1)一切正常.比起2)我来1)我得到这个错误try self.audioSession.setActive(true)

这是错误:

ERROR:    [0x16e10b000] >avae> AVAudioIONodeImpl.mm:365: 
_GetHWFormat: required condition is false: hwFormat
Run Code Online (Sandbox Code Playgroud)

这个错误与什么有关?我无法找到Apple iOS文档的任何帮助来了解问题所在.

有人有任何提示吗?

core-audio audiounit ios avaudiosession audiokit

8
推荐指数
1
解决办法
1693
查看次数

适用于iOS的AudioUnit Echo取消内置功能

目前我正在开发一款使用iPad麦克风捕捉声音的iOS应用程序.同时,通过iPad扬声器播放声音.由于目标是处理隔离的输入声音,因此应删除(取消)扬声器反馈.我查找了一些与AudioToolbox可能性相关的文档.我发现AudioUnit可以执行回声消除等内置功能.但是,我没有设法正确配置我的音频图表以获得成功的性能.

我将不胜感激任何建议,示例代码,教程参考或推荐的参考书目.

非常感谢你,

普约尔

audiounit ios echo-cancellation

7
推荐指数
0
解决办法
5065
查看次数