login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[C#] MP3 speler

Offline UpLink - 04/04/2013 14:04 (laatste wijziging 04/04/2013 14:05)
Avatar van UpLink... Beste leden,

Een C# vraagje. Ik was deze nacht wat aan het prutsen aan een player voor MP3.

Voor zover het in elkaar geknutseld (letterlijk) is, werkt het wel. Op enkele dingen na.

Als ik de stop-knop gebruik, dan pauzeert die.
En als ik een andere MP3 selecteer, moet ik eigenlijk de speler afsluiten terug opstarten voor ik een andere mp3 kan afspelen.

Heeft iemand een oplossing? (ik werk met Visual Studio 2012, testversie)

Stop-knop:

  1. private void stop_Click(object sender, EventArgs e)
  2. {
  3. if (_mp3Player != null)
  4. _mp3Player.stop();
  5. }


als je nog code nodig hebt, just ask, dan gooi ik die ook even online.

12 antwoorden

Gesponsorde links
Offline Abbas - 04/04/2013 14:25
Avatar van Abbas Gouden medaille

Crew .NET
Ik denk dat je best nog wat code geeft wabt dit zegt niet veel.
Offline Martijn2008 - 04/04/2013 14:26 (laatste wijziging 04/04/2013 14:27)
Avatar van Martijn2008 PHP beginner Wat is mogelijk met object _mp3Player en wat staat in methode stop?
Misschien kun je het oplossen door

  1. _mp3Player = null;


in plaats van

  1. _mp3Player.stop();


te gebruiken.

@Titjes Lijkt me ook handig  
Offline UpLink - 04/04/2013 14:28 (laatste wijziging 04/04/2013 14:31)
Avatar van UpLink ... Code van de form: Plaatscode: 142151

Code van de Mp3Player (class): Plaatscode: 142152

Code van de Form (Designer): Plaatscode: 142153

Ik hoop hiermee genoeg gegeven te hebben? Dat is namelijk alles  

//EDIT:

Ik ken nog niet veel van C# dus het kan er allemaal wat stuntellig uitzien in de code... Don't shoot me  
Offline Martijn2008 - 04/04/2013 14:31 (laatste wijziging 04/04/2013 15:00)
Avatar van Martijn2008 PHP beginner Jammer dat de comments in klasse Mp3Player ontbreken.
Ik vermoed dat methode Stop() eigenlijk pauze betekent en Dispose() stop.
Offline UpLink - 04/04/2013 14:35
Avatar van UpLink ... Als ik van dit:

  1. public void stop()
  2. {
  3. string command = "stop MediaFile";
  4. mciSendString(command, null, 0, IntPtr.Zero);
  5. }


naar dit ga:

  1. public void stop()
  2. {
  3. string command = "close MediaFile";
  4. mciSendString(command, null, 0, IntPtr.Zero);
  5. }


dus van stop MediaFile naar close MediaFile, dan moet ik de MP3 eerst opnieuw gaan selecteren voor die het opnieuw afspeelt.
Offline Martijn2008 - 04/04/2013 14:38 (laatste wijziging 04/04/2013 14:39)
Avatar van Martijn2008 PHP beginner Heb je deze post op stackoverflow al gezien?
Ik denk dat je daar wel wat mee kan. Er wordt ook gerefereerd naar een library die het 1 en ander voor je uit handen kan nemen.
Bedankt door: UpLink
Offline Abbas - 04/04/2013 14:43
Avatar van Abbas Gouden medaille

Crew .NET
Ik heb je Mp3Player klasse herschreven:

  1. public class Mp3Player : IDisposable
  2. {
  3. private const string OpenCommand = "open {0} type mpegvideo alias MediaFile";
  4. private const string PlayCommand = "play MediaFile";
  5. private const string StopCommand = "stop MediaFile";
  6. private const string DisposeCommand = "close MediaFile";
  7.  
  8. public Mp3Player() { }
  9.  
  10. public void OpenFile(string fileName)
  11. {
  12. mciSendString(String.Format(CommandTemplate, fileName), null, 0, IntPtr.Zero);
  13. }
  14.  
  15. public void Play(bool repeat)
  16. {
  17. string command = PlayCommand;
  18. if (repeat)
  19. command += " REPEAT";
  20. mciSendString(command, null, 0, IntPtr.Zero);
  21. }
  22.  
  23. public void Stop()
  24. {
  25. string command = StopCommand;
  26. mciSendString(command, null, 0, IntPtr.Zero);
  27. }
  28.  
  29. [DllImport("winmm.dll")]
  30. private static extern long mciSendString(string strCommand, StringBuilder strReturnString, int iReturnLength, IntPtr hwndCallback);
  31.  
  32. public void Dispose()
  33. {
  34. mciSendString(DisposeCommand, null, 0, IntPtr.Zero);
  35. }
  36. }

Niet dat dit de fouten zal oplossen maar dit steekt logischer in elkaar:

  1. var player = new Mp3Player();
  2. player.OpenFile("File.mp3");
  3. player.Play();
  4. player.Stop();
  5. //...
Offline UpLink - 04/04/2013 14:44 (laatste wijziging 04/04/2013 14:47)
Avatar van UpLink ... //EDIT:

Dus jouw herschreven stukje doet net hetzelfde als wat ik nu heb?
Zoals ik al zei: ik ben nog relatief nieuw met C# (en aanverwanten).

--------------------------------

Ik weet dat het allemaal veel simpeler is om gewoon de WMP in dat Form te includen, maar daar leer je niet echt iets van natuurlijk.

Verder wil ik ook nog kijken om video te ondersteunen en een playlist natuurlijk. Maar dat zal voer zijn voor later. Ik trek nu mijn haar soms al uit 
Offline Abbas - 04/04/2013 14:52
Avatar van Abbas Gouden medaille

Crew .NET
Het beste is om het wiel niet opnieuw te proberen uitvinden. Er zijn tal van libraries en tools te vinden om mediabestanden af te spelen. Integreer deze en breidt deze desnoods verder uit maar probeer niet om dit van 0 af aan te beginnen schrijven.
Offline Martijn2008 - 04/04/2013 14:52 (laatste wijziging 04/04/2013 15:02)
Avatar van Martijn2008 PHP beginner Lol, nou je hebt alvast een begin.. 

@Titjes Haha, dat ben ik met je eens. Er zijn zat componenten voorhanden waarmee je leuke apps in elkaar kan zetten. Als 1 iets overschat wordt, dan is het toch wel dat wiel opnieuw uitvinden.
Btw, wat doe je met deze lijn code in de herschreven klasse? Hoe zit dat?
  1. public Mp3Player() { }


@UpLink Als je C# wilt leren kun je volgens mij het best:
- Een form bouwen met textboxen, dropdownlists en calenders
- Die dropdownlist vullen met vooraf ingegeven waardes, vanuit je code-behind.
- Alle binnengekomen data valideren, alle tekstboxen gevuld etc.
- Vervolgens alle waardes in een database opslaan.
Dat is namelijk een stuk realistischer dan een MediaPlayer. Waarom zou je een MediaPlayer bouwen als die toch al voorhanden is?
Offline UpLink - 04/04/2013 15:28
Avatar van UpLink ... Martijn,

De reden dat ik zulke dingen nog niet gedaan heb is omdat ik nog niet gekeken heb hoe die dingen werken in de programmeertalen. Bij de webtalen lijkt dit veel gemakkelijker en logischer dan bij programmeertalen.
Of beeld ik mezelf dit in?

De reden dat ik zo'n mediaspeler (en voordien een basic-basic webbrowser) gedaan heb is omdat er weinig nodig was om deze te laten werken. met wat kliks en een beetje code lukt(e) dit aardig voor de eerste stappen.

Ik heb ook al een console applicatie gemaakt gehad die dingen kon uitrekenen aan de hand van antwoorden op de vragen die gesteld werden, maar ook die hebben geen database nodig.

Dusja...
Offline Abbas - 04/04/2013 15:43
Avatar van Abbas Gouden medaille

Crew .NET
Er zijn tal van applicaties die je kan maken zonder een database en toch een uitdaging kunnen vormen zonder het jezelf al te moeilijk te maken. Denk bijvoorbeeld aan een rekenmachine, tekenprogramma of browser zoals je zelf al zei.

Als je in .NET programmeert hoef je je geen grote zorgen te maken over verschillen tussen web en desktop development buiten een aantal specifieke fundamentele verschillen die de twee hebben uiteraard.

Als je een aantal zaken onder de knie hebt qua development kan je je verdiepen in de manier waarop je programmeert: het gebruik maken van een aantal design/architectural patterns (MVC, MVVM, MVP) of leren je code effeiciënter te schrijven.
Abbas schreef:
Btw, wat doe je met deze lijn code in de herschreven klasse? Hoe zit dat?
Dat mag eigenlijk weg, de compiler maakt zelf wel een lege constructor aan. 
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.233s