2013-02-28 3 views
16

कैसे खेलें मैं अपने डब्ल्यूपीएफ एप्लिकेशन में एक ध्वनि फ़ाइल चलाने की कोशिश कर रहा हूं। अगर मैं Media/movepoint.wav निर्माण कार्रवाई Content के रूप में निर्दिष्ट है और एक रिश्तेदार या पूर्ण फ़ाइल पथ यह ठीक काम करता है के रूप में यह लोडडब्ल्यूपीएफ ध्वनि फ़ाइल संसाधन

private void PlaySound(string uriPath) 
{ 
    Uri uri = new Uri(@"pack://application:,,,/Media/movepoint.wav"); 
    var player = new MediaPlayer(); 
    player.Open(uri); 
    player.Play(); 
} 

अब, इसलिए मैं इस Pack URI के साथ कुछ है पर शक है, लेकिन: वर्तमान में मैं निम्नलिखित फोन है मैं अपने जीवन के लिए नहीं समझ सकता कि क्या।

उद्देश्य फ़ाइल को संसाधन के रूप में संग्रहीत करना है ताकि यह आउटपुट निर्देशिका में उपलब्ध न हो। मैं या तो डब्ल्यूएवी कॉपी या एमपी 3 प्रतिलिपि प्रदान कर सकता हूं।

उत्तर

10

मैंने इसे एक छवि फ़ाइल के साथ करने की कोशिश की, जो यूरी के संबंध में एक ध्वनि फ़ाइल के समान काम करता है क्योंकि यह सिर्फ एक और संसाधन है। मैंने नीचे दिए गए कोड का उपयोग किया जो अनिवार्य रूप से आपके पास मेल खाता है।

new Uri(@"pack://application:,,,/Resources/logo.png") 

सुनिश्चित करें कि आपका 'मीडिया' फ़ोल्डर किसी अन्य फ़ोल्डर में घोंसला नहीं है। यदि ऐसा है, तो आपको उस फ़ोल्डर को भी शामिल करने की आवश्यकता है।

.NET Framework 4.0, VS2012 का उपयोग करना।

This link चीजों की पूरी "पैक" योजना का एक बहुत अच्छा विवरण देता है।

संपादित इस विषय पर

और अधिक शोध से संकेत मिलता है कि आप क्या करना चाहते हैं ऑडियो या वीडियो फ़ाइलों के साथ संभव नहीं हो सकता है। नीचे दिए गए अंश this MSDN page के टिप्पणी अनुभाग से लिया गया है।

यद्यपि आप में एक्सटेंसिबल आवेदन मार्कअप लैंग्वेज (XAML) इस वर्ग का एक उदाहरण घोषणा कर सकते हैं, तो आप लोड और कोड का उपयोग किए बिना अपने मीडिया नहीं खेल सकते। केवल XAML में मीडिया चलाने के लिए, MediaElement का उपयोग करें। इसके अलावा, यदि आप एक्सएएमएल में एक उदाहरण घोषित करते हैं, तो केवल प्लेयर प्रॉपर्टी के लिए प्रॉपर्टी एलिमेंट सिंटैक्स भरने का एकमात्र व्यावहारिक उपयोग है।

अपने आवेदन के साथ मीडिया वितरित करते समय, आप प्रोजेक्ट संसाधन के रूप में मीडिया फ़ाइल का उपयोग नहीं कर सकते हैं। अपनी प्रोजेक्ट फ़ाइल में, आपको मीडिया प्रकार को सामग्री पर सेट करना होगा और पर CopyToOutputDirectory सेट करें, सबसे पहले या हमेशा संरक्षित करें।

मीडियाप्लेयर को प्लेयर को चलाने के लिए दो अलग-अलग तरीकों से उपयोग किया जा सकता है: स्वतंत्र मोड या घड़ी मोड। स्वतंत्र मोड में, मीडियाप्लेयर एक छवि के समान है और मीडिया ने ओपन विधि ड्राइव प्लेबैक के माध्यम से खोला। घड़ी मोड में, मीडियाप्लेयर को एनीमेशन के लिए एक लक्ष्य के रूप में माना जा सकता है, और इस प्रकार में टाइमिंग पेड़ में प्लेलाइन को नियंत्रित करने वाली टाइमलाइन और घड़ी प्रविष्टियां होंगी जो प्लेबैक को नियंत्रित करती है। मीडिया मोड के बारे में अधिक जानकारी के लिए, मल्टीमीडिया अवलोकन देखें।

मीडियाप्लेयर मीडियाइलेमेंट से अलग है जिसमें यह नियंत्रण नहीं है जिसे सीधे एप्लिकेशन के उपयोगकर्ता इंटरफ़ेस (UI) में जोड़ा जा सकता है। MediaPlayer का उपयोग करके लोड किए गए मीडिया को प्रदर्शित करने के लिए, एक वीडियो ड्रॉइंग या DrawingContext का उपयोग किया जाना चाहिए।

+0

पहली नज़र में मैं थोड़ा परेशान था क्योंकि हमारे पैक यूआरआई वाक्यविन्यास समान है। हालांकि, 'Resouces' के बारे में कुछ खास है? अभी मीडिया फ़ोल्डर असेंबली की जड़ पर स्थित है। क्या मुझे/संसाधन/मीडिया/ करने की ज़रूरत है? धन्यवाद – xximjasonxx

+0

बस प्लेसाउंड ("पैक: // एप्लिकेशन: ,,,/संसाधन/मीडिया/movepoint.mp3") की कोशिश की; और कोई भाग्य नहीं था (हाँ मैंने कोड अपडेट किया) :) – xximjasonxx

+1

स्पष्टीकरण के लिए धन्यवाद। मैं समझ सकता हूं कि वे कॉपीराइट उल्लंघनों के जोखिमों के कारण ऐसा क्यों करेंगे। मैंने आपके उत्तर को सही के रूप में चिह्नित किया है। धन्यवाद – xximjasonxx

1

निम्नलिखित .NET फ्रेमवर्क 4.5 में काम करने के लिए लगता है:

var sri = Application.GetResourceStream(new Uri("pack://application:,,,/MyAssemblyName;component/Resources/CameraShutter.wav")); 

if ((sri != null)) 
{ 
    using (s == sri.Stream) 
    { 
    System.Media.SoundPlayer player = new System.Media.SoundPlayer(s); 
    player.Load(); 
    player.Play(); 
    } 
} 

CameraShutter.wavके रूप में अंतर्निहित है अपने प्रोजेक्ट में संसाधन (और संसाधन सबफ़ोल्डर के अंदर रहता है, पैक यूआरआई में संकेत के रूप में)।

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