Diskuze: nespolehlivý SoundPlayer?

C# .NET .NET (C# a Visual Basic) nespolehlivý SoundPlayer? American English version English version

Avatar
doMík
Člen
Avatar
doMík:

Zdravím :)
Mohl by mi někdo osvětlit čím by to moho být? Používám klasický System.Media.Sou­ndPlayer. Pokud zahajuji přehrávání pomocí .play() funguje to naprosto spolehlivě pokud zahajuji pomocí .playloop() přehrávání se spustí jen občas. Nevíte někdo co to je, případně jak zvýšit spolehlivost?
{kód doplním později (jsem na telefonu )}

 
Odpovědět 31. března 23:35
Avatar
doMík
Člen
Avatar
doMík:
//úsek třídy přehravače | SNDplayer
static bool BGPlay = true;
static System.Media.SoundPlayer backgroundPlayer;
public static void SetBacgroundMusic(string location)
{
        try {
                backgroundPlayer = new  System.Media.SoundPlayer(location);
        }
        catch { error (); }
}
public static bool PlayBackgroundMusic
{
        get { return BGPlay; }
        set
        {
                try {
                        BGPlay = value;
                        if(value == true)
                                backgroundPlayer.Play(); //Tady potřebuju Playlooping()
                        else
                                backgroundPlayer.Stop();
                }
                catch{ error (); }
        }
}

Volané je to takto

//Form2
private void button8_Click(object sender, EventArgs e)
{
        SNDplayer.PlayFX ("paing.wav");
        if(SNDplayer.PlayBackgroundMusic)
        {
                label4.Visible = false;
                SNDplayer.PlayBackgroundMusic = false;
        }
        else
        {
                label4.Visible = true;
                SNDplayer.PlayBackgroundMusic = true;
        }
}
 
Nahoru Odpovědět 1. dubna 11:36
Avatar
VitekST
Člen
Avatar
Odpovídá na doMík
VitekST:

Zdá se, že je to bug API samotného.

Být na tvém místě bych se asi na SoundPlayer integrovaný ve frameworku vykašlal, a použil komplexnější knihovnu pro audio, buďto CSCore, nebo NAudio.

Samozřejmě jestli ti to do aplikace nepřidá až moc velkej footprint.

Obojí knihovny ti dokonce umožňují přehrát zvuk z kama chceš, můžeš si třeba takový WAV soubor strčit do Resources a zakompilovat do aplikace.
Možností je spousta.

Příklady:
CSCore: http://cscore.codeplex.com/wikipage?…
NAudio: http://mark-dot-net.blogspot.cz/…ck-with.html

 
Nahoru Odpovědět 8. dubna 20:54
Avatar
doMík
Člen
Avatar
doMík:

NAudio tam používám vedle, ale v tom sem nenašel přehrávání ve smičce a vzhledem k požadované jednoduchosti aplikace sem nechtěl tu knihovnu předělávat.

 
Nahoru Odpovědět 11. dubna 15:28
Avatar
VitekST
Člen
Avatar
Odpovídá na doMík
VitekST:

No, nevím cos dělal, ale mě stačilo pár minut Googlování.
http://mark-dot-net.blogspot.cz/…-naudio.html

Je tam popisována implementace třídy LoopStream (odvozená od WaveStream), která poskytuje zdroj dat, který se po skončení opakuje (výchozí proud se přetočí na začátek a čte se od začátku).

Do konstruktoru předáš WaveFileReader, vytvořený konstruktorem přijímajíc tvůj datový proud (soubor, zdroj z aplikace, HTTP, ..., za předpokladu, že se jedná o WAV, v případě MP3 použij Mp3FileReader).

Jestliže máš soubor, cestu souboru tam můžeš dát rovnou.

Vytvoříš si výstup, inicializuješ ho instancí třídy LoopStream, spustíš přehrávání a bum, jede to dokola.

Alternativní řešení: Mohl bys sice čekat každých X sekund na zastavení přehrávání, a následně ho pustit znova, ale nepřijde mi to jako vhodné řešení.

Editováno 11. dubna 17:40
 
Nahoru Odpovědět 11. dubna 17:37
Avatar
ORRNY99
Člen
Avatar
ORRNY99:

Nebo se koukni na Bass.Net

jednoduchý příklad použití https://github.com/ukgamer/Player

 
Nahoru Odpovědět 11. dubna 20:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.