2012-09-16 16 views
5

मेरे प्रश्न को पढ़ने के लिए कुछ समय लेने के लिए धन्यवाद।विंडोज 7 पर विंडोज मीडिया फाउंडेशन का उपयोग कर एएसी को कच्ची ऑडियो फ़ाइल

मैं क्यूटी और विंडोज एपीआई का उपयोग कर एक सी ++ एप्लिकेशन विकसित कर रहा हूं।

मैं कच्चे प्रारूप में छोटी 10s ऑडियो फ़ाइलों में माइक्रोफ़ोन आउटपुट रिकॉर्ड कर रहा हूं, और मैं उन्हें एएसी प्रारूप में रूपांतरित करना चाहता हूं।

मैंने जितनी चीजें कर सकें उतनी चीजें पढ़ने की कोशिश की है, और सोचा कि विंडोज मीडिया नींव ट्रांसकोड एपीआई से शुरू करना एक अच्छा विचार होगा।

समस्या यह है कि, मैं "CreateObjectFromUrl" फ़ंक्शन में .raw या .pcm फ़ाइल का उपयोग नहीं कर सकता, और इसलिए मैं इस पल के लिए यहां बहुत अधिक अटक गया हूं। यह असफल रहता है। घंटा रिटर्न कोड 32220 9 1460 के बराबर है। मैंने फ़ंक्शन में .mp3 फ़ाइल को पास करने का प्रयास किया है और निश्चित रूप से यह काम करता है, इसलिए कोई यूआरएल-मानव-विफलता शामिल नहीं है।

MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID; 

IMFSourceResolver* pSourceResolver = NULL; 
IUnknown* pUnkSource = NULL; 

// Create the source resolver. 
hr = MFCreateSourceResolver(&pSourceResolver); 
if (FAILED(hr)) 
{ 
    qDebug() << "Failed !"; 
} 


// Use the source resolver to create the media source. 


hr = pSourceResolver->CreateObjectFromURL(
     sURL,      // URL of the source. 
     MF_RESOLUTION_MEDIASOURCE, // Create a source object. 
     NULL,      // Optional property store. 
     &ObjectType,    // Receives the created object type. 
     &pUnkSource     // Receives a pointer to the media source. 
     ); 

MFCreateSourceResolver ठीक काम करता है, लेकिन CreateObjectFromURL सफल नहीं होता :(

तो मैं आप लोगों के लिए दो प्रश्न हैं:

  1. यह संभव का उपयोग कर aac फ़ाइलें के लिए कच्चे ऑडियो फ़ाइलें एन्कोड करने के लिए है विंडोज मीडिया नींव?
  2. यदि हां, तो मुझे क्या चाहिए मुझे पूरा करने के लिए मुझे क्या पढ़ना चाहिए?

मैं यह इंगित करना चाहता हूं कि मैं केवल ffmpeg या libav का उपयोग नहीं कर सकता क्योंकि मैं अपने सॉफ़्टवेयर के लिए कोई लाइसेंस नहीं ले सकता, और यह नहीं चाहता कि यह जीपीएल लाइसेंस के तहत हो। लेकिन यदि कच्चे ऑडियो फ़ाइलों को एएसी में एन्कोड करने के लिए विंडोज मीडिया नींव के विकल्प हैं, तो मुझे उन्हें सुनकर खुशी होगी।

और आखिरकार, मेरी बुरी अंग्रेजी के लिए खेद है, यह स्पष्ट रूप से मेरी मूल भाषा नहीं है और मुझे खेद है कि अगर मैंने आपकी आंखें खून की हैं। (और खुश अगर मैं आप हँसते बनाया)

आपका दिन शुभ हो

उत्तर

3

घंटा वापसी कोड के बराबर होती है 3222091460

उन HRESULT कोड हैं। this "ShowHresult" tool का उपयोग करें ताकि उन्हें आसानी से आपके लिए डीकोड किया जा सके। कोड का अर्थ है 0xC00D36C4MF_E_UNSUPPORTED_BYTESTREAM_TYPE "दिए गए यूआरएल का बाइट स्ट्रीम प्रकार असमर्थित है।"

समस्या यह है कि इन कच्ची फ़ाइलों के लिए कोई समर्थन नहीं है, .WAV कच्चे ऑडियो के लिए एक अच्छा स्रोत है - फ़ाइल में प्रारूप डिस्क्रिप्टर और पेलोड दोनों हैं।

आप स्पष्ट रूप से कच्चे ऑडियो फ़ाइल से डेटा पढ़ सकते हैं और मीडिया फाउंडेशन के AAC Encoder का उपयोग करके IMFTransform इंटरफ़ेस के माध्यम से एएसी में संपीड़ित कर सकते हैं। यह काफी आसान है और आपके पास आउटपुट पर एएसी डेटा है उदा। कच्चे .AAC में लिखें। मीडिया फाउंडेशन को

वैकल्पिक विकल्पों डायरेक्टशो (हालांकि मैंने सोचा कि यह शुरू करने के लिए इतना आसान नहीं हो सकता है वहाँ उपयुक्त कोडेक कर रहे हैं,), libfaac है, FFmpeg के libavcodec (LGPL के अंतर्गत उपलब्ध है, न कि जीपीएल)।

+1

हाय रोमन और आपके उत्तर के लिए बहुत बहुत धन्यवाद। इसने चीजों को बहुत स्पष्ट बना दिया, और मैं आपके समय के लिए पर्याप्त धन्यवाद नहीं दे सकता। मैं कच्चे एएसी प्राप्त करने के लिए डब्ल्यूएमएफ से एएसी एनकोडर के साथ जाऊंगा और देख सकता हूं कि मैं वहां से क्या कर सकता हूं। यदि मैं आपको अपने ज्ञान के 2 अन्य मिनट पूछ सकता हूं, क्योंकि मैं ऑडियो एन्कोडिंग में बहुत शुरुआत कर रहा हूं ... मुझे यह जानने में मदद करने के लिए कोई कोड उदाहरण नहीं दिख रहा है कि पीसीएम को बदलने के लिए मुझे किन कदमों का पालन करना चाहिए aac। जैसा कि मैं इसे समझता हूं अब आपको धन्यवाद, मुझे एक IMFTransform इंटरफ़ेस बनाने, इनपुट कच्चे और आउटपुट एएसी सेट करने, नमूना अवधि सेट करने और ProcessOutput को कॉल करने की आवश्यकता है। क्या यह इतना आसान है? –

+1

दुर्भाग्य से मुझे अच्छे संदर्भ नमूना कोड से अवगत नहीं है। हालांकि मैं इसे अतीत में कुछ समय काम करता था, इसलिए मुझे पता है कि यह अच्छी तरह से काम करता है। हां आपको मूल रूप से क्या चाहिए [एएसी एनकोडर] (http://msdn.microsoft.com/library/dd742785%28v=vs.85%29.aspx) का पालन करना और एमएफटी कक्षा को तुरंत चालू करना, इनपुट मीडिया प्रकार सेट करना, आउटपुट सेट करना मीडिया प्रकार (ध्यान से!), फिर 'प्रोसेस इनपुट' के साथ पीसीएम डेटा को दबाएं और 'प्रोसेसऑटपुट' के साथ एएसी डेटा खींचें। –