none
Ressource mit MediaPlayer abspielen RRS feed

  • Frage

  • Wie der Titel schon sagt habe ich das problem dass man bei der Klasse MediaPlayer nicht wie beim SoundPlayer die Resource dierekt angeben kann (oder ich bineinfach zu dämlich dafür). Wenn jemand wieß wie sowas trotzdem geht wäre ich sehr dankbar wenn derjenige sich die zeit nimmt es mir zu erklären... 
    Samstag, 25. Januar 2014 18:47

Antworten

  • Hallo,
    das ist ein kleiner Nachteil der WPF-Controls. Es geht einfach nicht. Du hast 2 Alternativmöglichkeiten:

    • Du lässt die Datei einfach bei der Anwendung liegen und installierst diese entsprechend mit dem Setup in den gleichen Ordner wie die Anwendung. Dann kannst du einfach wieder einen relativen Uri angeben:
      mp.Open(new Uri("success.wav", UriKind.Relative));
    • Du entpackst die Datei in AppData o.ä., wenn nicht bereits vorhanden, und gibst dann den Pfad zur Datei an:
      private void Form1_Load(object sender, EventArgs e)
      {
          MediaPlayer mp = new MediaPlayer();
          mp.Open(new Uri(GetSuccessFilePath(), UriKind.Absolute));
          mp.Play();
      }
      
      string GetSuccessFilePath()
      {
          string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Hersteller\Anwendung");
          if (!File.Exists(path + @"\success.wav"))//Datei auspacken, falls diese nicht existiert
          {
              UnmanagedMemoryStream stream = Properties.Resources.Success;//Deine Resource, hingefügt über Projekt > Eigenschaften > Resourcen
              byte[] data = new byte[stream.Length];
              stream.Read(data, 0, (int)stream.Length);//Daten der Datei lesen
      
              if (!Directory.Exists(path))
                  Directory.CreateDirectory(path);//Ordner erstellen, falls nicht vorhanden
      
              using (FileStream fs = new FileStream(path + @"\success.wav", FileMode.Create))
              {
                  fs.Write(data, 0, (int)stream.Length);//Datei schreiben
                  fs.Flush();
                  fs.Close();
              }
          }
          return path + @"\success.wav";
      }
      Die Datei wird unter "C:\Users\BENUTZERNAME\AppData\Roaming\Hersteller\Anwendung\success.wav" entpackt. Hersteller und Anwendung solltest du entsprechend an dein Programm anpassen, um einen eindeutigen Pfad zu erstellen.
    Hinweis: Im meinen Beispiel heißt der Sound Success.wav, darum wurden auch die Namen entsprechend gewählt.

    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Yoghurt42 Sonntag, 26. Januar 2014 12:59
    Samstag, 25. Januar 2014 19:11
    Moderator