问题标签 [audiounit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - 帮助在 iPhone 上实时更新声音
我的问题有点棘手,而且我并不完全有经验(我可能会弄错一些术语),所以就这样吧。我声明了一个名为“Singer”的对象的实例。该实例称为“singer1”。“singer1”产生一个音频信号。现在,以下是确定音频信号细节的代码:
}
其中 99% 是借来的代码,所以我对它的工作原理只有一个基本的了解(我不知道 OSStatus 类或方法或其他什么。但是,你会看到这 4 行代码分别为 600、400、200 和100?那些决定了频率。现在,我想做的(现在)是在其中插入我自己的变量来代替常数,我可以随心所欲地改变它。这个变量称为“fr1”。 fr1" 是在头文件中声明的,但是如果我尝试编译,我会收到关于 "fr1" 未声明的错误。目前,我解决此问题的技术如下:在我 #import 东西的下方,我添加了该行
这种工作,因为代码将编译,如果我告诉它,singer1.fr1 实际上会改变值。现在的问题是这样的:A)即使编译并且指定的音调会播放(0.0 是没有音调),我收到警告“数据定义没有类型或存储类”和“类型默认为'int'在声明'fr1'”。我敢打赌这是因为由于某种原因它没有在头文件中看到我之前的声明(作为浮点数)。但是,同样,如果我忽略这一行,代码将无法编译,因为“fr1 未声明”。B)仅仅因为我改变了 fr1 的值并不意味着歌手 1 将更新存储在“playbackcallback”变量或任何负责更新输出缓冲区的值。也许这可以通过不同的编码来解决?C)即使这确实有效,在暂停/播放音频时仍然存在明显的“间隙”,我需要消除它。这可能意味着对代码进行彻底检查,以便我可以“动态”插入新值而不会破坏任何内容。但是,我之所以努力发布所有这些努力是因为这种方法完全符合我的要求(我可以用数学方法计算一个值,然后它直接进入 DAC,这意味着我将来可以使用它来制作三角形,方等容易波浪)。我已将 Singer.h 和 .m 上传到 pastebin 以供您查看,也许它们会有所帮助。抱歉,我不能发布 2 个 HTML 标签,所以这里是完整链接。(http://pastebin.com/ewhKW2Tk) (http://pastebin.com/CNAT4gFv) 暂停/播放音频时,我需要消除它。这可能意味着对代码进行彻底检查,以便我可以“动态”插入新值而不会破坏任何内容。但是,我之所以要努力发布所有这些内容,是因为这种方法完全符合我的要求(我可以用数学方法计算一个值,然后直接进入 DAC,这意味着我将来可以用它来制作三角形,方等容易波浪)。我已将 Singer.h 和 .m 上传到 pastebin 以供您查看,也许它们会有所帮助。抱歉,我不能发布 2 个 HTML 标签,所以这里是完整链接。(http://pastebin.com/ewhKW2Tk) (http://pastebin.com/CNAT4gFv) 暂停/播放音频时,我需要消除它。这可能意味着对代码进行彻底检查,以便我可以“动态”插入新值而不会破坏任何内容。但是,我之所以要努力发布所有这些内容,是因为这种方法完全符合我的要求(我可以用数学方法计算一个值,然后直接进入 DAC,这意味着我将来可以用它来制作三角形,方等容易波浪)。我已将 Singer.h 和 .m 上传到 pastebin 以供您查看,也许它们会有所帮助。抱歉,我不能发布 2 个 HTML 标签,所以这里是完整链接。(http://pastebin.com/ewhKW2Tk) (http://pastebin.com/CNAT4gFv) 在不破坏任何东西的情况下插入新值。但是,我之所以要努力发布所有这些内容,是因为这种方法完全符合我的要求(我可以用数学方法计算一个值,然后直接进入 DAC,这意味着我将来可以用它来制作三角形,方等容易波浪)。我已将 Singer.h 和 .m 上传到 pastebin 以供您查看,也许它们会有所帮助。抱歉,我不能发布 2 个 HTML 标签,所以这里是完整链接。(http://pastebin.com/ewhKW2Tk) (http://pastebin.com/CNAT4gFv) 在不破坏任何东西的情况下插入新值。但是,我之所以要努力发布所有这些内容,是因为这种方法完全符合我的要求(我可以用数学方法计算一个值,然后直接进入 DAC,这意味着我将来可以用它来制作三角形,方等容易波浪)。我已将 Singer.h 和 .m 上传到 pastebin 以供您查看,也许它们会有所帮助。抱歉,我不能发布 2 个 HTML 标签,所以这里是完整链接。(http://pastebin.com/ewhKW2Tk) (http://pastebin.com/CNAT4gFv) m to pastebin 为了您的乐趣,也许他们会有所帮助。抱歉,我不能发布 2 个 HTML 标签,所以这里是完整链接。(http://pastebin.com/ewhKW2Tk) (http://pastebin.com/CNAT4gFv) m to pastebin 为了您的乐趣,也许他们会有所帮助。抱歉,我不能发布 2 个 HTML 标签,所以这里是完整链接。(http://pastebin.com/ewhKW2Tk) (http://pastebin.com/CNAT4gFv)
所以,TL;DR,我真正想做的就是能够定义 4 个波的当前方程/值,并经常重新定义它们,而不会在声音中产生间隙。谢谢。(很抱歉,如果帖子令人困惑或偏离了轨道,我很确定确实如此。)
iphone - RemoteIO 音频问题 - 模拟器 = 好 - 设备 = 坏
好的,所以我使用核心音频从 10 个不同的样本源中提取音频,然后在我的回调函数中将它们混合在一起。
它在模拟器中完美运行,一切都很好。但是,当我尝试在 4.2 iphone 设备上运行它时遇到了麻烦。
如果我在回调中混合 2 个音频文件,一切正常。如果我混合 5 或 6 个音频文件,音频会播放,但一段时间后音频会降级,最终不会有音频进入扬声器。(回调不会停止)。
如果我尝试混合 10 个音频文件,回调会运行,但根本没有音频出来。
几乎就像回调没有时间了,这可以解释我混合 5 或 6 个的情况,但不能解释最后一种情况,混合 10 个音频源而根本没有播放音频。
我不确定以下是否有任何影响,但是当我调试时,此消息总是打印到控制台。这是否可以说明问题所在?
**设置我的回调**
回调
我的音频提取功能
编辑 1
作为对@andre 的回应,我将回调更改为以下内容,但它仍然没有帮助。
iphone - 使用远程 I/O 录制,AudioUnitRender -50 返回码
我一直在为 iOS 开发一个频率检测应用程序,但在使用来自麦克风的音频样本填充用户定义的 AudioBufferList 时遇到问题。
当我在 InputCallback 方法中调用 AudioUnitRender 时,返回码为 -50。我相信这意味着我的参数之一无效。我猜它是 AudioBufferList,但我无法弄清楚它有什么问题。我想我已经对其进行了设置,使其与我在 ASBD 中指定的数据格式相匹配。
以下是我认为可能不正确的远程 I/O 设置和函数调用:
ASBD:
InputCallback 声明:
AudioBufferList 声明:
输入回调函数:
需要注意的几点:
- 采样率 = 22050 赫兹
- 由于远程 I/O 数据的规范格式是 8.24 位定点,我假设每个样本是 32 位(或 4 个字节)。由于 unsigned int 是 4 个字节,我使用它来分配我的音频缓冲区。
- 如果我将音频数据流实现为 PassThru 而不是仅输入,我可以获得相同的代码来正确呈现音频。
- 我已经看过Michael Tyson关于远程 I/O的博文。没有看到任何与我正在做的不同的事情。
再次感谢,你们都很棒!
德米特里
macos - 从命令行控制 AudioUnits?
是否有任何软件可以提供命令行(或其他脚本)实用程序来修改 AudioUnit 参数?
用例是这样的:
- 默认(内置)输入
- 附加更好的增益控制AudioUnit(默认OS-X增益控制不足)
- 附加 LR 平衡控制(或“平移”)
- 传递(链接)到默认输出又名 LineIn.app
- AudioUnit 2) 的脚本控制。用于输入音频的 0-100% 音量控制。就像 OS-X 中的主音量一样,以 1/16 增量 (6.5%)。
- 用于 LR 平衡(平移)控制的 AudioUnit 3) 的脚本控制。
对我来说,这里的问题在于第 5 步和第 6 步。
步骤 1) 到 4) 可以在 AudioHijackPro 中以图形方式充分实现。可以在其中创建直通和音频单元。它还带有一个非常好的增益控制转盘/旋钮。然而,所有这些效果都是通过 GUI 界面专门设置的。
拼命寻找可以设置参数值并使用设置参数C api函数将它们发送到这些音频单元的命令行工具(或“audiounit host”)。
Mac 上的任何现有工具是否提供这种功能?
iphone - 基本系统提供的音频单元实现
如果有人可以发布或指导我对系统提供的音频单元之一的简单实现,我会很高兴。我希望在 iOS 中使用 AUPitch(iPhone 甚至支持该单元吗?)并且似乎没有任何关于如何使用它的简单描述。
提前致谢,
mIL3S
ios - 无法访问编解码器。(-66672)
我正在尝试使用 AudioUnit 将 caf 文件转换为 m4a 文件。我已经实现了要转换的代码。当我尝试运行应用程序时,我收到以下错误消息;
我从以下链接获得了示例代码;
http://developer.apple.com/library/ios/#samplecode/iPhoneExtAudioFileConvertTest/Introduction/Intro.html
代码:
p>我没有得到解决方案。我尝试过将属性设置为输出文件。但我遇到了同样的问题。
请帮我解决它。
iphone - 有没有人在 iphone 中使用 3DMixer 来处理“真正的”空间化?
我一直在摆弄 iphone 上的 3D 混音器,但它似乎无法为环绕声提供 HRTF 的效果。我想知道你们中的任何人是否对这个音频单元有更好的运气......
iphone - 音频回调线程中的内存泄漏(iOS)
我的应用程序有一个由 RemoteIO AudioUnit 框架调用的录音回调。AudioUnit 在与主线程不同的线程中调用回调,因此它没有自动释放池。在此回调中,我执行以下操作:
- 为记录的样本分配一个缓冲区。
- 调用
AudioUnitRender
以填充此缓冲区。 - 使用 .打开一个用于记录的文件
freopen
。 - 调用音频处理方法。
- 根据音频,使用
performSelectorOnMainThread
(发送到视图控制器)更新主线程上的 UI。
此外,我有一个调用函数testFilter()
来执行一些基准测试,我在视图控制器中调用它viewDidLoad
,在初始化音频会话之前,因此在第一次调用音频回调之前。在这个函数中,我分配了一个缓冲区(使用 malloc/free)并调用我上面提到的相同的音频处理方法。
现在,问题是(在设备上,而不是模拟器上):
- 如果我注释掉对 的调用
testFilter()
,我不会收到任何与内存泄漏相关的消息。 - 如果我确实 call
testFilter()
,我开始从音频回调中收到一堆消息(前 5 条消息是我的testFilter()
方法日志):
2011-01-20 23:05:10.358 TimeKeeper[389:307] 初始化缓冲区...
2011-01-20 23:05:10.693 TimeKeeper[389:307] 完成...
2011-01-20 23:05:10.696 TimeKeeper[389:307] 处理缓冲区...
2011-01-20 23:05:15.772 TimeKeeper[389:307] 完成...
2011-01-20 23:05:15.775 TimeKeeper[389:307] 经过时间 5.073843
2011-01-20 23:05:16.319 TimeKeeper[389:660f] * __NSAutoreleaseNoPool(): __NSCFData 类的对象 0x137330 自动释放,没有适当的池 - 只是泄漏
2011-01-20 23:05:16.327 TimeKeeper[389:660f] * __NSAutoreleaseNoPool(): __NSCFData 类的对象 0x1373a0 自动释放,没有适当的池 - 只是泄漏
等等。回调有一个不同的线程,可以在日志中看到。
为什么只有在我调用一个在音频会话初始化之前调用并完成的函数时才会出现这些警告?如何检测泄漏?
附录
相关方法:
和:
iphone - 在 iPhone 上拆分音频单元流
我正在开发一种将多个传感器信号一起调制成一个信号的方法,通过音频输入进入 iPhone。我需要做几件事:
- 通过一个普通的滤波器链从输入信号中解调这些信号,然后将每个信号沿其自己的信号路径输出以进行进一步处理——必须是实时的。
- 播放每个信号的声音版本——最好是实时的。
- 通过网络连接将每个信号流式传输——最好是实时的。
- 将每个信号存储在一个 PCM 文件中——不必是实时的。
我需要帮助概念化这个过程中的信号链。我已经开始使用音频单元绘制设计草图。首先,我选择Audio Units是不是太低级了?这可以通过音频队列服务实现吗?尽管如此,我已经到了调制信号进入的地步(还没有解调它),正在实时对其进行声化,并将声化后的信号传回输出端。现在,为了将此信号拆分为信号链的两个单独部分,我会想象做一些事情,例如将远程 I/O 单元的输出路由到多通道混音器单元上的两个单独的输入总线,然后进行声化/写入-disk/writing-to-network 在多通道混音器单元的回调中。
但是,对于实时线程来说,这是否过多的处理?我真的能够做到这一点,还是需要将一些功能离线?其次,是否可以将 I/O 单元的输入单元的输出路由到多通道混音器单元的单独输入单元?如果没有,我能否指定多通道流描述,并拆分源
ios - 如何解决“使用中的硬件”问题(错误代码:'hwiu')?
我创建了一个带有recording with AudioUnit
、Conversion
和部件Audio Editing
的iPhone 应用程序。Merging
我什么都做了,除了Conversion
。此应用程序仅适用于 iOS 4 或更高版本。
我试图将 .caf 转换为 .m4a 文件。但我收到kAudioConverterErr_HardwareInUse
错误。然后我尝试将 .caf 文件转换为 .wav 文件。然后将 .wav 文件转换为 .m4a 文件。但我遇到了同样的问题。
我不清楚这个问题。在Apple 文档中,他们提到了类似;
“如果底层硬件编解码器变得不可用,则从AudioConverterFillComplexBuffer
函数返回,可能是由于音频中断。
收到此错误后,您的应用程序必须停止调用AudioConverterFillComplexBuffer
. 您可以检查该kAudioConverterPropertyCanResumeFromInterruption
属性的值以确定您使用的转换器是否可以在中断后恢复处理。如果是这样,则等待来自音频会话服务的中断结束呼叫,重新激活音频会话,最后恢复使用编解码器。
如果转换器在中断后无法恢复处理,那么在中断时您必须放弃转换,重新实例化转换器,然后再次执行转换。”
请帮我解决它。