खोला जा सकता है और मैं एक आईओएस ऐप को संशोधित करने की कोशिश कर रहा हूं जो अन्य आईओएस उपकरणों को ऑडियो फाइलें (सुरक्षित रूप से/एन्क्रिप्टेड) भेज सकता है। यह ऑडियो फ़ाइलों को रिकॉर्ड करने के लिए AVAudioRecorder का उपयोग करता है, और यह किसी भी प्राप्त ऑडियो फ़ाइलों को वापस चलाने के लिए AVAudioPlayer का उपयोग करता है।AVAudioRecorder .m4a फ़ाइलों को नहीं बनाता है जिन्हें
अब मैं एंड्रॉइड के साथ संगत फ़ाइलों को बनाने और भेजने के लिए ऐप को संशोधित करने की कोशिश कर रहा हूं। मैं इस के लिए मौजूदा AVAudioRecorder कोड संशोधित:
[settings setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[settings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
[settings setValue:[NSNumber numberWithInt:16] forKey:AVEncoderBitRateKey];
[settings setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
[settings setValue:[NSNumber numberWithFloat:48000.0] forKey:AVSampleRateKey];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dirPath = [paths objectAtIndex:0];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd HH-mm"];
NSString *filename = [NSString stringWithFormat:@"%@.aac", [format stringFromDate:NSDate.date]];
इस द्वारा बनाई गई फ़ाइलों पर एक मैक खेलने योग्य हैं, iOS उपकरण है, लेकिन किसी Android डिवाइस पर नहीं। यदि फ़ाइल एक्सटेंशन मैन्युअल रूप से ".m4a" में समाप्त हो गया था, तो फ़ाइल एंड्रॉइड पर चलती है।
(".aac" प्रारूप के साथ लाभ यह है कि एप्लिकेशन के पुराने संस्करण इन फ़ाइलों को प्राप्त करने और उन्हें वापस खेल सकते हैं - मैं पश्च संगतता बनाए रखा गया है।)
तो मैं यह बदलाव किया है:
NSString *filename = [NSString stringWithFormat:@"%@.m4a", [format stringFromDate:NSDate.date]];
हालांकि, परिणामस्वरूप फ़ाइल (जिसे AVAudioRecorder से कोई त्रुटि नहीं बनाई गई है) मैक पर और आईओएस डिवाइस पर नहीं खेला जा सकता है। और मैं यह सुनकर इंतजार कर रहा हूं कि यह एंड्रॉइड पर काम करता है या नहीं।
AVAudioPlayer कि फ़ाइल को खोलने की कोशिश करता है, यह आउटपुट:
त्रुटि डोमेन = NSOSStatusErrorDomain कोड = +१६८५३४८६७१ "। आपरेशन पूरी नहीं हो सकी (OSStatus त्रुटि 1685348671.)" कोड +१६८५३४८६७१ -> "dta?": फ़ाइल विकृत है, इसके प्रकार की ऑडियो फ़ाइल का मान्य उदाहरण नहीं है, या ऑडियो फ़ाइल के रूप में पहचाना नहीं गया है।
फ़ाइल को केवल ".aac" रखने के लिए नाम बदलकर इस तथ्य को नहीं बदला जाता है कि इसे मैक या आईओएस पर कुछ भी लोड नहीं किया जा सकता है।
अभी, ऐसा लगता है कि ".aac" फ़ाइल बनाने का सबसे अच्छा समाधान होगा, और फिर एंड्रॉइड एंड ".aac" को ".m4a" से प्रतिस्थापित करें और इसे चलाने का प्रयास करें।
प्रश्न 1: क्या किसी को पता है कि फ़ाइल नाम एक्सटेंशन को बदलने से AVAudioPLayer विफल हो सकता है? बीटीडब्ल्यू, ".m4a" फ़ाइल जो मैंने ऊपर बनाई है, मैक पर मेरे पास जो कुछ भी है, उसके साथ खोला नहीं जा सकता है, इसलिए मैं यह नहीं बता सकता कि समस्या फ़ाइल प्रारूप के साथ है या आईओएस या मैक की अक्षमता इस फ़ाइल प्रकार को पढ़ने के लिए है ।
https://dl.dropboxusercontent.com/u/14939586/2013-07-08%2013-24.m4a https://dl.dropboxusercontent.com/u/14939586/2013-07-08%2010-11.aac
प्रश्न 2::
किसी को भी उत्सुक के लिए, मैं एक ".aac" की एक प्रति और AVAudioRecorder से एक ".m4a" फ़ाइल, यहाँ रखा मैं एक के लिए AVAudioRecorder सेट जबकि चैनल, परिणामस्वरूप फ़ाइल स्टीरियो है। क्यूं कर? (कम से कम यही है कि वीएलसी मेटाडेटा के बारे में क्या कहता है)
प्रश्न 3: क्या वैसे भी हानि रहित एन्कोडिंग के लिए एएसी-एलसी निर्दिष्ट करने के लिए है? या क्या मैं केवल ऐसा कर सकता हूं यदि मैं AVAudioRecorder से निम्न स्तर API पर जाता हूं?
यह सहायक है: http://stackoverflow.com/questions/4279311/how-to-record-voice-in-m4a-format –
उस प्रश्न पर स्वीकृत उत्तर पूरी तरह से गलत है। फ़ाइल वास्तविक एएसी फ़ाइल नहीं है। यह सिर्फ एक एम 4 ए में लपेटा गया है। अन्य उत्तरों में से एक सही है। यह उत्तर भी अधिक उपयोगी था: http://stackoverflow.com/a/12698691/86020 – mahboudz