2012-03-14 34 views
14

एक ऐप्लिकेशन में मैं वर्तमान में विकसित कर रहा हूँ, मैं और अधिक या कम एक ईंट की दीवार तक पहुंचते हैं। एप्लिकेशन में आप एक दृश्य दर्ज कर सकते हैं जो मानक तालिका दृश्य में सभी स्थानीय रूप से सहेजी गई ऑडियो फ़ाइलों को सूचीबद्ध करता है। यहां से आप उन्हें खेलने के लिए उन पर क्लिक कर सकते हैं, या एक नई रिकॉर्डिंग करने के लिए नीचे एक रिकॉर्ड बटन दबा सकते हैं, जो बाद में स्वचालित रूप से ऐप्स सैंडबॉक्स में सहेजा जाएगा।मालूम होता है यादृच्छिक फ़ाइल भ्रष्टाचार AVAudioRecorder (कभी कभी फ़ाइल वापस चलाया नहीं जा सकता) का उपयोग कर - आईओएस

अब यह सब वास्तव में पूरी तरह से ठीक काम करता है। मैं बैठकर रिकॉर्डिंग कर सकता हूं और उन्हें वापस चला सकता हूं। मैं बैठकर परीक्षण कर सकता हूं और बिना किसी समस्या के 45 के आसपास परीक्षण कर सकता हूं। फिर अचानक यादृच्छिक समय पर मैं एक बहुत ही अजीब समस्या को मार दूंगा। समस्या यह है कि रिकॉर्डर अचानक अचानक भ्रष्ट फाइलों को सहेजने के लिए शुरू नहीं करता है, जिसे वापस नहीं खेला जा सकता है और आकार में बिल्कुल 4096 बाइट हैं, इससे कोई फर्क नहीं पड़ता कि आप कितने समय तक रिकॉर्डर हैं।

मैं एक पूरी तरह से मानक ढंग से AVAudioRecorder उपयोग करते हैं, इस तरह यह स्थापित करने:

// Specific settings for the audio recording 
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSNumber numberWithInt:AVAudioQualityMin], 
    AVEncoderAudioQualityKey, 
    [NSNumber numberWithInt:8], 
    AVEncoderBitRateKey, 
    [NSNumber numberWithInt: 2], 
    AVNumberOfChannelsKey, 
    [NSNumber numberWithFloat:22000.0], 
    AVSampleRateKey, 
    nil]; 

NSError *error = nil; 
audioRecorder = [[AVAudioRecorder alloc] 
    initWithURL:contentURL 
    settings:recordSettings 
    error:&error]; 
audioRecorder.delegate = self; 

मैं इस तरह रिकॉर्डिंग शुरू:

if (!isRecording) { 
    isRecording = YES; 
    [audioRecorder record]; 

    // Start the timer 
    recordTiming = [NSDate date]; 

    timeCheck = [NSTimer 
     scheduledTimerWithTimeInterval:1.0f 
     target:self 
     selector:@selector(timeCheck) 
     userInfo:nil 
     repeats:YES]; 
} 

और फिर इस के साथ यह रोक:

if (isRecording) { 
    [audioRecorder stop]; 

    // Stop the timer 
    [timeCheck invalidate]; 
} 

मुझे नहीं पता कि क्या इस समस्या होने की कारण बन सकता है है। अब तक मैंने लगभग हर चीज की कोशिश की है। मैंने यह सुनिश्चित करने के लिए जांच की है कि रिकॉर्डर ऑब्जेक्ट को ठीक से पुनर्नवीनीकरण किया जाता है (इसलिए आपके पास अब प्रत्येक रिकॉर्डिंग के लिए एक नया उदाहरण है), और यह सुनिश्चित करने के लिए कि पुराने संदर्भ को अवरुद्ध करने के लिए कुछ भी नहीं है, लेकिन कुछ भी हल नहीं करता है।

ऐसा कोई है जो क्या के एक मामूली विचार दूषित फ़ाइलों के साथ समस्याओं का कारण बन सकता है है?

+1

तो तुम, सही कह रहे हैं त्रुटि चर शून्य के बाद audioRecorder आरंभ नहीं हो जाता हमेशा होता है? –

+0

हां, सही :) असल में मेरे पास NSLog के लिए कुछ त्वरित त्रुटि जांच है ताकि यह सुनिश्चित किया जा सके कि यह सही ढंग से प्रारंभ किया गया है और एनएसईआरआर शून्य और आगे है। – CodingBeagle

+0

समझ गया, चलिए अपने कोड को बेहतर बनाते हैं, तो समस्या शायद स्पष्ट हो या गायब होनी चाहिए। IsRecording var का उपयोग करने के बजाय आप एक ऑडियो रिकॉर्डर संपत्ति रिकॉर्डिंग का उपयोग कर सकते हैं; मैं ऑडियो सत्र प्रारंभिकता नहीं देख सकता लेकिन आपने शायद इसे छोड़ दिया है। हालांकि मैं आपको त्रुटि प्रबंधन में सुधार करने का भी सुझाव दूंगा, नीचे दिए गए उत्तर को संदर्भ के रूप में उपयोग किया जा सकता है: http://stackoverflow.com/questions/1010343/how-do-i-record-audio-on-iphone-with -वाउडीओडोरकॉर्डर –

उत्तर

6

नोट: चूंकि ओपी कुछ दिनों के लिए निष्क्रिय है और मुझे लगता है कि इस प्रश्न का उत्तर जनता के भविष्य के संदर्भ के लिए दिया जाना चाहिए, इस प्रकार मैं यह उत्तर पोस्ट करता हूं।

AVAudioSession शुरू रिकॉर्डिंग से पहले प्राप्त किया जाना है।

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
NSError *err = nil; 
[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err]; 
if(err){ 
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
    return; 
} 
err = nil; 
[audioSession setActive:YES error:&err]; 
if(err){ 
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
    return; 
} 

संदर्भ: https://stackoverflow.com/a/9706731/188331

+0

यह वास्तव में समस्या थी :) यह थोड़ी देर हो गया है क्योंकि मैंने अपने पुराने प्रश्नों की जांच की है इसलिए मुझे इसके लिए खेद है, लेकिन यह वास्तव में समस्या का समाधान है। – CodingBeagle