我在以下上下文中从AudioUnitRender收到错误-50(无效参数).我正在使用这个Pitch Detector示例应用程序作为我的起点,它运行正常.我项目中唯一的主要区别是我也使用远程I/O单元进行音频输出.音频输出工作正常.这是我的输入回调和我的初始化代码(为简洁起见,删除了错误检查).我知道这很多但错误-50确实给了我很少的信息,问题可能在哪里.
输入回调:
OSStatus inputCallback( void* inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {
WBAudio* audioObject= (WBAudio*)inRefCon;
AudioUnit rioUnit = audioObject->m_audioUnit;
OSStatus renderErr;
UInt32 bus1 = 1;
renderErr = AudioUnitRender(rioUnit, ioActionFlags,
inTimeStamp, bus1, inNumberFrames, audioObject->m_inBufferList );
if (renderErr < 0) {
return renderErr; // breaks here
}
return noErr;
} // end inputCallback()
Run Code Online (Sandbox Code Playgroud)
初始化:
- (id) init {
self= [super init];
if( !self ) return nil;
OSStatus result;
//! Initialize a buffer list …Run Code Online (Sandbox Code Playgroud) 我正在尝试将AudioFilePlayer AudioUnit连接到AU3DMixerEmbedded Audio Unit,但我没有成功.
这是我正在做的事情:
创建一个AUGraph与NewAUGraph()
打开图表
初始化图表
添加3个节点:
kAudioUnitSubType_RemoteIOkAudioUnitSubType_AU3DMixerEmbeddedkAudioUnitSubType_AudioFilePlayer连接节点:
配置filePlayer音频单元以播放所需的文件
启动图表
这不起作用:它在AUGraphInitialize上出错,错误为10868(kAudioUnitErr_FormatNotSupported).我认为问题是由于filePlayer和混音器之间的音频格式不匹配.我认为这是因为: - 如果我注释掉将filePlayerNode连接到mixerNode(AUGraphConnectNodeInput(_graph, filePlayerNode, 0, mixerNode, 0))并注释掉第6步,那么就不会报告任何错误.- 如果我将filePlayerNode直接连接到outputNode(AUGraphConnectNodeInput(_graph, filePlayerNode, 0, outputNode, 0))来替换步骤3,则播放音频.
在将filePlayerNode连接到mixerNode时我缺少哪些步骤?
这是完整的代码.它基于Apple的示例代码和我从互联网上找到的其他样本.(AUGraphStart后称):
- (id)init
{
self = [super init];
if (self != nil)
{
{
//create a new AUGraph
CheckError(NewAUGraph(&_graph), "NewAUGraph failed");
// opening the graph opens all contained audio units but does …Run Code Online (Sandbox Code Playgroud) 我有一个程序,使用连接到远程IO音频单元的AUSampler生成声音.AUSampler由在定时循环中触发的预先记录的事件控制.我想将结果声音写入文件.
关于在IO单元的渲染回调中写入文件还有一些其他问题:
但这些都涉及实时编写数据.有没有办法离线渲染文件所需的时间比播放文件少?
我有一个OSX应用程序,使用音频单元记录音频数据.音频单元的输入可以设置为任何可用的输入源,包括内置输入.问题是,我从内置输入获得的音频经常被剪裁,而在诸如Audacity(甚至是Quicktime)之类的程序中,我可以调低输入级别而不会剪辑.
当然,将样本帧乘以一小部分是行不通的,因为我的体积较小,但样本本身在输入时仍然被剪裁.
如何设置内置输入的输入电平或增益以避免剪切问题?
我需要使用Core Audio同时播放和录制.我真的不想使用AVFoundation API(AVAudioPlayer + AVAudioRecorder)这样做,因为我正在制作音乐应用程序,并且不会出现任何延迟问题.
我查看了Apple的以下源代码:
aurioTouch
MixerHost
我已经查看过以下帖子:
iOS:同步录制和播放的示例代码同时录制和播放
音频
我仍然不清楚如何使用Core Audio同时播放和录制相同的内容.任何有关如何实现这一目标的指示都将非常值得注意.任何示例源代码的任何指针也将有很大帮助.
我试图制作卡拉OK应用程序,记录文件和麦克风的背景音乐.我还想为麦克风输入添加滤镜效果.
我可以使用惊人的音频引擎sdk完成上述所有事情,但我无法弄清楚如何将麦克风输入添加为频道,以便我可以应用滤镜(而不是背景音乐.)
任何帮助,将不胜感激.
我目前的录音代码:
- (void)beginRecording {
// Init recorder
self.recorder = [[AERecorder alloc] initWithAudioController:_audioController];
NSString *documentsFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
objectAtIndex:0];
NSString *filePath = [documentsFolder stringByAppendingPathComponent:@"Recording.aiff"];
// Start the recording process
NSError *error = NULL;
if ( ![_recorder beginRecordingToFileAtPath:filePath
fileType:kAudioFileAIFFType
error:&error] ) {
// Report error
return;
}
// Receive both audio input and audio output. Note that if you're using
// AEPlaythroughChannel, mentioned above, you may not need to receive the input again.
[_audioController addInputReceiver:_recorder];
[_audioController addOutputReceiver:_recorder];
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Audio Unit Framework在mac os x上开发VOIP应用程序.在我的程序中,我设置了输入AUHAL并使用默认流格式(44.1kHz,32位/通道)从麦克风中捕获音频.在这种情况下,我的程序工作正常.
这是代码:
//The default setting in my program
CheckError(AudioUnitGetProperty(m_audCapUnit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output, //the value is 0
inputBus, //the value is 1
&m_audCapUnitOutputStreamFormat,
&propertySize),
"Couldn't get OutputSample ASBD from input unit") ;
//the inOutputSampleRate is 44100.0
m_audCapUnitOutputStreamFormat.mSampleRate = inOutputSampleRate ;
CheckError(AudioUnitSetProperty(m_audCapUnit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output,
inputBus,
&m_audCapUnitOutputStreamFormat,
propertySize),
"Couldn't set OutputSample ASBD on input unit");
//
Run Code Online (Sandbox Code Playgroud)
由于我正在开发VOIP应用程序,默认格式(44.1kHz,32位/通道)不适合我的程序,所以我想将采样率更改为8kHz.我写了这段代码来改变程序中的格式:
//......
inOutputFormat.mSampleRate = 8000. ;
inOutputFormat.mFormatID = kAudioFormatLinearPCM ;
inOutputFormat.mChannelsPerFrame = 2 ;
inOutputFormat.mBitsPerChannel = 16 ;
inOutputFormat.mBytesPerFrame = 2 ;
inOutputFormat.mBytesPerPacket = …Run Code Online (Sandbox Code Playgroud) 目前我正在开发一款使用iPad麦克风捕捉声音的iOS应用程序.同时,通过iPad扬声器播放声音.由于目标是处理隔离的输入声音,因此应删除(取消)扬声器反馈.我查找了一些与AudioToolbox可能性相关的文档.我发现AudioUnit可以执行回声消除等内置功能.但是,我没有设法正确配置我的音频图表以获得成功的性能.
我将不胜感激任何建议,示例代码,教程参考或推荐的参考书目.
非常感谢你,
普约尔
如何使用AVAudioPlayer或AVPlayer播放PCM数据/缓冲区?我知道,我可以使用AudioUnit/AudioQueue播放PCM数据/缓冲区,方法是将数据输入播放回调方法.但是不想这样做.
我在谷歌上搜索了很多,但找不到任何有用的答案或任何示例代码来执行此操作.任何帮助将受到高度赞赏.
我注意到一些开源 DAW,例如 Ardor 和 Audacity,能够访问用户在其系统上安装的音频插件(例如 VST、AU)。这让我觉得“应该有一种方法”来做到这一点。
具体来说,我想从我自己用 Python 编写的音频处理应用程序中调用一些插件。是否有推荐的方法或库可以用于此目的?
我自己的搜索几乎没有结果。我见过的唯一相关帖子是这个,但它已经有 5 年历史了。有人提到使用JUCE并且有一些名为PyJUCE 的2 岁 Python 绑定(似乎是为 Windows 设置的),但到目前为止我还没有得到任何工作,主要是因为我对纯粹的适应能力很差”批量”的 JUCE。
有什么建议?
也许唯一剩下的选择是从头开始编写自己的 VST host,然后像从 Python 内部调用任何外部 C++ 代码一样继续。我只是想在重新发明轮子之前先问一下,因为通常情况下“无论你想做什么,其他人已经为它编写了一个 Python 包”。;-)
audiounit ×10
core-audio ×7
ios ×7
objective-c ×3
audio ×2
macos ×2
cocoa-touch ×1
ios7 ×1
iphone ×1
plugins ×1
python ×1
sample-rate ×1
voip ×1
vst ×1