获取iPhone手机上话筒的声音

本文介绍了如何在iOS应用中初始化AVCaptureSession并获取声音,包括添加头文件、配置音频输入输出、开始运行会话等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1。添加头文件,并添加相应的framework
#import<CoreMedia/CoreMedia.h>

#import<AVFoundation/AVFoundation.h>

2。添加 AVCaptureAudioDataOutputSampleBufferDelegate

3。初始化并开始获取声音



AVCaptureSession*captureSession;






-(void)initVoice

{

if(captureSession)

{

[captureSessionstartRunning];

}

else

{

captureSession= [[AVCaptureSessionalloc]init];

AVCaptureDevice*audioDevice = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeAudio];

if(audioDevice) {

NSError*error;

AVCaptureDeviceInput*audioIn = [AVCaptureDeviceInputdeviceInputWithDevice:audioDeviceerror:&error];

if ( !error ) {

if ([captureSession canAddInput:audioIn])

[captureSession addInput:audioIn];

else

NSLog(@"Couldn't add audio input");

}

else

NSLog(@"Couldn't create audio input");

}

else

NSLog(@"Couldn't create audio capture device");

AVCaptureAudioDataOutput*audioOut = [[AVCaptureAudioDataOutputalloc]init];

[audioOutsetSampleBufferDelegate:selfqueue:dispatch_get_main_queue()];

if ([captureSession canAddOutput:audioOut]) {

[captureSession addOutput:audioOut];

//audioConnection =

[audioOutconnectionWithMediaType:AVMediaTypeAudio];

}

else

NSLog(@"Couldn't add audio output");

[audioOut release];

[captureSessionstartRunning];

}

}

附件:需要用到的AVCaptureAudioDataOutput



#define SINT16_MAX 32767.0;

@interface AVCaptureOutput (AVCaptureOutputUtilities)

- (AVCaptureConnection *)connectionWithMediaType:(NSString *)mediaType;

@end

@implementation AVCaptureOutput (AVCaptureOutputUtilities)

- (AVCaptureConnection *)connectionWithMediaType:(NSString *)mediaType {

for(AVCaptureConnection*connectioninself.connections) {

for ( AVCaptureInputPort *port in [connection inputPorts] ) {

if ( [[port mediaType] isEqual:mediaType] ) {

return [[connection retain] autorelease];

}

}

}

returnnil;

}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值