Właściwie trochę już nieaktualne, bo z większością problemów sobie poradziłem. Natomiast pozostało mi kilka kwestii:
-nie wyświetla mi się obraz w mediaelement, dźwięk słychać;
-jak zrobić, żeby po kliknięciu buttona okno MainWindow ginęło a pojawiało się inne (np. KaraokeWindow) i jak go ustawić wedle upodobań w xamlu i jak się odwołać do tego okna w C# (domyślam się, że wyglądałoby to tak: public partial class KaraokeWindow : Window);
-jak zrobić, żeby po wyświetleniu już swojego odtwarzacza po zakończeniu odtwarzania pojawiał się znów wcześniejszy stan okna czyli lista z piosenkami (coś z if <skończenie odtwarzania pliku w mediaelement> i z goto, np. Lista).
Myślę, że na tę chwilę to wszystko, czego mi potrzeba. Można by jeszcze pomyśleć o jakiejś optymalizacji kodu i dobrych nawykach, kilka dni w C# dopiero robię i nie chciałbym przecież utrwalać w sobie złe nawyki także poniżej kod:
XAML:
<Window x:Class="Karaoke.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Karaoke"
mc:Ignorable="d"
Title="MainWindow" Height="359" Width="525">
<Grid>
<TextBlock x:Name="Informacja" Margin="168,152,168,118" TextWrapping="Wrap"><Run Text="Aby rozpocząć, naciśnij Start."/><LineBreak/><Run Text="Aby zakończyć, naciśnij Zamknij."/></TextBlock>
<Button x:Name="start" Content="Start" Margin="149,222,149,52" Click="start_Click"/>
<Button x:Name="zamknij" Content="Zamknij" Margin="206,286,206,10" Click="zamknij_Click"/>
<ListBox x:Name="ListaTytulow" Visibility="Hidden" HorizontalAlignment="Left" Height="276" VerticalAlignment="Top" Width="400" SelectionChanged="ListaTytulow_SelectionChanged"/>
<Button x:Name="Odtworz" Content="Odtworz" Visibility="Hidden" HorizontalAlignment="Left" Margin="419,137,0,0" VerticalAlignment="Top" Width="75" Click="Odtworz_Click"/>
<MediaElement x:Name="mediaElement" Visibility="Hidden" HorizontalAlignment="Left" Height="276" Margin="10,10,0,0" VerticalAlignment="Top" Width="497" LoadedBehavior="Manual"/>
<Slider x:Name="Volume" Visibility="Hidden" HorizontalAlignment="Left" Margin="419,291,0,0" VerticalAlignment="Top" Width="88" ValueChanged="Volume_ValueChanged" Value="103" Maximum="100"/>
<Slider x:Name="Suwak" Visibility="Hidden" HorizontalAlignment="Left" Margin="10,267,0,0" VerticalAlignment="Top" Width="497" ValueChanged="Suwak_ValueChanged"/>
<Button x:Name="Play" Visibility="Hidden" HorizontalAlignment="Left" Margin="10,291,0,0" VerticalAlignment="Top" Width="21" Height="21" Click="Play_Click">
<Image Source="H:\Karaoke\Icons\IconPlay.png"/>
</Button>
<Button x:Name="Pause" Visibility="Hidden" HorizontalAlignment="Left" Margin="36,291,0,0" VerticalAlignment="Top" Width="21" Height="21" Click="Pause_Click">
<Image Source="H:\Karaoke\Icons\IconPause.png" Height="17" Width="17"/>
</Button>
<Button x:Name="Stop" Visibility="Hidden" HorizontalAlignment="Left" Margin="62,291,0,0" VerticalAlignment="Top" Width="21" Height="21" Click="Stop_Click">
<Image Source="H:\Karaoke\Icons\IconStop.png" Height="17" Width="17"/>
</Button>
<Label x:Name="Glosnosc" Visibility="Hidden" Content="Głośność" HorizontalAlignment="Left" Margin="467,298,0,0" VerticalAlignment="Top" FontSize="8" FontWeight="Thin" Height="22" Width="50" TextOptions.TextHintingMode="Fixed" FontStretch="ExtraCondensed" FontStyle="Italic"/>
</Grid>
</Window>
/*tutaj jak dobrze kombinuję musi być <Window x:Class="Karaoke.KaraokeWindow"> i przeniesienie tego wszystkiego co by pojawiało się w nowym oknie po kliknięciu Start */
C#:
using System;
using System.IO;
using System.Windows;
namespace Karaoke
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void zamknij_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.GetCurrentProcess().Kill();
}
private void start_Click(object sender, RoutedEventArgs e)
{
if (start.Visibility == Visibility.Visible)
{
Informacja.Visibility = Visibility.Hidden;
start.Visibility = Visibility.Hidden;
zamknij.Visibility = Visibility.Hidden;
DirectoryInfo dinfo = new DirectoryInfo(@"H:\Karaoke\MP4");
FileInfo[] Files = dinfo.GetFiles("*.mp4");
foreach (FileInfo file in Files)
{
ListaTytulow.Items.Add(Path.GetFileNameWithoutExtension(file.Name));
}
ListaTytulow.Visibility = Visibility.Visible;
Odtworz.Visibility = Visibility.Visible;
}
}
private void ListaTytulow_SelectionChanged(object sender, EventArgs e)
{
string wybranaPiosenka = ListaTytulow.SelectedItem.ToString();
var sciezkaKaraoke = (@"H:\Karaoke\MP4\");
string sciezkaWybranejPiosenki = sciezkaKaraoke + wybranaPiosenka + ".mp4";
mediaElement.Source = new Uri(sciezkaWybranejPiosenki);
Suwak.Value = mediaElement.Position.TotalSeconds;
}
private void Odtworz_Click(object sender, RoutedEventArgs e)
{
ListaTytulow.Visibility = Visibility.Hidden;
Odtworz.Visibility = Visibility.Hidden;
Play.Visibility = Visibility.Visible;
Pause.Visibility = Visibility.Visible;
Stop.Visibility = Visibility.Visible;
Glosnosc.Visibility = Visibility.Visible;
Volume.Visibility = Visibility.Visible;
Suwak.Visibility = Visibility.Visible;
mediaElement.Play();
}
private void Play_Click(object sender, RoutedEventArgs e)
{
mediaElement.Play();
}
private void Pause_Click(object sender, RoutedEventArgs e)
{
mediaElement.Pause();
}
private void Stop_Click(object sender, RoutedEventArgs e)
{
mediaElement.Stop();
}
private void Suwak_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
TimeSpan ts = TimeSpan.FromSeconds(e.NewValue);
mediaElement.Position = ts;
}
private void Volume_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
mediaElement.Volume = Volume.Value;
}
private void mediaElement_MediaOpened(object sender, RoutedEventArgs e)
{
if (mediaElement.NaturalDuration.HasTimeSpan)
{
TimeSpan ts = TimeSpan.FromMilliseconds(mediaElement.NaturalDuration.TimeSpan.TotalMilliseconds);
Suwak.Maximum = ts.TotalSeconds;
}
}
}
}
//to NaturalDuration żywcem przepisałem z filmiku na yt odnośnie tworzenia odtwarzacza filmu, nie do końca rozumiem użycie :D