@xikan 你好,想跟你请教个问题:
typedef struct MyAUGraphStruct{
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
AUGraph graph;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
AudioUnit remoteIOUnit;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
} MyAUGraphStruct;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#D28F5A;">
#define BUFFER_COUNT 15
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
MyAUGraphStruct myStruct;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
AudioBuffer recordedBuffers[BUFFER_COUNT];//Used to save audio data
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
int currentBufferPointer;//Pointer to the current buffer
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
int callbackCount;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
static void CheckError(OSStatus error, const char *operation)
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
{
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
if (error == noErr) return;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
char errorString[20];
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
// See if it appears to be a 4-char-code
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
*(UInt32 *)(errorString + 1) = CFSwapInt32HostToBig(error);
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
if (isprint(errorString[1]) && isprint(errorString[2]) &&
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
isprint(errorString[3]) && isprint(errorString[4])) {
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
errorString[0] = errorString[5] = '\'';
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
errorString[6] = '\0';
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
} else
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
// No, format it as an integer
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
sprintf(errorString, "%d", (int)error);
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
fprintf(stderr, "Error: %s (%s)\n", operation, errorString);
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
exit(1);
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
}
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
OSStatus InputCallback(void *inRefCon,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
AudioUnitRenderActionFlags *ioActionFlags,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
const AudioTimeStamp *inTimeStamp,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
UInt32 inBusNumber,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
UInt32 inNumberFrames,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
AudioBufferList *ioData){
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//TODO: implement this function
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
MyAUGraphStruct* myStruct = (MyAUGraphStruct*)inRefCon;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
// Get samples from input bus(bus 1)
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
CheckError(AudioUnitRender(myStruct->remoteIOUnit,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
ioActionFlags,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
inTimeStamp,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
1,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
inNumberFrames,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
ioData),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"AudioUnitRender failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//save audio to ring buffer and load from ring buffer
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
AudioBuffer buffer = ioData->mBuffers[0];
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
recordedBuffers[currentBufferPointer].mNumberChannels = buffer.mNumberChannels;
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
recordedBuffers[currentBufferPointer].mDataByteSize = buffer.mDataByteSize;
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
free(recordedBuffers[currentBufferPointer].mData);
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
recordedBuffers[currentBufferPointer].mData = malloc(sizeof(SInt16)*buffer.mDataByteSize);
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
memcpy(recordedBuffers[currentBufferPointer].mData,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
buffer.mData,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
buffer.mDataByteSize);
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
currentBufferPointer = (currentBufferPointer+1)%BUFFER_COUNT;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
if (callbackCount>=BUFFER_COUNT) {
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
memcpy(buffer.mData,
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
recordedBuffers[currentBufferPointer].mData,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
buffer.mDataByteSize);
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
}
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
NSLog(@"%d",buffer.mDataByteSize);
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
NSLog(@"%d",buffer.mData);
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
callbackCount++;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
return noErr;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
}
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#C2349B;">
@implementation HZAuidoUnit
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<a class="referer" target="_blank">@synthesize</a> streamFormat;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
- (void)initUnit{
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
currentBufferPointer = 0;
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
callbackCount = 0;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
[self setupSession];
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
[self createAUGraph:&myStruct];
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
[self setupRemoteIOUnit:&myStruct];
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
[self startGraph:myStruct.graph];
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
}
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
-(void)openOrCloseEchoCancellation{
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
UInt32 echoCancellation = 1;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
UInt32 size = sizeof(echoCancellation);
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
CheckError(AudioUnitGetProperty(myStruct.remoteIOUnit,
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
kAUVoiceIOProperty_BypassVoiceProcessing,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
kAudioUnitScope_Global,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
0,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
&echoCancellation,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
&size),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"kAUVoiceIOProperty_BypassVoiceProcessing failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
}
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
-(void)startGraph:(AUGraph)graph{
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
CheckError(AUGraphInitialize(graph),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"AUGraphInitialize failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
CheckError(AUGraphStart(graph),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"AUGraphStart failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
}
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
-(void)setupRemoteIOUnit:(MyAUGraphStruct*)myStruct{
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//Open input of the bus 1(input mic)
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
UInt32 enableFlag = 1;
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
CheckError(AudioUnitSetProperty(myStruct->remoteIOUnit,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
kAudioOutputUnitProperty_EnableIO,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
kAudioUnitScope_Input,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
1,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
&enableFlag,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
sizeof(enableFlag)),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"Open input of bus 1 failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
// Open output of bus 0(output speaker)
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
CheckError(AudioUnitSetProperty(myStruct->remoteIOUnit,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
kAudioOutputUnitProperty_EnableIO,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
kAudioUnitScope_Output,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
0,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
&enableFlag,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
sizeof(enableFlag)),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"Open output of bus 0 failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//Set up stream format for input and output
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
streamFormat.mFormatID = kAudioFormatLinearPCM;
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
streamFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
streamFormat.mSampleRate = 8000.00;
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
streamFormat.mFramesPerPacket = 1;
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
streamFormat.mBytesPerFrame = 2 ;
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
streamFormat.mBytesPerPacket = 2;
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
streamFormat.mBitsPerChannel = 16;
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
streamFormat.mChannelsPerFrame = 1;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
CheckError(AudioUnitSetProperty(myStruct->remoteIOUnit,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
kAudioUnitProperty_StreamFormat,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
kAudioUnitScope_Input,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
0,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
&streamFormat,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
sizeof(streamFormat)),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"kAudioUnitProperty_StreamFormat of bus 0 failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
CheckError(AudioUnitSetProperty(myStruct->remoteIOUnit,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
kAudioUnitProperty_StreamFormat,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
kAudioUnitScope_Output,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
1,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
&streamFormat,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
sizeof(streamFormat)),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"kAudioUnitProperty_StreamFormat of bus 1 failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//Set up input callback
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
AURenderCallbackStruct input;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
input.inputProc = InputCallback;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
input.inputProcRefCon = myStruct;
</p>
<p style="font-size:18px;font-family:Menlo;color:#93C86A;">
CheckError(AudioUnitSetProperty(myStruct->remoteIOUnit,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
kAudioUnitProperty_SetRenderCallback,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
kAudioUnitScope_Global,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
0,//input mic
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
&input,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
sizeof(input)),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"kAudioUnitProperty_SetRenderCallback failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
}
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
-(void)createAUGraph:(MyAUGraphStruct*)myStruct{
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//Create graph
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
CheckError(NewAUGraph(&myStruct->graph),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"NewAUGraph failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//Create nodes and add to the graph
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//Set up a RemoteIO for synchronously playback
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
AudioComponentDescription inputcd = {0};
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
inputcd.componentType = kAudioUnitType_Output;
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//inputcd.componentSubType = kAudioUnitSubType_RemoteIO;
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//we can access the system's echo cancellation by using kAudioUnitSubType_VoiceProcessingIO subtype
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
inputcd.componentSubType = kAudioUnitSubType_VoiceProcessingIO;
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
inputcd.componentManufacturer = kAudioUnitManufacturer_Apple;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
inputcd.componentFlags = 0;
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
inputcd.componentFlagsMask = 0;
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
AUNode remoteIONode;
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//Add node to the graph
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
CheckError(AUGraphAddNode(myStruct->graph,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
&inputcd,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
&remoteIONode),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"AUGraphAddNode failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//Open the graph
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
CheckError(AUGraphOpen(myStruct->graph),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"AUGraphOpen failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#4CBF57;">
//Get reference to the node
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
CheckError(AUGraphNodeInfo(myStruct->graph,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
remoteIONode,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
&inputcd,
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
&myStruct->remoteIOUnit),
</p>
<p style="font-size:18px;font-family:Menlo;color:#E44448;">
"AUGraphNodeInfo failed");
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
}
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
-(void)createRemoteIONodeToGraph:(AUGraph*)graph{
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
}
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
-(void)setupSession{
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
AVAudioSession* session = [AVAudioSession sharedInstance];
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
</p>
<p style="font-size:18px;font-family:Menlo;color:#00AFCA;">
[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
[session setActive:YES error:nil];
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
}
</p>
<p style="font-size:18px;font-family:Menlo;color:#FFFFFF;">
<br>
</p>
本来是44100的采样率 改为8000 报错,请教
感激不尽
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。