我正在使用AVAudioSession和
我知道这听起来像是疯狂但是有没有办法访问麦克风或扬声器的输入和输出数据?例如,我想将所有音频数据流打印到麦克风中。
有没有办法做到这一点?我查看了核心音频,但我不熟悉它能够用它来打印出输入和输出。
谢谢!
答案 0 :(得分:1)
AVAudioSession
只是让iOS识别您的应用想要使用麦克风执行某些操作的第一步。我假设是" print"您的意思是视觉上或将音频数据附加到文件。
如果您要将音频录制到文件,可以使用AVAudioRecorder
类:
//What are our output settings?
NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];
[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
// Create the recorder where recorder is declared as a property of the class & outputFileURL is an NSURL to a file path you want to record to
recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL];
recorder.delegate = self;
[recorder prepareToRecord];
// Tell the system you are going to use the mic
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:0 error:nil];
[session setActive:YES error:nil];
// Start recording
[recorder record];
---------------------------------
//When you are done call:
[recorder stop];
NSURL *savedFileURL = recorder.url;
如果你想使用CoreAudio以便你可以获得每个缓冲区并决定如何处理它,你将不得不退后一步并学习CoreAudio的结构。 CoreAudio允许您更灵活地设置音频系统的路由和设计。它不能在一篇文章中解释,但如果你这样做,一种从麦克风获取数据的方法是:
从AudioUnit
创建AudioComponent
(类型:kAudioUnitType_Output
,子类型:kAudioUnitSubType_RemoteIO
)
在audioUnit上启用IO
将audioUnit的kAudioUnitProperty_StreamFormat
属性设置为AudioStreamBasicDescription
(很可能是PCM格式)
使用AURenderCallbackStruct