Tag: audiounit

更改iOS上AUGraph的采样率

我已经实现了一个类似于iOS Developer's Library的AUGraph。 然而,在我的应用程序中,我需要能够以不同的采样率(可能是两个不同的采样率)播放声音。 我一直在浏览苹果的文档,并没有find一种方法来设置运行时的采样率。 我一直在想三个可能的解决方法: 每次需要更改采样率时,重新初始化AUGraph; 为每个不同的采样率初始化一个不同的AUGraph; 在播放之前转换每个声音的采样率; 这些方法在处理器上似乎都很笨重。 在运行时更改AUGraph采样率的最佳方法是什么?

设置audio单元格式并渲染交错PCMaudio的回叫

我目前正在尝试播放一系列UDP数据包中收到的audio。 这些被解码成具有以下属性的PCM帧: 2个频道 交错 单个通道每个采样2个字节(所以每帧4个字节) 采样率为48000。 每个UDP数据包包含480帧,所以缓冲区的大小是480 * 2(通道)* 2(每通道字节数)。 我需要设置一个audio单元来播放这些数据包。 所以,我的第一个问题是,我应该如何设置audio单元的AudioStreamBasicDescription结构? 看看这个文档,我甚至不确定交错PCM是否是可接受的格式。 这是我到目前为止: struct AudioStreamBasicDescription { Float64 mSampleRate; //48000 UInt32 mFormatID; //????? UInt32 mFormatFlags; //????? UInt32 mBytesPerPacket; //Not sure what "packet" means here UInt32 mFramesPerPacket; //Same as above UInt32 mBytesPerFrame; //Same UInt32 mChannelsPerFrame; //2? UInt32 mBitsPerChannel; //16? UInt32 mReserved; //??? }; typedef struct AudioStreamBasicDescription […]

调用AUGraphStart进行播放时接收kAUGraphErr_CannotDoInCurrentContext

我正在使用AUGraph和Audio Units API在我的iOS应用程序中播放和录制audio。 现在我有一个罕见的问题,当一个AUGraph无法启动以下错误: 结果= kAUGraphErr_CannotDoInCurrentContext(-10863) 当我们尝试调用为audio播放设置的AUGraphStart ,发生错误不可预知: (BOOL)startRendering { if (playing) { return YES; } playing = YES; if (NO == [self setupAudioForGraph:&au_play_graph playout:YES]) { print_error("Failed to create play AUGraph",0); playing = NO; return NO; } //result = kAUGraphErr_CannotDoInCurrentContext (-10863) OSStatus result = AUGraphStart(au_play_graph); if (noErr != result) { print_error("AUGraphStart", result); playing = NO; […]

无法使用AudioFileStreamOpen的AudioFileStream_PacketsProccallback中的AudioConverterFillComplexBuffer将MP3转换成PCM

我有一个AudioFileStream_PacketsProccallback设置在一个AudioFileStreamOpen处理转换audio数据包到PCM使用AudioConverterFillComplexBuffer 。 我遇到的问题是我调用AudioConverterFillComplexBuffer后得到一个-50 OSStatus(paramErr)。 下面是在AudioConverterFillComplexBuffer中使用的参数的一个片段,以及它们是如何制作的: audioConverterRef = AudioConverterRef() // AudioConvertInfo is a struct that contains information // for the converter regarding the number of packets and // which audiobuffer is being allocated convertInfo? = AudioConvertInfo(done: false, numberOfPackets: numberPackets, audioBuffer: buffer, packetDescriptions: packetDescriptions) var framesToDecode: UInt32 = pcmBufferTotalFrameCount! – end var localPcmAudioBuffer = AudioBuffer() localPcmAudioBuffer.mData = […]

低延迟input/输出AudioQueue

我有两个iOS AudioQueues – 一个input,直接将样本提供给一个输出。 不幸的是,有一个很明显的回声效果:( 是否有可能使用AudioQueues做低延迟audio,还是我真的需要使用AudioUnits? (我已经尝试了使用AudioUnits的Novocaine框架,在这里延迟要小得多,我也注意到这个框架似乎使用了更less的CPU资源,不幸的是,我没有对Swift项目进行重大修改。) 下面是我的代码的一些摘录,主要是在Swift中完成的,除了那些需要在C中实现的callback。 private let audioStreamBasicDescription = AudioStreamBasicDescription( mSampleRate: 16000, mFormatID: AudioFormatID(kAudioFormatLinearPCM), mFormatFlags: AudioFormatFlags(kAudioFormatFlagsNativeFloatPacked), mBytesPerPacket: 4, mFramesPerPacket: 1, mBytesPerFrame: 4, mChannelsPerFrame: 1, mBitsPerChannel: 32, mReserved: 0) private let numberOfBuffers = 80 private let bufferSize: UInt32 = 256 private var active = false private var inputQueue: AudioQueueRef = nil private var […]

AudioUnitaudio发生器在每个音调结束时给我一个唧唧声

我正在为旧的GWBasic PLAY命令创build一个老派的音乐模拟器。 为此,我有一个音源和音乐播放器。 在演奏的每一个音符之间,我都会听到唧唧喳喳的声音。 以下是我的两个类: ToneGen.h #import <Foundation/Foundation.h> @interface ToneGen : NSObject @property (nonatomic) id delegate; @property (nonatomic) double frequency; @property (nonatomic) double sampleRate; @property (nonatomic) double theta; – (void)play:(float)ms; – (void)play; – (void)stop; @end ToneGen.m #import <AudioUnit/AudioUnit.h> #import "ToneGen.h" OSStatus RenderTone( void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData); […]

iosaudio单元remoteIO回放录音

我已经被指控将VOIP添加到游戏中(跨平台的,所以不能使用苹果游戏包来做)。 现在3或4天,我试图让我的头绕着audio单元和remoteIO …我忽略了几十个例子等,但每一次只是应用一个简单的algorithminputPCM和播放回到扬声器上。 根据苹果的文档,为了做VOIP,我们应该使用kAudioSessionCategory_PlayAndRecord。 UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory); XThrowIfError(status, "couldn't set audio category"); 1)但是在我看来,playAndRecord会一直播放来自麦克风(或更刺激的PerformThrucallback// aurioTouch ),我错了吗? 我有最简单的callback,除了AURender什么也不做 static OSStatus PerformThru( void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) { OSStatus err = AudioUnitRender(THIS->rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData); if (err) printf("PerformThru: error %d\n", (int)err); return […]

iOS AudioUnits通过

我试图编写一个iOS应用程序,将麦克风收到的声音传递给扬声器而不做任何更改。 我已经阅读了苹果文档和指南。 我select了本指南的第一个模式。 但没有任何事情发生 – 沉默 正如你可以看到我试图使用AUAudioGraph(注释) – 相同的结果(我是否需要在这个简单的例子呢?)。 我在互联网上看到了几个使用callback的例子,但我不想使用任何callback。 可能吗? 有什么build议么? 感谢关注。 实际的代码 #import "AudioController.h" #import <AudioToolbox/AudioToolbox.h> #import <AVFoundation/AVFoundation.h> #import <AudioToolbox/AudioServices.h> #define kInputBus 1 #define kOutputBus 0 @interface AudioController () { AudioComponentDescription desc; AudioComponent component; AudioUnit unit; AudioStreamBasicDescription audioFormat; double rate; //AUGraph graph; } @end @implementation AudioController – (void) setUp { AVAudioSession *sess = […]

iOSaudio单元:何时使用AUGraph的必要?

我对iOS编程(我更像一个Android家伙)是全新的,并且必须构build一个处理audioDSP的应用程序。 (我知道这不是靠近iOS开发的最简单的方法;)) 该应用程序需要能够接受来自以下两方面的input: 1-内置麦克风2- iPod库 然后可以将滤波器应用于input声音,并将结果输出到: 1-扬声器2-录制到文件 我的问题是以下内容:为了能够将多个filter应用于input,或者可以通过使用不同的呈现callback处理样本来应用这些不同的效果,是否需要AUGr​​aph? 如果我使用AUGraph,是否需要:每个input1个audio单元,输出1个audio单元,每个效果/滤波器1个audioinput? 最后,如果我不能,我只有1个audio单元,并重新configuration它,以select来源/目的地? 非常感谢您的答复! 我迷失在这个东西里

iOS:audio单元与OpenAL与核心audio

有人能向我解释OpenAL如何适应iPhone上的声音模式吗? 似乎有不同级别的API来处理声音。 高层次的人很容易理解。 但是我的理解变得模糊。 有核心audio,audio单元,OpenAL。 这些之间有什么联系? 核心audio(包含作为低级别audio单元之一)是否是openAL的基础? OpenAL似乎没有被Xcodelogging,但我可以运行使用其function的代码。