Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 3.251 pregleda

Najnovija ↓

pustanje muzike iz C# 06.12.2008. u 11:08 · pre 217 meseci #1
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
Re: pustanje muzike iz C# 06.12.2008. u 12:54 · pre 217 meseci #2
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
Re: pustanje muzike iz C# 06.12.2008. u 13:02 · pre 217 meseci #3
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; 
   }  
  }
}

Potpis
Viva lollapalooza
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme