2012-01-13 16 views
5

अगर मैं विस्तारित ऑडियो फ़ाइल सेवाओं के साथ एक ऑडियो फ़ाइल खोलते हैं, तो निम्न क्लाइंट डेटा स्वरूप का उपयोग कर ...मैं ऑडियोबफर सूची से नमूने कैसे पढ़ूं?

AudioStreamBasicDescription audioFormat; 
memset(&audioFormat, 0, sizeof(audioFormat)); 
audioFormat.mSampleRate = 44100.0; 
audioFormat.mFormatID = kAudioFormatLinearPCM; 
audioFormat.mFormatFlags = kAudioFormatFlagIsBigEndian | 
          kAudioFormatFlagIsSignedInteger | 
          kAudioFormatFlagIsPacked; 
audioFormat.mBytesPerPacket = 4; 
audioFormat.mFramesPerPacket = 1; 
audioFormat.mChannelsPerFrame = 2; 
audioFormat.mBytesPerFrame = 4; 
audioFormat.mBitsPerChannel = 16; 

और इसलिए की तरह एक AudioBufferList कॉन्फ़िगर ....

AudioBufferList bufferList; 
bufferList.mNumberBuffers = 1; 
bufferList.mBuffers[0].mDataByteSize = bufferSize; 
bufferList.mBuffers[0].mNumberChannels = audioFormat.mChannelsPerFrame; 
bufferList.mBuffers[0].mData = buffer; //malloc(sizeof(UInt8) * 1024 * audioFormat.mBytesPerPacket) 

कैसे है, तो , एमडीएटी में व्यवस्थित डेटा है? अगर मैं ऐसा

for (int i = 0; i < frameCount; i++) { 
     UInt8 somePieceOfAudioData = buffer[i]; 
} 

की तरह डेटा के माध्यम से पुनरावृति तो somePieceOfAudioData क्या है।

क्या यह नमूना या फ्रेम है (बाएं और दाएं चैनल एक साथ)? यदि यह नमूना है तो यह किस चैनल के लिए नमूना है? उदाहरण के लिए यदि यह सही चैनल से नमूना है, तो [i + 1] बाएं चैनल के लिए नमूना होगा?

कोई विचार, लिंक? धन्यवाद!

+0

'बफर ऑडियो के दो विभिन्न प्रकार ... एक एकल, मोनोफोनिक, noninterleaved ऑडियो के चैनल का प्रतिनिधित्व कर सकते [या] इंटरलीव्ड ऑडियो चैनलों की किसी भी संख्या के साथ-साथ mNumberChannels फ़ील्ड द्वारा निर्दिष्ट "। अब सवाल, मुझे लगता है, मैं कैसे जानता हूं कि कौन सा है, और क्या मुझे एक से अधिक ऑडियो बफर का उपयोग करना चाहिए? जैसे bufferList.mNumberBuffers = audioFormat.mChannelsPerFrame –

उत्तर

9

ऑडियो डेटा को तब तक इंटरलीव होने की उम्मीद है जब तक कि kAudioFormatFlagIsNonInterleaved सेट न हो। मैंने पाया है कि कोर ऑडियो प्रश्नों के लिए दस्तावेज़ों का सबसे अच्छा स्रोत आमतौर पर शीर्षलेख होता है। CoreAudioTypes.h निम्नलिखित टिप्पणी शामिल हैं: - जहां आम तौर पर उन बफ़र्स का प्रतिनिधित्व कर रहे

आमतौर पर, एक ASBD किया जा रहा है जब, खेतों बफ़र्स कि इस विवरण से प्रतिनिधित्व कर रहे हैं में नमूना डेटा की पूरा लेआउट का वर्णन एक ऑडियोबफर जो ऑडियोबफर सूची में निहित है।

हालांकि, जब एक एएसबीडी में KAudioFormatFlagIsNonInterleaved ध्वज है, ऑडियोबफर सूची में एक अलग संरचना और अर्थपूर्ण है। इस मामले में, एएसबीडी फ़ील्ड सूची में निहित ऑडियोबफर के प्रारूप का वर्णन करेगा, और प्रत्येक ऑडियोबफर में ऑडियो डेटा के एकल (मोनो) चैनल के लिए निर्धारित है। फिर, ASBD के mChannelsPerFrame ऑडियोबफर सूची में मौजूद ऑडियोबफर की कुल संख्या इंगित करेगा - जहां प्रत्येक बफर में एक चैनल होता है। इसका मुख्य रूप से ऑडियोयूनीट (और ऑडियो कनवर्टर) इस सूची के प्रतिनिधित्व के साथ प्रयोग किया जाता है - और इस संरचना के ऑडियोहार्डवेयर उपयोग में नहीं मिलेगा।

आपके विशेष मामले में, बफर में बाएं चैनल से शुरू होने वाले अंतःस्थापित शॉर्ट्स शामिल होंगे।

+0

धन्यवाद, और हाँ हेडर फाइलें बहुत उपयोगी रही हैं। मुझे कुछ अनियंत्रित ऑडियो इकाइयां भी मिली हैं जो आईओएस के लिए उपलब्ध हैं! –

1

हाँ, आप एक फ्रेम पढ़ रहे हैं और यह दो 16-बिट नमूने, बाएं और दाएं हैं। (असल में, मैं निश्चित नहीं हूं कि बाएं और कौन सा सही है। हम्म।)

शीर्षलेख फ़ाइलों के अतिरिक्त, एक्सकोड में निर्मित कक्षा संदर्भ उपयोगी हैं। मुझे लगता है कि मैं अपने कोड में "विकल्प-क्लिक" और "कमांड-क्लिक" का उपयोग कर रहा हूं, जब मैं इन प्रकार के विवरणों को हल कर रहा हूं। (एक्सकोड के लिए नए लोगों के लिए .. ये क्लिक आपको क्रमशः जानकारी और दस्तावेज़, और कूद-से-स्रोत स्थान प्राप्त करते हैं।)

आगामी पुस्तक "लर्निंग कोर ऑडियो: ए हैंड-ऑन गाइड टू ऑडियो प्रोग्रामिंग मैक के लिए और आईओएस "केविन एविला और क्रिस एडमसन द्वारा यह बताने का अच्छा काम है कि यह सब कैसे काम करता है।यह सफारी पुस्तकें ऑनलाइन पर अब "रफ कट" के रूप में उपलब्ध है:

http://my.safaribooksonline.com/book/audio/9780321636973

+0

धन्यवाद! मैं वह सब दूसरा कर दूंगा। मैंने पहले से ही उस पुस्तक के माध्यम से पढ़ा है, और यह काफी मददगार है! हेडर फाइलें भी उपयोगी थीं, लेकिन अक्सर यह स्पष्ट नहीं है कि यह कहां देखना है। उदाहरण के लिए, इस स्थिति में मैं ऑडियोस्ट्रीमबासिक डिस्क्रिप्शन, ऑडियोबफर, या ExtAudioFileRead देखता हूं। हालांकि मुझे अंततः मेरा जवाब मिल गया। –

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