Diskuze: nespolehlivý SoundPlayer?
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
//ú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;
}
}
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
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í.
Nebo se koukni na Bass.Net
jednoduchý příklad použití https://github.com/ukgamer/Player
Zobrazeno 6 zpráv z 6.