2010-12-08 27 views
1
CFStringRef state; 
    UInt32 propertySize = sizeof(CFStringRef); 
// AudioSessionInitialize(NULL, NULL, NULL, NULL); 
    AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state); 
    if(CFStringGetLength(state) == 0) 
// if(state == 0) 
    { //SILENT 
     NSLog(@"Silent switch is on"); 
    // create vibrate 
    // AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 
    UInt32 audioCategory = kAudioSessionCategory_MediaPlayback; 
    AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(UInt32), &audioCategory); 

    } 
    else { //NOT SILENT 
     NSLog(@"Silent switch is off"); 

    } 

où jamais j'utilise code ci-dessus je suis capable de lire un fichier son en mode silencieuxImpossible de démarrer l'enregistrement à partir d'erreur File d'attente audio

mais après lecture d'un fichier son enregistré en mode silencieux lorsque je tente d'enregistrer la voix à nouveau

Je reçois une erreur

LIke

2010-12-08 13: 29: 56,710 VoiceRecorder [382: 307] -66681 Impossible de démarrer Audio File d'attente Erreur lors du démarrage d'enregistrement

est le code ici

// file url 
[self setupAudioFormat:&recordState.dataFormat]; 
CFURLRef fileURL = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8 *) [filePath UTF8String], [filePath length], NO); 
// recordState.currentPacket = 0; 
    // new input queue 
OSStatus status; 
status = AudioQueueNewInput(&recordState.dataFormat, HandleInputBuffer, &recordState, CFRunLoopGetCurrent(),kCFRunLoopCommonModes, 0, &recordState.queue); 
if (status) {CFRelease(fileURL); printf("Could not establish new queue\n"); return NO;} 
    // create new audio file 
status = AudioFileCreateWithURL(fileURL, kAudioFileAIFFType, &recordState.dataFormat, kAudioFileFlags_EraseFile, &recordState.audioFile); CFRelease(fileURL); // thanks august joki 
if (status) {printf("Could not create file to record audio\n"); return NO;} 
    // figure out the buffer size 
DeriveBufferSize(recordState.queue, recordState.dataFormat, 0.5, &recordState.bufferByteSize);  // allocate those buffers and enqueue them 
for(int i = 0; i < NUM_BUFFERS; i++) 
{ 
    status = AudioQueueAllocateBuffer(recordState.queue, recordState.bufferByteSize, &recordState.buffers[i]); 
    if (status) {printf("Error allocating buffer %d\n", i); return NO;} 

    status = AudioQueueEnqueueBuffer(recordState.queue, recordState.buffers[i], 0, NULL); 
    if (status) {printf("Error enqueuing buffer %d\n", i); return NO;} 
}  // enable metering 
UInt32 enableMetering = YES; 
status = AudioQueueSetProperty(recordState.queue, kAudioQueueProperty_EnableLevelMetering, &enableMetering,sizeof(enableMetering)); 
if (status) {printf("Could not enable metering\n"); return NO;} 
    // start recording 
status = AudioQueueStart(recordState.queue, NULL); // status = 0;  NSLog(@"%d",status); 
if (status) {printf("Could not start Audio Queue\n"); return NO;} 
recordState.currentPacket = 0; 
recordState.recording = YES; 
return YES; 

je reçois une erreur ici

Répondre

0

Je faisais face à problème similaire dans iOS 7.1. Ajouter à la suite AppDelegate's didFinishLaunchingWithOptions:

AVAudioSession * audioSession = [AVAudioSession sharedInstance]; 
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: nil]; 
[audioSession setActive:YES error: nil]; 

EDIT: Au-dessus de code fonctionne pour moi