Click here to Skip to main content
16,020,822 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
Hello


I want to play sound in three external sound cards at the same time,I mean when I click in a button I can hear sound from three speakers which are related to my three sound cards. I have a function but it plays sound only in one device,the first one it finds,I mean in this code the first device is number 0,so it play sound in it,but if you write device number 1 at first,it will play sound in it,as a conclusion it plays sound only in one device,it dont works for all the devices at the same time. This is its code:
public void playAllAvailableDevices()
{
//create a new class for each wav file & output etc.
WaveOut waveOut1 = new WaveOut();
WaveFileReader waveReader1 = new WaveFileReader(fileName);
WaveOut waveOut2 = new WaveOut();
WaveFileReader waveReader2 = new WaveFileReader(fileName);
WaveOut waveOut3 = new WaveOut();
WaveFileReader waveReader3 = new WaveFileReader(fileName);
switch (waveOutDevices)
{
case 1: 
waveOut1.Init(waveReader1);
waveOut1.DeviceNumber = 0;
waveOut1.Play();
break;
case 2: 
waveOut1.Init(waveReader1);
waveOut1.DeviceNumber = 0;
waveOut1.Play();
waveOut2.Init(waveReader2);
waveOut2.DeviceNumber = 1;
waveOut2.Play();
break;
case 3:
waveOut1.Init(waveReader1);
waveOut1.DeviceNumber = 0;
waveOut1.Play();
waveOut2.Init(waveReader2);
waveOut2.DeviceNumber = 1;
waveOut2.Play();
waveOut3.Init(waveReader3);
waveOut3.DeviceNumber = 2;
waveOut3.Play();
break;
}}


fileName is the name of the sound file I want to play,in my code I get this name from a darabase:
private void btnAlarm1_Click(object sender, EventArgs e)
    {
        OdbcConnection cn = new OdbcConnection("DSN=cp1");
        cn.Open();
        OdbcCommand cmd1 = new OdbcCommand("select chemin from alarme where code_alarme=41", cn);
        cmd1.Connection = cn;
        fileName = cmd1.ExecuteScalar().ToString();
        wave = new WaveOut();
        playAllAvailableDevices();
    }


Can you help me to find the solution please???? Thank you in advance. Good day.
Posted

1 solution

Try this..

System.Threading.Thread Thread1;
System.Threading.Thread Thread2;
System.Threading.Thread Thread3;

Thread1 = new System.Threading.Thread(this.playSound("aa.wav",0));
Thread2 = new System.Threading.Thread(this.playSound("bb.wav",1));
Thread3 = new System.Threading.Thread(this.playSound("cc.wav",2));

Thread1.Start();
Thread2.Start();
Thread3.Start();

public void playSound(string fileName,int i)
{
     WaveOut waveOut = new WaveOut();
     WaveFileReader waveReader = new WaveFileReader(fileName);
     waveOut.Init(waveReader);
     waveOut.DeviceNumber = i;
     waveOut.Play();
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900