2010-06-27 15 views
13

मैं सी # में एक एमपी 3 फ़ाइल इस गाइड का उपयोग कर खेलने के लिए कोशिश कर रहा हूँ: http://www.crowsprogramming.com/archives/58सी # में एमपी 3 फाइलें कैसे खेलें?

और मैं सूचीबद्ध सब कुछ कर रहा हूँ, लेकिन मैं अभी भी अपने सी # कार्यक्रम में किसी भी संगीत नहीं खेल सकते। क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?

static void Main(string[] args) 
    { 
     WMPLib.WindowsMediaPlayer a = new WMPLib.WindowsMediaPlayer(); 
     a.URL = "song.mp3"; 
     a.controls.play(); 
    } 

संगीत फ़ाइल "गीत" बिन फ़ोल्डर में है।

+0

सवाल में लिंक मृत – user3791372

+0

की [एक WinForm आवेदन पत्र में एक एमपी 3 फ़ाइल बजाना] संभावित डुप्लिकेट (है http://stackoverflow.com/questions/15025626/playing-a-mp3-file-in-a-winform- अनुप्रयोग) – user

उत्तर

0

चीजों के एक जोड़े हैं मैं कोशिश करेंगे:

1), कि .mp3 फ़ाइल के लिए पथ पूरी तरह से योग्य हैं सिर्फ मामले में। 2) a.Ctlcontrols.play() का प्रयास करें; बजाय।

इसके अलावा, मैं लगभग निश्चित हूं कि एक विंडोज (ActiveX नियंत्रण) है जिसे आप लोड करने का प्रयास कर रहे हैं। लोड और काम करने के लिए इसे विंडोज संदर्भ की आवश्यकता हो सकती है। मुझे यकीन है कि .mp3 खेलने का एक और तरीका है, क्योंकि मैंने इसे पहले इस्तेमाल किया है, लेकिन मुझे कोड नहीं मिला। हालांकि यह डायरेक्टएक्स एसडीके का हिस्सा हो सकता है। उम्मीद है की वो मदद करदे।

10

मैंने विंडोज मीडिया प्लेयर COM ऑब्जेक्ट का उपयोग नहीं किया है, लेकिन वैकल्पिक विधि में here's a link का उपयोग नहीं किया है। (मैं लेखक नहीं हूं।) यह एमपी 3 चलाने के लिए winmm.dll को कॉल करने के लिए पिनवोक का उपयोग करता है। मैंने विंडोज सर्वर 2008 पर इसका परीक्षण किया और यह ठीक काम किया।

यहां कोड फॉर्म का उपयोग कर नमूना वर्ग है।

using System.Runtime.InteropServices; 

public class MP3Player 
{ 
     private string _command; 
     private bool isOpen; 
     [DllImport("winmm.dll")] 

     private static extern long mciSendString(string strCommand,StringBuilder strReturn,int iReturnLength, IntPtr hwndCallback); 

     public void Close() 
     { 
     _command = "close MediaFile"; 
     mciSendString(_command, null, 0, IntPtr.Zero); 
     isOpen = false; 
     } 

     public void Open(string sFileName) 
     { 
     _command = "open \"" + sFileName + "\" type mpegvideo alias MediaFile"; 
     mciSendString(_command, null, 0, IntPtr.Zero); 
     isOpen = true; 
     } 

     public void Play(bool loop) 
     { 
     if(isOpen) 
     { 
      _command = "play MediaFile"; 
      if (loop) 
      _command += " REPEAT"; 
      mciSendString(_command, null, 0, IntPtr.Zero); 
     } 
     } 
} 
4

मुझे यकीन है कि यह अभी भी प्रासंगिक है नहीं कर रहा हूँ लेकिन जब मैं इसे करने की कोशिश है, यह केवल जब कोड मुख्य थ्रेड में नहीं भाग गया काम किया, यानी, this.InvokeRequired == false

तो, मैं आप की तरह कुछ कोशिश सलाह होगा :

ThreadPool.QueueUserWorkItem(
      delegate(object param) 
      { 
       WMPLib.WindowsMediaPlayer player = new WMPLib.WindowsMediaPlayer(); 
       player.URL = "song.mp3";      
      }); 

player.controls.play() के बाद से खिलाड़ी ऑटो खेलने के लिए निर्धारित है की जरूरत नहीं है।

मुझे यकीन नहीं है कि मुख्य धागा सही तरीके से क्यों नहीं खेलेंगे, लेकिन मुझे आशा है कि इससे मदद मिलेगी।

+0

यह मेरे लिए पूरी तरह से ठीक काम करता है – SeBo

1

आप अपने कोड को "मुख्य" ईवेंट से निकालने का प्रयास कर सकते हैं और इसे "form_load" या "button_click" या उसके जैसा कुछ भी डाल सकते हैं। जिस तरह से दिखता है, उसे काम करना चाहिए। रॉबर्ट Seder की तरह सुझाव दिया, आप एमपी 3 फ़ाइल के लिए पूरा रास्ता लिखने की कोशिश कर सकते हैं।

0

सरल तरीका, निम्नलिखित कोड की आवश्यकता है: 1. पहले जोड़ें System.Runtime.InteropServices नामस्थान। 2.In वर्ग बनाने के लिए: मुख्य विधि में

static class Program 
{ 
     [DllImport("winmm.dll")] 
     private static extern long mciSendString(string strCommand, 
               StringBuilder strReturn, 
               int iReturnLength, 
               IntPtr hwndCallback); 

     //some code 

} 

3. जोड़ें गुण:

[STAThread] 
static void Main(string[] args) 
{//some code} 

और फिर खिलाड़ी विधि बनाने के लिए, तो:

public void player() 
{ 
       mciSendString("open \"" + "mp3 file path" + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero); 
     mciSendString("play MediaFile", null, 0, IntPtr.Zero); 
} 
8

तुम सब करने की जरूरत है विंडो मीडिया प्लेयर COM घटक का संदर्भ जोड़ता है। आपको फ़ाइल wmp.dll के संदर्भ को जोड़ने की आवश्यकता है, जिसे आप System32 निर्देशिका में पा सकते हैं।

0

मैं एक ही समस्या थी और मैं उदाहरण के लिए, के रूप में स्टेटिक खिलाड़ी सेट करके किया:

public class MiClass(){ 
static WMPLib.WindowsMediaPlayer wplayer; 
private void PlayMusic() 
    { 
     wplayer = new WMPLib.WindowsMediaPlayer(); 
     wplayer.URL = "c:\shoryuken.mp3"; 
     wplayer.controls.play(); 
    } 
} 
संबंधित मुद्दे