Tag: audiounit

iOS:设置基本的语音处理I / O音频单元-Swift

如果您是需要使用Apple的AudioToolbox和AudioToolbox API的不幸者之一,请让我尝试让您的生活更轻松一些。 苹果公司缺乏文档和有效的示例,因此使用Crucis确实可以使用这些工具进行开发。 经过反复试验,我设法弄清楚了如何在Swift中设置Voice Processing I/O音频单元。 该代码还可以用于设置任何其他音频单元,您只需要根据位于不良文档中的常量替换组件类型,子类型和所有其他参数的值即可。 无需赘言,这里是代码。 在该示例中,我还将展示如何设置本机的某些属性,例如“ Automatic Gain Control和“ Bypass Voice Processing 。

我的iOS应用程序使用8000赫兹采样率的audio单元返回一个扭曲的声音

我真的需要帮助解决这个问题。 我正在开发一个带有audio单元的iOS应用程序,录制的audio需要采用alaw格式的8bit / 8000赫兹采样率。 我怎么会听到说话者发出失真的声音。 我在网上看到这个样本: http://www.stefanpopp.de/2011/capture-iphone-microphone/comment-page-1/ 而试图debugging我的应用程序时,我在他的应用程序中使用我的audioFormat,我得到相同的扭曲的声音。 我猜我或者有不正确的设置,或者我需要做一些其他的事情来使这个工作。 鉴于链接中的应用程序和下面的audioFormat任何人都可以告诉我,如果我做错了什么或缺less的东西? 我对这个东西了解不多,谢谢。 audio格式: AudioStreamBasicDescription audioFormat; audioFormat.mSampleRate = 8000; audioFormat.mFormatID = kAudioFormatALaw; audioFormat.mFormatFlags = kAudioFormatFlagIsPacked | kAudioFormatFlagIsSignedInteger; audioFormat.mFramesPerPacket = 1; audioFormat.mChannelsPerFrame = 1; audioFormat.mBitsPerChannel = 8; audioFormat.mBytesPerPacket = 1; audioFormat.mBytesPerFrame = 1;

AUGraphAddNode -10862

我想实现一个audio单元模式,I / O Pass Through.My代码如下 OSStatus result = noErr; result = NewAUGraph(&audioGraph); if (noErr != result) {[self printErrorMessage: @"NewAUGraph" withStatus: result]; return;} // 2.add AUNode AUNode inputNode; AUNode outputNode; // client format audio goes into the mixer clientFromat.SetCanonical(1, true); clientFromat.mSampleRate = kGraphSampleRate; clientFromat.Print(); CAComponentDescription input_desc(kAudioUnitType_Output,kAudioUnitSubType_RemoteIO,kAudioUnitManufacturer_Apple); CAComponentDescription output_desc(kAudioUnitType_Output,kAudioUnitSubType_RemoteIO,kAudioUnitManufacturer_Apple); result = AUGraphAddNode(audioGraph, &input_desc, &inputNode); if (noErr != […]

在ObjectiveC中连接audio缓冲区

首先我是c和c的新蜜蜂 我尝试去掉一个audio缓冲区并绘制它的graphics。 我使用audio单元callback来获取audio缓冲区。 callback带来了512帧,但471帧后,它带来0.(我不知道这是正常的,它用来带471帧充满数字,但现在不知怎的512帧47之后0。请让我知道如果这是正常的) 无论如何。 我可以从callback中获取缓冲区,应用fft并绘制它。 这工作完美。 下面是结果。 只要我在每个callback中获得缓冲区,graphics就非常平滑 但在我的情况下,我需要3秒的缓冲区,以应用fft和绘制。 所以我尝试连接来自两个callback的缓冲区,然后应用fft并绘制它。 但结果并不像我所期望的那样。 而上面的一个在logging过程中非常stream畅和精确(只有在18和19 kHz的幅度变化),当我连接两个缓冲区时,仿真器主要显示两个不同的视图,它们之间交换的速度非常快。 他们显示在下面。 当然,他们基本上显示18和19千赫兹。 但我需要精确的khz,所以我可以为我工作的应用程序应用更多的algorithm。 这是我的代码在callback //FFTInputBufferLen, FFTInputBufferFrameIndex is gloabal //also tempFilteredBuffer is allocated in global //by the way FFTInputBufferLen = 1024; static OSStatus performRender (void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) { UInt32 bus1 = 1; […]

核心audio:文件播放呈现callback函数

我用kAudioUnitProperty_ScheduledFileIDs在我的应用程序中使用RemoteIOaudio单元进行audio播放。 audio文件是PCM格式。 我怎样才能实现这种情况下的渲染callback函数,所以我可以手动修改缓冲区样本? 这是我的代码: static AudioComponentInstance audioUnit; AudioComponentDescription desc; desc.componentType = kAudioUnitType_Output; desc.componentSubType = kAudioUnitSubType_RemoteIO; desc.componentManufacturer = kAudioUnitManufacturer_Apple; desc.componentFlags = 0; desc.componentFlagsMask = 0; AudioComponent comp = AudioComponentFindNext(NULL, &desc); CheckError(AudioComponentInstanceNew(comp, &audioUnit), "error AudioComponentInstanceNew"); NSURL *playerFile = [[NSBundle mainBundle] URLForResource:@"short" withExtension:@"wav"]; AudioFileID audioFileID; CheckError(AudioFileOpenURL((__bridge CFURLRef)playerFile, kAudioFileReadPermission, 0, &audioFileID), "error AudioFileOpenURL"); // Determine file properties UInt64 packetCount; […]

在AudioUnit子typeskAudioUnitSubType_NewTimePitch上设置速率

我试图获取/设置一个kAudioUnitSubType_NewTimePitch与子typeskAudioUnitSubType_NewTimePitch 。 audio单元通过AUNode添加到AUNode ,具有以下组件说明: acd->componentType = kAudioUnitType_Effect; acd->componentSubType = kAudioUnitSubType_NewTimePitch; acd->componentManufacturer = kAudioUnitManufacturer_Apple; 根据AudioUnitParameters.h ,获取/设置速率应该像获取/设置audio单元上的速率参数一样简单。 // rate control. // Global, rate, 1/32 -> 32.0, 1.0 kNewTimePitchParam_Rate = 0, 但是,虽然设置该值似乎没有问题(没有错误返回)获取值产生值为-10878 (kAudioUnitErr_InvalidParameter) 。 以下是我如何设置值: – (void)setTempo:(float)value { OSStatus err = noErr; err = AudioUnitSetParameter(tempoUnit, kNewTimePitchParam_Rate, kAudioUnitScope_Global, 0, (Float32)value, 0); if (err != noErr) { NSLog(@"Could not set […]

核心audioSwift Equalizer一次调整所有频段?

我无法在Swift中设置kAudioUnitSubType_NBandEQ。 这里是我的初始化EQ的代码: var cd:AudioComponentDescription = AudioComponentDescription(componentType: OSType(kAudioUnitType_Effect),componentSubType: OSType(kAudioUnitSubType_NBandEQ),componentManufacturer: OSType(kAudioUnitManufacturer_Apple),componentFlags: 0,componentFlagsMask: 0) // Add the node to the graph status = AUGraphAddNode(graph, &cd, &MyAppNode) println(status) // Once the graph has been opened get an instance of the equalizer status = AUGraphNodeInfo(graph, self.MyAppNode, nil, &MyAppUnit) println(status) var eqFrequencies: [UInt32] = [ 32, 250, 500, 1000, 2000, 16000 […]

启动一个AVAssetReader,停止对远程I / O AudioUnit的callback

我正在使用AVAssetReader从iPod库中读取audio。 ( 见这里 )我然后采取读缓冲区,并通过一个audio单元播放。 我正在尝试折叠代码,以便在播放audio时进行stream式传输。 但是,如果AVAssetReader正在运行,则AudioUnit将停止接收对其的kAudioUnitProperty_SetRenderCallback的调用。 我简化了我的代码,只在AudioUnitscallback中播放文件… OSStatus UnitRenderCB(void* pRefCon, AudioUnitRenderActionFlags* flags, const AudioTimeStamp* timeStamp, UInt32 busNum, UInt32 numFrames, AudioBufferList* pData){ OSStatus tErr = noErr; MySoundStream* pS = (MySoundStream*)pRefCon; ExtAudioFileRead(pS->InRef, &numFrames, pData); // Here's the MP3/WAV/etc Data loaded… if (numFrames <= 0){ // EOF? ExtAudioFileSeek(pS->InRef, 0); return 1; } return tErr; } 然后我调用这个代码,AudioUnit停止播放,UnitRenderCB不再被调用。 NSError* error […]

为什么我不能在AU多声道调音台的input范围内更改元素/总线的数量?

更新:我正在更改我的代码,以更简化的方式说明问题。 另外我还有一个小问题,虽然没有阻止问题,却增加了一些困惑。 我在iOS(kAudioUnitSubType_MultiChannelMixer)中实例化一个多通道混音器AU,并执行以下操作: OSStatus status = noErr; // Set component type: AudioComponentDescription cd = {0}; cd.componentType = kAudioUnitType_Mixer; cd.componentSubType = kAudioUnitSubType_MultiChannelMixer; cd.componentManufacturer = kAudioUnitManufacturer_Apple; // Alloc unit: AudioComponent defaultOutput = AudioComponentFindNext(NULL, &cd); AudioUnit mixer; status = AudioComponentInstanceNew(defaultOutput, &mixer); NSLog(@"AU init status: %li", status); // You can try initializing the unit before or after the attempt […]

使用Core Audio控制单声道播放输出

我正在开发iOS应用程序,使用RemoteIOaudio单元录制来自麦克风的audio,进行处理并输出到扬声器(耳机)。 目前我使用单声道(单声道)进行input和输出。 我想要做的是让用户select一个输出扬声器:只剩下,只有右侧,或两者兼而有之。 我目前的代码只支持“两个”设置 – 两个扬声器都有相同的声音。 以下是我如何设置input和输出总线的stream格式(kAudioUnitProperty_StreamFormat): AudioStreamBasicDescription ASBD = {0}; size_t bytesPerSample = sizeof(SInt16); ASBD.mFormatID = kAudioFormatLinearPCM; ASBD.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; ASBD.mSampleRate = 44100; ASBD.mFramesPerPacket = 1; ASBD.mBytesPerFrame = bytesPerSample; ASBD.mBytesPerPacket = bytesPerSample; ASBD.mBitsPerChannel = 8 * bytesPerSample; ASBD.mChannelsPerFrame = 1; 而我的渲染callback(kAudioUnitProperty_SetRenderCallback)看起来大致是这样的: AudioUnitRender(remoteIO, ioActionFlags, inTimeStamp, inputBus, inNumberFrames, ioData); SInt16 *renderBuffer = ioData->mBuffers[0].mData; // […]