2011-04-29 12 views
7

मैं AVAssetReader से ऑडियोबफर सूची वापस प्राप्त करने में सक्षम होना चाहता हूं जिसमें 2 बफर हैं ताकि मैं ऑडियोउनीट के माध्यम से बाएं और दाएं ऑडियो को संसाधित कर सकूं। मैंने नीचे आउटपुट सेटिंग्स का उपयोग करने की कोशिश की लेकिन जब तक मैं kAudioChannelLayoutTag_Stereo द्वारा सेट स्टीरियो लेआउट निर्दिष्ट नहीं करता तब तक यह तब तक नहीं पढ़ेगा।क्या स्टीरियो चैनल लेआउट वापस पाने के लिए AVAssetReader का उपयोग करना संभव है?

क्या AVAssetReader के लिए एक गैर-अंतःस्थापित परिणाम वापस करना संभव है?

यदि नहीं, तो मैं इसे एक गैर-अंतःस्थापित ऑडियोबफर सूची में कैसे परिवर्तित करूं? मैंने ऑडियो कनवर्टर सेवाओं का उपयोग करने की कोशिश की है, लेकिन मैं इसे ऑडियोस्ट्रीमबासिक डिस्क्रिप्शन के लिए इनपुट या आउटपुट मान स्वीकार करने के लिए नहीं मिल सकता। (एएसबीडी) यदि मैं AVAssetReader से इच्छित प्रारूप में डेटा नहीं प्राप्त कर सकता हूं, तो मैं इसे कम से कम प्रारूप में परिवर्तित करने में सक्षम होना चाहता हूं।

किसी भी सुझाव की सराहना की जाती है।

- (NSDictionary *) getOutputSettings { 
    AudioChannelLayout channelLayout; 
    memset(&channelLayout, 0, sizeof(AudioChannelLayout)); 
    channelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo; 
    NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithInt:kAudioFormatLinearPCM], AVFormatIDKey, 
            [NSNumber numberWithFloat:44100.0], AVSampleRateKey, 
            [NSNumber numberWithInt:2], AVNumberOfChannelsKey, 
            [NSData dataWithBytes:&channelLayout length:sizeof(AudioChannelLayout)], AVChannelLayoutKey, 
            [NSNumber numberWithInt:16], AVLinearPCMBitDepthKey, 
            [NSNumber numberWithBool:NO], AVLinearPCMIsNonInterleaved, 
            [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey, 
            [NSNumber numberWithBool:NO], AVLinearPCMIsBigEndianKey, 
            nil]; 

    return outputSettings; 
} 
+0

हो गया। मैंने पाया कि कुछ पुराने लोग वहां लटक रहे हैं। – Brennan

उत्तर

0

मैंने सीखा है कि मेरे पास डिफ़ॉल्ट आउटपुट सेटिंग्स (शून्य) के साथ AVAssetReader रिटर्न परिणाम हो सकते हैं जो मुझे फ्लोट मानों का एक अंतःस्थापित परिणाम देगा। फ्लोट मानों का बफर बफर के माध्यम से बाएं से दाएं से वैकल्पिक होता है। मैं इन मानों के साथ काम करने में सक्षम हूं जो -1.0 से 1.0 की सीमा में हैं लेकिन ऑडियो चलाने के लिए मूल्यों को एक छोटे से हस्ताक्षरित int की सीमा में बढ़ाने के लिए आवश्यक है, इसलिए मैं उन्हें SHRT_MAX द्वारा गुणा करता हूं और सुनिश्चित करता हूं कि मूल्य SHRT_MAX और SHRT_MIN की सीमा के भीतर रहते हैं, इसलिए ऑडियो अपेक्षित के रूप में चलता है।

चूंकि इंटरलीव्ड बफर उसी बफर पर एल और आर मान देता है, इसे 1 बफर पर 2 चैनल माना जाता है जो ऑडियोबफर सूची में दिखाई देता है। पहले मैं 1 चैनल प्रति बफर के साथ 2 बफर वापस पाने में सक्षम था लेकिन अब यह वास्तव में जरूरी नहीं है कि मैं बहुत सरल इंटरलीवेट प्रारूप को समझूं।

+0

अजीब। मैं एक समान सेटअप का उपयोग कर रहा हूँ। यदि मैं चैनलों को अलग करने की कोशिश करता हूं, तो यह प्लेबैक दर को दोगुना करता है, जो ऐसा लगता है कि यह ऑडियो को मोनो में परिवर्तित कर रहा है। – jin

1

मुझे लगता है कि kAudioChannelLayoutTag_Stereo interleaved नमूने अनुरोध कर रहा है, तो मैं इसे खो देंगे।

यह सब उस आउटपुट सेटिंग्स के साथ आप किस प्रकार के AVAssetReaderOutput बना रहे हैं इस पर निर्भर करता है। AVAssetReaderTrackOutput एलपीसीएम को डीकोडिंग से परे कोई रूपांतरण नहीं करता है, लेकिन AVAssetReaderAudioMixOutput एक गुच्छा अधिक प्रारूप कुंजी स्वीकार करता है, वास्तव में यह शायद एक AVAssetReaderTrackOutput + AudioConverter है।

संबंधित मुद्दे