From 41dd9951755948c64264895b5849322a6739a1ba Mon Sep 17 00:00:00 2001 From: Kenneth van Ewijk Date: Fri, 30 Oct 2015 16:48:33 +0100 Subject: [PATCH] New time handling in song --- MusicPlayer/MusicPlayer/APIHandler.cs | 2 +- MusicPlayer/MusicPlayer/AudioHandler.cs | 43 ++++++++++++++++++------- MusicPlayer/MusicPlayer/MainForm.cs | 4 +-- MusicPlayer/MusicPlayer/Program.cs | 8 ++--- MusicPlayer/MusicPlayer/Song.cs | 5 ++- 5 files changed, 43 insertions(+), 19 deletions(-) diff --git a/MusicPlayer/MusicPlayer/APIHandler.cs b/MusicPlayer/MusicPlayer/APIHandler.cs index a954496..bea2825 100755 --- a/MusicPlayer/MusicPlayer/APIHandler.cs +++ b/MusicPlayer/MusicPlayer/APIHandler.cs @@ -55,7 +55,7 @@ namespace MusicPlayer dynamic songs = o["songs"]; for (int i = 0; i < songs.Count; i++) { - songslist.Add(new Song(songs[i][0].ToString(), songs[i][3].ToString(), songs[i][5].ToString(), songs[i][4].ToString(), this)); + songslist.Add(new Song(songs[i][0].ToString(), songs[i][3].ToString(), songs[i][5].ToString(), songs[i][4].ToString(), songs[i][1].ToString(), (int)songs[i][9], this)); } } return songslist; diff --git a/MusicPlayer/MusicPlayer/AudioHandler.cs b/MusicPlayer/MusicPlayer/AudioHandler.cs index 350cd13..b20b580 100755 --- a/MusicPlayer/MusicPlayer/AudioHandler.cs +++ b/MusicPlayer/MusicPlayer/AudioHandler.cs @@ -18,13 +18,19 @@ namespace MusicPlayer public BufferState BState { get; set; } public int Buffered { get { return Math.Min((int)((bufpos / (double)LengthBuffer) * 100), 100); } } - public int Position { get { return Math.Min((int)((playpos / (double)Length) * 100), 100); } } - public string CurrentTime { get; set; } - public string TotalTime { get; set; } private long LengthBuffer { get; set; } - private long Length { get; set; } private long bufpos = 0; + + + public int Position { get { return Math.Min((int)((playpos / (double)Length) * 100), 100); } } + private long Length { get; set; } private long playpos = 0; + + + public int CurrentTime { get; set; } + + public int TotalTime { get { return CurrentSong != null ? CurrentSong.Seconds : 0; } } + private long seek = 0; private Stream ms; @@ -44,6 +50,8 @@ namespace MusicPlayer AState = AudioState.STOPPED; BState = BufferState.EMPTY; + CurrentSong = null; + Thread.Sleep(11); ms = new MemoryStream(); @@ -58,6 +66,7 @@ namespace MusicPlayer LengthBuffer = 1; bufpos = 0; playpos = 0; + CurrentTime = 0; } public void Play(Song s) @@ -105,9 +114,6 @@ namespace MusicPlayer ms.Position = position; Mp3FileReader mp3fr = new Mp3FileReader(ms); - Length = mp3fr.Length; - CurrentTime = mp3fr.CurrentTime + ""; - TotalTime = mp3fr.TotalTime + ""; using (WaveStream blockAlignedStream = new BlockAlignReductionStream(WaveFormatConversionStream.CreatePcmStream(mp3fr))) { @@ -116,6 +122,9 @@ namespace MusicPlayer waveOut.Init(blockAlignedStream); waveOut.Play(); + Length = CurrentSong.Seconds * waveOut.OutputWaveFormat.AverageBytesPerSecond; + CurrentTime = (int)(ms.Position / waveOut.OutputWaveFormat.AverageBytesPerSecond); + while (waveOut.PlaybackState != PlaybackState.Stopped) { System.Threading.Thread.Sleep(10); @@ -142,13 +151,13 @@ namespace MusicPlayer } playpos = blockAlignedStream.Position; - Length = mp3fr.Length; - CurrentTime = mp3fr.CurrentTime + ""; - TotalTime = mp3fr.TotalTime + ""; + CurrentTime = (int)(playpos / waveOut.OutputWaveFormat.AverageBytesPerSecond); + } AState = AudioState.STOPPED; playpos = 0; + CurrentTime = 0; } } } @@ -156,7 +165,19 @@ namespace MusicPlayer private void LoadAudio(object o) { Song s = (Song) o; - var response = WebRequest.Create(s.Url).GetResponse(); + WebResponse response = null; + + try + { + response = WebRequest.Create(s.Url).GetResponse(); + } + catch(Exception e) + { + BState = BufferState.EMPTY; + AState = AudioState.STOPPED; + return; + } + BState = BufferState.EMPTY; LengthBuffer = response.ContentLength; diff --git a/MusicPlayer/MusicPlayer/MainForm.cs b/MusicPlayer/MusicPlayer/MainForm.cs index 65a27ec..bf8c68e 100644 --- a/MusicPlayer/MusicPlayer/MainForm.cs +++ b/MusicPlayer/MusicPlayer/MainForm.cs @@ -78,8 +78,8 @@ namespace MusicPlayer if(!clicked) PositionTrackBar.Value = main.audio.Position; - LabelCurrentTime.Text = main.audio.CurrentTime; - LabelTotalTime.Text = main.audio.TotalTime; + LabelCurrentTime.Text = main.audio.CurrentTime + ""; + LabelTotalTime.Text = main.audio.TotalTime + ""; } private void GenreListBox_SelectedIndexChanged(object sender, EventArgs e) diff --git a/MusicPlayer/MusicPlayer/Program.cs b/MusicPlayer/MusicPlayer/Program.cs index aca8d84..8e609c8 100755 --- a/MusicPlayer/MusicPlayer/Program.cs +++ b/MusicPlayer/MusicPlayer/Program.cs @@ -27,10 +27,10 @@ namespace MusicPlayer // { // Console.WriteLine(s.Name); // }); - api.GetSongsByGenre("Melodic Death Metal").ForEach(s => - { - Console.WriteLine(s.Name); - }); +// api.GetSongsByGenre("Melodic Death Metal").ForEach(s => +// { +// Console.WriteLine(s.Name); +// }); // api.GetSongsByAlbum("Stronger").ForEach(s => // { // Console.WriteLine(s.Name); diff --git a/MusicPlayer/MusicPlayer/Song.cs b/MusicPlayer/MusicPlayer/Song.cs index a44b6cf..498d5bb 100755 --- a/MusicPlayer/MusicPlayer/Song.cs +++ b/MusicPlayer/MusicPlayer/Song.cs @@ -12,18 +12,21 @@ namespace MusicPlayer public string Name { get; set; } public string Album { get; set; } public string Artist { get; set; } + public string Genre { get; set; } public string Url { get { return GetURL(); } set { SetURL(value); } } + public int Seconds { get; set; } private APIHandler api; private string url; - public Song(string songid, string name, string album, string artist, APIHandler api) + public Song(string songid, string name, string album, string artist, string genre, int seconds, APIHandler api) { SongID = songid; Name = name; Album = album; Artist = artist; + Seconds = seconds; this.api = api;