Naudio - 'waveOut' inneholder ikke en konstruktør som tar '3' argumenter

stemmer
0

dette spørsmålet stammer fra min tidligere tråd spille mp3 fra internett uten FileOpenDialog

Jeg håper virkelig noen vet noe om dette. Jeg fikk beskjed om å bruke en WebRequest å starte en nedlasting strøm og deretter spille strømmen i stedet for å spille en lokalt lagret fil. Men prøver å bruke koden fra PlayMp3FromUrl gir meg denne feilmeldingen:

'NAudio.Wave.WaveOut' inneholder ikke en konstruktør som tar '3' argumenter

Kompilering feiler på denne linjen:

using (WaveOut waveOut = new WaveOut(0, 500, null))

Dette er den fullstendige kode:

public static void PlayMp3FromUrl(string url)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            using (Stream stream = WebRequest.Create(url)
                .GetResponse().GetResponseStream())
            {
                byte[] buffer = new byte[32768];
                int read;
                while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, read);
                }
            }

            ms.Position = 0;

            using (WaveStream blockAlignedStream =
                new BlockAlignReductionStream(
                    WaveFormatConversionStream.CreatePcmStream(
                        new Mp3FileReader(ms))))
            {
                using (WaveOut waveOut = new WaveOut(0, 500, null))
                {
                    waveOut.Init(blockAlignedStream);
                    waveOut.Play();
                    while (blockAlignedStream.Position < blockAlignedStream.Length)
                    {
                        System.Threading.Thread.Sleep(100);
                    }
                }
            }
        }
    }

Kan noen hjelpe meg å finne ut hvilke argumenter waveOut tar?

Edit: Du har sannsynligvis ønsker å se på de WaveOut.cs, og det er ganske lang. Så bare ta en titt på den her WaveOut.cs

Publisert på 31/08/2009 klokken 15:30
kilden bruker
På andre språk...                            


3 svar

stemmer
0

Du passerer tre argumenter til waveOut konstruktøren: 0, 500, null men det er ingen konstruktør på waveOut klassen som hadde mange argumenter.

Hvorfor er du passerer tre argumenter til waveOut konstruktør?

Svarte 31/08/2009 kl. 16:56
kilden bruker

stemmer
1

Jeg har aldri brukt waveOut klasse, jeg vil foreslå å bruke DirectX hvis du kunne.

using (IWavePlayer directOut = new DirectSoundOut(300))               
{                    
   directOut.Init(blockAlignedStream);                    
   directOut.Play();                    
   while (blockAlignedStream.Position < blockAlignedStream.Length)
   {                       
      System.Threading.Thread.Sleep(100);                    
   }                
}
Svarte 31/08/2009 kl. 19:24
kilden bruker

stemmer
1

Bare bruke standard konstruktør (ingen parametere). Den aller nyeste NAudio kode har eiendommer på waveOut klasse i stedet for den gamle konstruktøren med 3 parametre. Hvis det fører til mange problemer jeg kan sette den gamle konstruktøren tilbake selv og merk den med [Obsolete] attributt.

Den første parameteren var enhetsnummer. 0 betyr bruke standardenhet.

Det andre var den ventetid. 500ms er mengden av lyd vi buffer opp på forhånd. Dette er en svært konservativ figur og bør sikre glitch fri avspilling.

Den tredje er å gjøre med tilbakekallingsmekanismen for waveOut. Dessverre er det ingen one-size-fits all løsning. Hvis du passerer null, vil NAudio bruke funksjonstilbakeanrop, men dette kan henge på visse lyd brikkesett. Det er bedre å passere en vindusreferanse hvis det er mulig.

Svarte 01/09/2009 kl. 06:37
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more