Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

pustanje muzike iz C#

[es] :: .NET :: .NET Desktop razvoj :: pustanje muzike iz C#

[ Pregleda: 2333 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Leopold13
Srbija

Član broj: 162262
Poruke: 16
77.46.226.*



Profil

icon pustanje muzike iz C#06.12.2008. u 10:08 - pre 187 meseci
Pozdrav, pokusavam na napravim aplikacuju za slusanje muzike. Uspeo sam da pustim pesmu, ali na taj nacin sto je izaberem iz listbox-a i pritisnem dugme play*, ali ono sto me interesuje je da li neko zna kako da odradim sledece: kad se doticna pesma zavrsi kako da automatski pocne sledeca pesma koja je na spisku (da ne moram non-stop da klikcem dugme play)

*player = new SoundPlayer(Lista.SelectedItem.ToString());
player.Play();

Hvala unapred
 
Odgovor na temu

Sephiroth?
Balkan @ net

Član broj: 79406
Poruke: 82
212.39.114.*



Profil

icon Re: pustanje muzike iz C#06.12.2008. u 11:54 - pre 187 meseci
Problem sa SoundPlayer-om je što je jako nefleksibilan i rudimentalan. Prvo, možeš samo puštati .waw file-ove sa njim; a
što se tiče toga što ti tražiš, problem je što on ne podržava nikakve queue feature, niti evente ili notifikacije završenog
playback-a, ništa.

Mislim da bi jedini način za rješavanje ovoga bilo da napraviš novu nit, te pokrećeš audio zapise sa sp.PlaySync().
Pokušao sam i radi:

Code:

       public Form1()
       {
            InitializeComponent();
            Thread t = new Thread(new ThreadStart(Sound));
            t.Start();            
        }

        private void SoundTest()
        {
            SoundPlayer sp = new SoundPlayer();
            sp.Stream = WindowsFormsApplication1.Properties.Resources.ringin;
            sp.PlaySync();
            sp.Stream = WindowsFormsApplication1.Properties.Resources.ringout;
            sp.PlaySync();
            sp.Stream = WindowsFormsApplication1.Properties.Resources.ringin;
            sp.PlaySync();
            sp.Stream = WindowsFormsApplication1.Properties.Resources.recycle;
            sp.PlaySync();
        }


Mislim, ovaj dio koda ti neće riješiti ništa, ali nadam se da ćeš dobiti ideju kako. Stvar je u tome da će PlaySync() zablokirati
izvršavajuću nit, te da odmah nakon toga moraš učitati novi file za playback. Ja sam uzeo par file-ova iz Windows/Media foldera.
Pošto ćeš sada raditi sa nitima, potrebna ti je i sinhronizacija svega što koristiš u novoj niti, uključujući pristupanje listbox-u i ostalom.

Možda bi mogao iskoristiti nešto ovako:

Code:


        private void SoundTest()
        {
            SoundPlayer sp = new SoundPlayer();

            while(playing)
            {
                sp.Stream = GetNextFile();
                sp.PlaySync();
            }
        }



Naravno, sve napisano je jako jednostavno i ne pazi na probleme poput Thread Safety-a.

BTW, ne moraš za ovu svrhu koristiti SoundPlayer, jer imaš sa Windows-om jednu komponentu koja je standardni
dio DirectX-a, a to je Quartz COM komponenta (ili DirectShow). Ona osim waw, podržava i sve ostale formate: mp3, midi, wma itd...
Možeš čak i video sa njom da pustiš.
Prvo odeš na Add Reference (u VisualStudiu, pretpostavljam da njega koristiš), pa odeš na Browse,te u Windows/System32 nađeš quartz.dll.

Evo stavio sam i projekat u kojem imaš jednostavan player koji koristi quartz.



EDIT: Ne znam zašto mi neće da upload-a na ES, ali evo link onda na rapidshare

http://rapidshare.com/files/170777473/QuartzSound.rar.html
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: pustanje muzike iz C#06.12.2008. u 12:02 - pre 187 meseci
Koristi bolje managed DirectShow za takve stvari
Code:

using System;
using QuartzTypeLib;
class PlayFile 
{
  public static void Main( string [] args ) 
  {
   FilgraphManagerClass graphClass = null;
   try 
   {
      graphClass = new FilgraphManagerClass();
      graphClass.RenderFile( args[0] );
      graphClass.Run(); 
      int evCode;
      graphClass.WaitForCompletion( -1, out evCode ); //cekas na zavrsetak pa pustas sledeci fajl .
   }
   catch( Exception ) {} 
   finally 
   { 
       graphClass = null; 
   }  
  }
}


Viva lollapalooza
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: pustanje muzike iz C#06.12.2008. u 12:34 - pre 187 meseci
http://blogs.msdn.com/toub/

Viva lollapalooza
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: pustanje muzike iz C#06.12.2008. u 12:37 - pre 187 meseci
ili koristi neku biblioteku kao sto je BASS (imas na dnu strane .NET API)
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: pustanje muzike iz C#

[ Pregleda: 2333 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.