Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using NAudio.Wave;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Reflection.Emit;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
- namespace MuiscPlayer
- {
- public partial class Form1 : Form
- {
- public List<ZeneClass1> songs = new List<ZeneClass1>();
- private bool isPlaying = false;
- private long currentSample = 0;
- private WaveOutEvent waveOut = new WaveOutEvent();
- private WaveChannel32 waveStream;
- private int currentSongIndex = 0; // Az aktuális zene indexe
- public Form1()
- {
- InitializeComponent();
- // Új szál létrehozása a FolderBrowserDialog futtatásához
- Thread folderThread = new Thread(SelectFolder);
- folderThread.SetApartmentState(ApartmentState.STA);
- folderThread.Start();
- }
- private void SelectFolder()
- {
- using (var dialog = new FolderBrowserDialog())
- {
- DialogResult result = dialog.ShowDialog();
- if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(dialog.SelectedPath))
- {
- // Zenék betöltése a mappából és hozzáadása a listához
- ZeneClass1.LoadSongsFromFolder(dialog.SelectedPath, songs);
- }
- // Form megjelenítése a fő szálon
- Invoke((Action)(() =>
- {
- Show();
- label1.Text = $"{songs[0]}";
- }));
- }
- }
- private void button3_Click(object sender, EventArgs e)
- {
- if (!isPlaying)
- {
- isPlaying = true;
- button3.Text = "Stop";
- Task.Run(() =>
- {
- if (waveStream == null || waveStream.Position == waveStream.Length)
- {
- // Ha a waveStream null vagy a végére értünk, újra betöltjük a zenét
- if (songs.Count > 0)
- {
- var audioFile = new AudioFileReader(songs[0].FilePath);
- waveStream = new WaveChannel32(audioFile);
- currentSample = 0;
- waveOut.Init(waveStream); // Inicializáció
- }
- }
- else
- {
- // Pozíció visszaállítása az előző lejátszás helyére
- waveStream.Position = currentSample;
- }
- waveOut.Play(); // Lejátszás
- while (waveOut.PlaybackState == PlaybackState.Playing)
- {
- currentSample = waveStream.Position;
- System.Threading.Thread.Sleep(100);
- // Zene aktuális pozíciójának és hosszának meghatározása
- var currentTime = waveStream.CurrentTime.TotalSeconds;
- var totalTime = waveStream.TotalTime.TotalSeconds;
- // ProgressBar Value értékének beállítása az aktuális lejátszási pozíció alapján
- try
- {
- Invoke((Action)(() =>
- {
- progressBar1.Value = (int)((currentTime / totalTime) * 100);
- // Várakozás a következő frissítésig
- //System.Threading.Thread.Sleep(1);
- }));
- }
- catch (ObjectDisposedException ex)
- {
- Console.WriteLine($"Error_Debugging: {ex.Message}");
- //throw new Exception();
- }
- if (currentTime >= totalTime)
- {
- // Ha a zene végére értünk, akkor visszaállítjuk a ProgressBar-t 0-ra
- Invoke((Action)(() =>
- {
- progressBar1.Value = 0;
- }));
- currentSongIndex++; // Növeljük az aktuális zene indexét
- if (currentSongIndex < songs.Count)
- {
- // Betöltjük a következő zenét az aktuális zene indexével
- var audioFileNext = new AudioFileReader(songs[currentSongIndex].FilePath);
- waveStream = new WaveChannel32(audioFileNext);
- currentSample = 0;
- // pause - resume
- waveOut.Stop();
- waveOut.Dispose();
- waveOut = new WaveOutEvent();
- waveOut.Init(waveStream);
- Invoke((Action)(() =>
- {
- label1.Text = $"{songs[currentSongIndex]}";
- }));
- waveOut.Play();
- }
- else
- {
- // ha nincs tobb zene a lsitaban.
- Invoke((Action)(() =>
- {
- button3.Text = "Play";
- isPlaying = false;
- }));
- break;
- }
- }
- }
- // pozicio tarolasa
- if (waveOut.PlaybackState == PlaybackState.Stopped)
- {
- currentSample = waveStream.Position;
- }
- Invoke((Action)(() =>
- {
- button3.Text = "Play";
- isPlaying = false;
- }));
- });
- }
- else
- {
- waveOut.Pause();
- button3.Text = "Play";
- isPlaying = false;
- }
- }
- private void button2_Click(object sender, EventArgs e)
- {
- if (currentSongIndex + 1 < songs.Count)
- {
- currentSongIndex++; // Növeljük az aktuális zene indexét
- }
- else
- {
- currentSongIndex = 0; // Ha elértük a lista végét, állítsuk vissza 0-ra
- }
- var audioFileNext = new AudioFileReader(songs[currentSongIndex].FilePath);
- waveStream = new WaveChannel32(audioFileNext);
- currentSample = 0;
- waveOut.Stop();
- waveOut.Dispose();
- waveOut = new WaveOutEvent();
- waveOut.Init(waveStream);
- label1.Text = $"{songs[currentSongIndex]}";
- waveOut.Play();
- Invoke((Action)(() =>
- {
- progressBar1.Value = 0; // Reseteld a ProgressBar-t
- }));
- }
- private void button1_Click(object sender, EventArgs e)
- {
- if (currentSongIndex - 1 > songs.Count)
- {
- currentSongIndex--; // csokkentjük az aktuális zene indexét
- }
- else
- {
- currentSongIndex = 0; // Ha elértük a lista végét, állítsuk vissza 0-ra
- }
- var audioFileNext = new AudioFileReader(songs[currentSongIndex].FilePath);
- waveStream = new WaveChannel32(audioFileNext);
- currentSample = 0;
- waveOut.Stop();
- waveOut.Dispose();
- waveOut = new WaveOutEvent();
- waveOut.Init(waveStream);
- label1.Text = $"{songs[currentSongIndex]}";
- waveOut.Play();
- Invoke((Action)(() =>
- {
- progressBar1.Value = 0; // Reseteld a ProgressBar-t
- }));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment