2011-06-04 13 views
23

क्या एक ही समय में दो ध्वनियां चलाने का कोई तरीका है?दो ध्वनियों को एक साथ चलाएं

मुझे पता है कि SoundPlayer ऐसा करने में सक्षम नहीं है। मैं SoundEffect का उपयोग नहीं कर सकता क्योंकि मुझे लगता है कि यह एक्सएनए का एकमात्र हिस्सा है।

दो आवश्यक ध्वनियों को अज्ञात और यादृच्छिक समय पर बुलाया जाएगा। बजाए जाने के बाद आवाज को नियंत्रित करने की जरूरत है। यानी, ध्वनि समाप्त होने से पहले ध्वनि को रोका जा सकता है।

+1

क्या पर्यावरण खेलने से पहले? ASP.NET/web? WinForms? डब्ल्यूपीएफ डेस्कटॉप? सिल्वरलाइट? –

+0

हाय, यह विंडोज़ फॉर्म एप्लीकेशन के लिए है! – AlanFoster

उत्तर

25

संदर्भ PresentationCore और WindowsBase और इस प्रयास करें ...

var p1 = new System.Windows.Media.MediaPlayer(); 
p1.Open(new System.Uri(@"C:\windows\media\tada.wav")); 
p1.Play(); 

// this sleep is here just so you can distinguish the two sounds playing simultaneously 
System.Threading.Thread.Sleep(500); 

var p2 = new System.Windows.Media.MediaPlayer(); 
p2.Open(new System.Uri(@"C:\windows\media\tada.wav")); 
p2.Play(); 

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

इस कोड, एक दूसरे को जो एक तरह से व्यर्थ है की चोटी पर अलग धागे पर खेल रहे दो ध्वनियों को दर्शाता है के बाद से प्लेबैक वैसे भी ब्लॉक नहीं करता

new System.Threading.Thread(() => { 
     var c = new System.Windows.Media.MediaPlayer(); 
     c.Open(new System.Uri(@"C:\windows\media\tada.wav")); 
     c.Play(); 
    }).Start(); 

System.Threading.Thread.Sleep(500); 

new System.Threading.Thread(() => { 
     var c = new System.Windows.Media.MediaPlayer(); 
     c.Open(new System.Uri(@"C:\windows\media\tada.wav")); 
     c.Play(); 
    }).Start(); 

http://msdn.microsoft.com/en-us/library/system.windows.media.mediaplayer.stop.aspx वर्ग भी नियंत्रण की जरूरत है प्लेबैक

+0

क्या मैं इसे निर्दिष्ट समय पर ऑडियो बंद कर सकता हूं (aftr 10 sec।) कहां खेला जाता है? – deathrace

+0

ब्याज से मैंने नए थ्रेड कोड का उपयोग करने का प्रयास किया, जो चलता है, लेकिन कुछ भी नहीं खेलता है ... भले ही यह पहले कोड ब्लॉक का उपयोग करके ठीक काम करता है। क्या मुख्य धागे में ऑडियो होना है? – lex

4

"मीडियाप्लेयर" ऑब्जेक्ट आपको एक बार में दो ध्वनियां नहीं खेलने देगा, भले ही आप दो उदाहरण बनाते हों। आपको देशी विंडोज एपीआई "mciSendString" में लाने की आवश्यकता होगी।

[DllImport("winmm.dll")] 
    static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback); 

    public Form1() 
    { 
     InitializeComponent(); 

     mciSendString(@"open C:\Users\Jono\Desktop\applause.wav type waveaudio alias applause", null, 0, IntPtr.Zero); 
     mciSendString(@"play applause", null, 0, IntPtr.Zero); 

     mciSendString(@"open C:\Users\Jono\Desktop\foghorn.wav type waveaudio alias foghorn", null, 0, IntPtr.Zero); 
     mciSendString(@"play foghorn", null, 0, IntPtr.Zero); 

    } 
0

जांच PlaySound विधि यहाँ http://msdn.microsoft.com/en-us/library/aa909766.aspx, और इसके झंडे SND_ASYNC

+0

PlaySound एक ही समय में दो ध्वनियां नहीं चला सकता है, भले ही आप async ध्वज का उपयोग करें। आप PlaySound को सिंक्रनाइज़ करने के लिए दो अलग-अलग थ्रेड होने के द्वारा इसे काम करने में सक्षम हो सकते हैं। – selbie

+0

आप इसे बार-बार कॉल करते हैं, उस ध्वज का उपयोग करते समय विधि तुरंत बाहर निकल जाएगी और दूसरा शुरू होगा। – Eugen

-1

समाधान: हाय, मैं एक WP8 अनुप्रयोग विकसित कर रहा था और मैं एक साथ खेलने के लिए एक से अधिक लगता है की जरूरत है, समाधान मेरे लिए काम नहीं किया जैसा कि ऊपर उल्लेख, तो मैं XNA framwork इस्तेमाल किया। फाइलों में होना चाहिए: यहाँ लिंक

http://msdn.microsoft.com/en-us/library/ff842408.aspx

और उसके बाद इस तरह उर ध्वनि फ़ाइलें खेलने ...

SoundEffect Sound = SoundEffect.FromStream(Application.GetResourceStream(new Uri("Assets/Sounds/wav/sound.wav", UriKind.Relative)).Stream); 
Sound.Play(); 

पाशन के लिए ...

SoundEffectInstance Sound = SoundEffect.FromStream(Application.GetResourceStream(new Uri("Assets/Sounds/wav/sound.wav", UriKind.Relative)).Stream).CreateInstance(); 
Sound.IsLooped = true; 
Sound.Play(); 

नोट है ".wav" (पीसीएम, 8 या 16-बिट, 8 किलोहर्ट्ज से 48 किलोहर्ट्ज़, मोनो या स्टीरियो) प्रारूप

-1

सेऔर http://alvas.net/alvas.audio,samples.aspx#sample6

Player pl = new Player(); 
byte[] arr = File.ReadAllBytes(@"in.wav"); 
pl.Play(arr); 
Player pl2 = new Player(); 
pl2.FileName = "123.mp3"; 
pl2.Play(); 

या मिश्रण ऑडियो डेटा How to mix to mix two audio file..

private void Mix(string outfile, string infile1, string infile2, int shiftSec) 
{ 
    WaveReader wr1 = new WaveReader(File.OpenRead(infile1)); 
    WaveReader wr2 = new WaveReader(File.OpenRead(infile2)); 
    IntPtr format1 = wr1.ReadFormat(); 
    WaveFormat wf = AudioCompressionManager.GetWaveFormat(format1); 
    WaveWriter ww = new WaveWriter(File.Create(outfile), AudioCompressionManager.FormatBytes(format1)); 
    byte[] data0 = wr1.ReadData(0, shiftSec); 
    byte[] data1 = wr1.ReadData(shiftSec); 
    byte[] data2 = wr2.ReadData(); 
    byte[] mixData = AudioCompressionManager.Mix(format1, data2, data1); 
    ww.WriteData(data0); 
    ww.WriteData(mixData); 
    ww.Close(); 
    wr2.Close(); 
    wr1.Close(); 
} 
संबंधित मुद्दे