- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试使用适用于 iOS 的 Core Audio 构建一个非常简单的音频效果链。到目前为止,我已经实现了一个 EQ - Compression - Limiter 链,它在模拟器中工作得很好。但是在设备上,由于输入和输出硬件格式明显不匹配,应用程序在将节点连接到 AVAudioEngine 时崩溃。
'com.apple.coreaudio.avfaudio', reason: 'required condition is false:
IsFormatSampleRateAndChannelCountValid(outputHWFormat)'
举个基本的例子,我的Audio Graph如下。
Mic -> Limiter -> Main Mixer (and Output)
图表使用
填充engine.connect(engine.inputNode!, to: limiter, format: engine.inputNode!.outputFormatForBus(0))
engine.connect(limiter, to: engine.mainMixerNode, format: engine.inputNode!.outputFormatForBus(0))
因上述异常而崩溃。如果我在连接到混音器时改为使用限制器的格式
engine.connect(engine.inputNode!, to: limiter, format: engine.inputNode!.outputFormatForBus(0))
engine.connect(limiter, to: engine.mainMixerNode, format: limiter.outputFormatForBus(0))
应用程序因kAudioUnitErr_FormatNotSupported错误而崩溃
'com.apple.coreaudio.avfaudio', reason: 'error -10868'
在连接引擎中的音频节点之前,inputNode 有 1 个 channel 和 44.100Hz 的采样率,而 outputNode 有 0 个 channel 和 0Hz 的采样率(使用 outputFormatForBus(0) 推导)属性(property))。但这可能是因为还没有节点连接到输出混音器?在 AVAudioSession 上设置首选采样率没有任何区别。
我在这里缺少什么吗?我有麦克风访问权限(使用 AVAudioSession.sharedInstance().recordPermission() 验证),并且我已将 AVAudioSession 模式设置为录制(AVAudioSession.sharedInstance() .setCategory(AVAudioSessionCategoryRecord)).
限制器是一个AVAudioUnitEffect,初始化如下:
let limiter = AVAudioUnitEffect( audioComponentDescription:
AudioComponentDescription(
componentType: kAudioUnitType_Effect,
componentSubType: kAudioUnitSubType_PeakLimiter,
componentManufacturer: kAudioUnitManufacturer_Apple,
componentFlags: 0,
componentFlagsMask: 0) )
engine.attachNode(limiter)
engine 是一个全局类变量
var engine = AVAudioEngine()
正如我所说,使用模拟器(和 Mac 的默认硬件)可以完美运行,但在 iOS8 和 iOS9 上的各种 iPad 上不断崩溃。我有一个 super 基本的例子,它简单地将麦克风输入馈送到播放器到输出混音器
do {
file = try AVAudioFile(forWriting: NSURL.URLToDocumentsFolderForName(name: "test", WithType type: "caf")!, settings: engine.inputNode!.outputFormatForBus(0).settings)
} catch {}
engine.connect(player, to: engine.mainMixerNode, format: file.processingFormat)
这里的 inputNode 有 1 个 channel 和 44.100Hz 采样率,而 outputNode 有 2 个 channel 和 44.100Hz 采样率,但似乎没有发生不匹配。因此,问题一定是 AVAudioUnitEffect 连接到输出混音器的方式。
如有任何帮助,我们将不胜感激。
最佳答案
这取决于您共享的代码之外的一些因素,但您可能使用了错误的 AVAudioSession 类别。
我在一些略有不同的情况下遇到了同样的问题。当我使用 AVAudioSessionCategoryRecord 作为 AVAudioSession 类别时,我在尝试连接音频分路器时遇到了同样的问题。我不仅收到了那个错误,而且我的 AVAudioEngine inputNode 显示了一个 0.0 采样率的 outputFormat。
将其更改为 AVAudioSessionCategoryPlayAndRecord 我收到了预期的 44.100Hz 采样率并且问题已解决。
关于ios - 匹配 AVAudioEngine 的输入和输出硬件设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35011702/
我正在尝试动态修改附加到 AVAudioEngine 的节点图,但该图在每次重新连接后输出静音。 在下面的示例中,我想将 player 动态连接到 engine.mainMixerNode,但是每当我
我正在尝试使用 AVAudioEngine 播放 AVAudioFile。代码大部分取自苹果开发者在线视频,但没有回放。花了一些时间浏览论坛,但似乎没有任何线索。 我有两种方法。第一个调用标准的打开文
我的应用程序动态添加和删除为 mainMixerNode 提供数据的节点。发生这种情况时,我会听到咔哒声或爆裂声,因为音量并未减弱。 建立连接时如何实现平滑过渡?我是否需要在 AudioUnit 中自
我正在尝试查找有关如何使用 AVAudioEngine 的详细文档。有谁知道我在哪里可以找到它? 我找到了这个,但与文档丰富的 UI 内容相比,它似乎非常简陋。 https://developer.a
这里是第一个 stackoverflow 问题,所以请多多包涵!在为 MacOS 设计更大的音频程序的过程中,我试图创建一个测试应用程序,它可以简单地从任何系统音频输入中获取音频并将其发送到任何输出。
我正在用 Swift 编写一个 iOS 应用程序,该应用程序正在录制用户的声音,然后可以使用一些语音效果进行播放,但问题是使用内置 iPhone 麦克风时播放非常安静。带耳机就没问题。 录制代码: l
我正在使用 AVAudioEngine 进行测量。我从界面中播放刺激声音,并使用 micTap 记录返回的信号。 我现在正在研究支持多种不同格式的不同音频接口(interface)。我通过混合器转换
我成功地将 AVAudioPlayer 节点附加到我的 AVAudioEngine。但是,我需要稍后检查这些节点是否已附加到它(因此我不会重新添加它们)。 引擎上是否有任何特定属性可供我检查以查看其是
简单的问题。如何使用 AVAudioEngine 播放多声道音频文件(> 2 声道),以便我可以听到默认 2 声道输出(耳机/扬声器)上的所有声道。以下代码(去除了用于呈现的错误检查)播放文件的前两个
我正在创建一个基本的音板应用程序。我有两个开关。一种在激活时将使音频变慢且音调更低,另一种则使其变得更快和更高。我有一个 if else if if 语句,它查看这些开关,然后相应地播放音频,但是当我
我正在开发一键通功能,发送者可以将字节数组形式的音频发送到服务器,接收者可以通过套接字连接实时收听它。 当我尝试使用 AVAudioEngine 在接收端播放视频时,它不起作用。 let bu
我正在尝试制作音频处理应用程序。有没有办法使用 AVAudioEngine 将音频效果应用于音频文件? 最佳答案 是的,你当然可以,你可以使用: AVAudioPlayerNode AVAudioUn
我正在尝试设置一个 AudioQueue 以从 iPhone 上的麦克风传输音频。 我创建我的音频引擎: var audioEngine = AVAudioEngine() 还有我的音频队列:
我正在使用一个 AVAudioEngine 对象,它附有许多 AVAudioPlayerNodes。音频一切正常,除了它会停止 iPhone 在后台播放的任何音频(即来自 iTunes 或其他音乐应用
我正在设置一个 AVAudioEngine 实现以从麦克风获取音频并将其流式传输到 websocket 连接。首先,我已经点击了麦克风输入和一个中间混音器,该混音器将麦克风的音频从 44khz 下采样
在我下面的代码中,我创建了两个声音,sound1 和 sound2。每个声音都包含多个样本,允许同时播放相同的声音。问题是,如果我创建看似超过 6 到 8 个 AVAudioPlayerNode,每个
我已经设置了我的音频引擎并连接了几个节点,以便制作如下所示的音频图: // //AVAudioPlayerNode --> AVAudioMixerNode --> AVAudioUnitVarisp
我正在使用 AVAudioPlayerNode 播放歌曲,我正在尝试使用 UISlider 来控制它的时间,但我无法弄清楚如何使用 AVAUdioEngine. 最佳答案 经过反复试验,我想我终于弄明
我在对从麦克风获取的音频进行下采样时遇到问题。我正在使用 AVAudioEngine 通过以下代码从麦克风中采集样本: assert(self.engine.inputNode != nil) let
我正在尝试运行来自 their website here 的 Apple SpeakToMe:将语音识别与 AVAudioEngine 结合使用示例.我的问题是,当您停止 AVAudioEngine
我是一名优秀的程序员,十分优秀!