IEnumerator waitForSoundTrack(musicTrack song) { yield return(new WaitWhile(() => musicTracks.isPlaying)); musicTracks.clip = musicList[(int)song]; musicTracks.Play(); }
public static string Conductor(upnpObject aObject) { string result = string.Empty; if (aObject is musicTrack) { musicTrack item = aObject as musicTrack; foreach (artist a in item.Artist) { if (a.Role != null && a.Role.ToLower() == "conductor") { result = a.Artist; } } } else if (aObject is musicVideoClip) { musicVideoClip item = aObject as musicVideoClip; foreach (artist a in item.Artist) { if (a.Role != null && a.Role.ToLower() == "conductor") { result = a.Artist; } } } // always return a non-null string return(NonNullString(result)); }
public static string Album(upnpObject aObject) { string result = string.Empty; if (aObject is musicAlbum) { musicAlbum album = aObject as musicAlbum; result = album.Title; } else if (aObject is musicVideoClip) { musicVideoClip item = aObject as musicVideoClip; if (item.Album.Count > 0) { result = item.Album[0]; } } else if (aObject is musicTrack) { musicTrack item = aObject as musicTrack; if (item.Album.Count > 0) { result = item.Album[0]; } } // always return a non-null string return(NonNullString(result)); }
// Music fade-out management private void fadeTrackOutIfNeeded(int nextSceneBuildIndex) { resetTrackFade(); musicTrack currentTrack = MusicManager.Instance.getCurrentTrack(); musicTrack nextTrack = MusicManager.Instance.getTrackForSceneIndex(nextSceneBuildIndex); //if (currentTrack.clip.name != nextTrack.clip.name) { if (currentTrack.clip != nextTrack.clip) { trackFadeCoroutine = StartCoroutine(fadeTrackOut()); } }
// You should go through this method in order to change the track at any time public void changeMusicTrack(musicTrack track) { currentTrack = track; music_as.clip = track.clip; refreshVolumes(); if (!music_as.isPlaying) { music_as.Play(); } }
//MUSIC TRACKS public AudioSource soundTrack(musicTrack song) { if (!musicTracks.isPlaying) { musicTracks.clip = musicList[(int)song]; musicTracks.Play(); musicTracks.loop = true; musicTracks.volume = 0.5f; } else { StartCoroutine(waitForSoundTrack(song)); } return(musicTracks); }
public static string Artist(upnpObject aObject) { string result = string.Empty; if (aObject is person) { person person = aObject as person; result = person.Title; } else if (aObject is musicAlbum) { // Artist and ALbum Artist are the same for musicAlbums return(AlbumArtist(aObject)); } else if (aObject is musicTrack) { musicTrack item = aObject as musicTrack; foreach (artist a in item.Artist) { if (a.Role == null || (a.Role != null && a.Role.ToLower() == "performer")) { result = a.Artist; if (a.Role != null) { break; } } } } else if (aObject is musicVideoClip) { musicVideoClip item = aObject as musicVideoClip; foreach (artist a in item.Artist) { if (a.Role == null || (a.Role != null && a.Role.ToLower() == "performer")) { result = a.Artist; if (a.Role != null) { break; } } } } // always return a non-null string return(NonNullString(result)); }
public static string OriginalTrackNumber(upnpObject aObject) { string result = string.Empty; if (aObject is musicTrack) { musicTrack track = aObject as musicTrack; if (track.OriginalTrackNumber > 0) { result = track.OriginalTrackNumber.ToString(); } } // always return a non-null string return(NonNullString(result)); }
private upnpObject CreateUpnpObject(ISource aSource) { musicTrack item = new musicTrack(); resource resource = new resource(); resource.Uri = iDirectSound.SourceUri(aSource); resource.ProtocolInfo = "http-get:*:audio/x-wav:*"; resource.Bitrate = 44100; item.Res.Add(resource); item.Id = aSource.Id; item.Title = aSource.Name; item.Album.Add("SoundCard"); artist artist = new artist(); artist.Artist = "Various"; item.Artist.Add(artist); //item.AlbumArtUri = aSource.LogoUri; return(item); }
public static string ReleaseYear(upnpObject aObject) { string result = string.Empty; if (aObject is playlistContainer) { playlistContainer container = aObject as playlistContainer; result = container.Date; } else if (aObject is album) { album album = aObject as album; result = album.Date; } else if (aObject is musicTrack) { musicTrack item = aObject as musicTrack; result = item.Date; } else if (aObject is audioBook) { audioBook item = aObject as audioBook; result = item.Date; } if (aObject is musicVideoClip) { musicVideoClip item = aObject as musicVideoClip; result = item.Date; } if (!string.IsNullOrEmpty(result)) { try { DateTime t = DateTime.Parse(result); result = t.Year.ToString().Trim(); } catch (FormatException) { } } // always return a non-null string return(NonNullString(result)); }
public static string Contributor(upnpObject aObject) { string result = string.Empty; if (aObject is album) { album album = aObject as album; if (album.Contributor.Count > 0) { result = album.Contributor[0]; } } else if (aObject is musicVideoClip) { musicVideoClip item = aObject as musicVideoClip; if (item.Contributor.Count > 0) { result = item.Contributor[0]; } } else if (aObject is musicTrack) { musicTrack item = aObject as musicTrack; if (item.Contributor.Count > 0) { result = item.Contributor[0]; } } else if (aObject is audioBook) { audioBook item = aObject as audioBook; if (item.Contributor.Count > 0) { result = item.Contributor[0]; } } // always return a non-null string return(NonNullString(result)); }
private upnpObject UpnpObject(ITrack aTrack) { musicTrack track = new musicTrack(); artist artist = new artist(); artist.Artist = aTrack.Artist; artist.Role = "Performer"; track.Artist.Add(artist); resource resource = new resource(); Time time = new Time(aTrack.Duration); resource.Duration = time.ToString(); resource.Uri = aTrack.Uri; track.Res.Add(resource); track.Album.Add(aTrack.Album); track.AlbumArtUri.Add(aTrack.ArtworkUri); track.Title = aTrack.Title; return(track); }
protected override void EventListViewLibrary_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) { TextFormatFlags flags = TextFormatFlags.VerticalCenter | TextFormatFlags.NoPrefix | TextFormatFlags.EndEllipsis; // Because of a bug in the underlying Win32 control, the DrawItem event occurs without accompanying DrawSubItem events once per row in the // details view when the mouse pointer moves over the row, causing anything painted in a DrawSubItem event handler to be painted over by a // custom background drawn in a DrawItem event handler. See the example in the OwnerDraw reference topic for a workaround that invalidates // each row when the extra event occurs. An alternative workaround is to put all your custom drawing code in a DrawSubItem event handler // and paint the background for the entire item (including subitems) only when the DrawListViewSubItemEventArgs.ColumnIndex value is 0. if (e.ColumnIndex == 0) { e.Graphics.FillRectangle(iBackBrush, e.Bounds); if (iIsAlbum && Items.Count > 0) { ListViewKinsky.Item item = Items[0] as ListViewKinsky.Item; musicTrack track = item.Tag as musicTrack; int iconHeight = (int)(Columns[0].Width * 0.5f); int iconOffset = 5;// (int)((Columns[0].Width - iconHeight) * 0.5f); Image albumArt = item.Icon; if (albumArt != null) { e.Graphics.FillRectangle(iBackBrush, item.Bounds.Left + iconOffset, item.Bounds.Top + iconOffset, iconHeight, iconHeight); try { e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; e.Graphics.DrawImage(albumArt, item.Bounds.Left + iconOffset, item.Bounds.Top + iconOffset, iconHeight, iconHeight); } catch (ArgumentException ex) { Trace.WriteLine(Trace.kKinsky, "ListViewLibrary.EventListViewLibrary_DrawSubItem: " + ex.Message); } } if (track != null) { int x = item.Bounds.Left + iconOffset + iconHeight + iconOffset; int y = item.Bounds.Top + iconOffset; int width = Columns[0].Width + item.Bounds.Left; int height = iFont.Height; e.Graphics.FillRectangle(iBackBrush, new Rectangle(x, y, width - x, height * 4)); string album = DidlLiteAdapter.Album(track); if (!string.IsNullOrEmpty(album)) { TextRenderer.DrawText(e.Graphics, album, iFont, new Rectangle(x, y, width - x, height), ForeColor, flags); y += height; } string artist = DidlLiteAdapter.AlbumArtist(track); if (!string.IsNullOrEmpty(artist)) { TextRenderer.DrawText(e.Graphics, artist, iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags); y += height; } string genre = DidlLiteAdapter.Genre(track); if (!string.IsNullOrEmpty(genre)) { TextRenderer.DrawText(e.Graphics, genre, iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags); y += height; } TextRenderer.DrawText(e.Graphics, DidlLiteAdapter.ReleaseYear(track), iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags); } } } //Console.WriteLine("columIndex=" + e.ColumnIndex + ", header=" + e.Header + ", item=" + e.Item + ", itemIndex=" + e.ItemIndex + ", subItem=" + e.SubItem); //e.DrawDefault = true; //return; if (e.ColumnIndex > 0) { if (e.Item.Selected) { e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; e.Graphics.FillRectangle(iHighlightBackBrush, e.Bounds); } else { e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; e.Graphics.FillRectangle(iBackBrush, e.Bounds); } } ListViewItem.ListViewSubItem subItem = null; for (int i = 0; i < e.Item.SubItems.Count; ++i) { if (e.Item.SubItems[i].Name == e.Header.Name) { subItem = e.Item.SubItems[i]; break; } } if (subItem != null) { if (e.Item.Selected) { TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, HighlightForeColour, flags); } else { if (e.Header.Name != "Title") { TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, ForeColorMuted, flags); } else { TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, ForeColor, flags); } } } }
// When each scene is loaded, the correct track should be played void OnSceneLoaded(Scene scene, LoadSceneMode mode) { musicTrack nextTrack = getTrackForSceneIndex(scene.buildIndex); changeMusicTrack(nextTrack); }
public static upnpObject Create(FileInfo aInfo, string aArtworkUri, string aResourceUri) { // check for playlist file if (aInfo.Extension == Playlist.kPlaylistExtension) { playlistContainer playlist = new playlistContainer(); resource resource = new resource(); playlist.Res.Add(resource); playlist.Id = aInfo.FullName; playlist.Title = aInfo.Name; playlist.WriteStatus = "PROTECTED"; playlist.Restricted = true; resource.Size = aInfo.Length; resource.Uri = aResourceUri; return(playlist); } // check for audio/video file try { if (IsTagLibSupported(aInfo)) { TagLib.File f = TagLib.File.Create(aInfo.FullName); if (f.Properties.MediaTypes == MediaTypes.Audio) { musicTrack track = new musicTrack(); resource resource = new resource(); track.Res.Add(resource); track.Id = aInfo.FullName; track.WriteStatus = "PROTECTED"; track.Restricted = true; if (!f.Tag.IsEmpty) { if (f.Tag.Title != null) { track.Title = f.Tag.Title; } else { track.Title = aInfo.Name; } if (f.Tag.Album != null) { track.Album.Add(f.Tag.Album); } foreach (string g in f.Tag.Genres) { track.Genre.Add(g); } track.OriginalTrackNumber = (int)f.Tag.Track; track.Date = f.Tag.Year.ToString(); foreach (string p in f.Tag.Performers) { artist performer = new artist(); performer.Artist = p; performer.Role = "Performer"; track.Artist.Add(performer); } foreach (string a in f.Tag.AlbumArtists) { artist artist = new artist(); artist.Artist = a; artist.Role = "AlbumArtist"; track.Artist.Add(artist); } foreach (string c in f.Tag.Composers) { artist composer = new artist(); composer.Artist = c; composer.Role = "Composer"; track.Artist.Add(composer); } if (f.Tag.Conductor != null) { artist conductor = new artist(); conductor.Artist = f.Tag.Conductor; conductor.Role = "Conductor"; track.Artist.Add(conductor); } } else { track.Title = aInfo.Name; } resource.Bitrate = (int)((f.Properties.AudioBitrate * 1000.0f) / 8.0f); resource.Duration = new Time((int)f.Properties.Duration.TotalSeconds).ToString(); resource.NrAudioChannels = f.Properties.AudioChannels; resource.SampleFrequency = f.Properties.AudioSampleRate; resource.Size = aInfo.Length; resource.Uri = aResourceUri; resource.ProtocolInfo = string.Format("http-get:*:{0}:*", f.MimeType.Replace("taglib", "audio")); resource.ProtocolInfo = resource.ProtocolInfo.Replace("flac", "x-flac"); resource.ProtocolInfo = resource.ProtocolInfo.Replace("aif:", "aiff:"); resource.ProtocolInfo = resource.ProtocolInfo.Replace("wma", "x-ms-wma"); resource.ProtocolInfo = resource.ProtocolInfo.Replace("asf", "x-ms-asf"); resource.ProtocolInfo = resource.ProtocolInfo.Replace("mp3", "mpeg"); resource.ProtocolInfo = resource.ProtocolInfo.Replace("mpeg3", "mpeg"); resource.ProtocolInfo = resource.ProtocolInfo.Replace("m4a", "x-m4a"); if (!string.IsNullOrEmpty(aArtworkUri)) { track.AlbumArtUri.Add(aArtworkUri); } return(track); } else if (f.Properties.MediaTypes == TagLib.MediaTypes.Video) { videoItem video = new videoItem(); resource resource = new resource(); video.Res.Add(resource); video.Id = aInfo.FullName; video.WriteStatus = "PROTECTED"; video.Restricted = true; if (!f.Tag.IsEmpty) { if (f.Tag.Title != null) { video.Title = f.Tag.Title; } else { video.Title = aInfo.Name; } foreach (string g in f.Tag.Genres) { video.Genre.Add(g); } foreach (string p in f.Tag.Performers) { actor performer = new actor(); performer.Actor = p; performer.Role = "Actor"; video.Actor.Add(performer); } } else { video.Title = aInfo.Name; } resource.Bitrate = (int)((f.Properties.AudioBitrate * 1000.0f) / 8.0f); resource.Duration = new Time((int)f.Properties.Duration.TotalSeconds).ToString(); resource.NrAudioChannels = f.Properties.AudioChannels; resource.SampleFrequency = f.Properties.AudioSampleRate; resource.Size = aInfo.Length; resource.Uri = aResourceUri; resource.ProtocolInfo = string.Format("http-get:*:{0}:*", f.MimeType.Replace("taglib", "video")); if (!string.IsNullOrEmpty(aArtworkUri)) { video.AlbumArtUri.Add(aArtworkUri); } return(video); } } } catch (TagLib.UnsupportedFormatException) { } catch (Exception e) { UserLog.WriteLine(aInfo.FullName + ": " + e.Message); } // check for image file string mimeType; if (IsImageFile(aInfo, out mimeType)) { photo photo = new photo(); resource resource = new resource(); photo.Res.Add(resource); photo.Id = aInfo.FullName; photo.Title = aInfo.Name; photo.WriteStatus = "PROTECTED"; photo.Restricted = true; resource.Size = aInfo.Length; resource.Uri = aResourceUri; resource.ProtocolInfo = string.Format("http-get:*:{0}:*", mimeType); if (!string.IsNullOrEmpty(aArtworkUri)) { photo.AlbumArtUri.Add(aArtworkUri); } return(photo); } // all other types { item item = new item(); resource resource = new resource(); item.Res.Add(resource); item.Id = aInfo.FullName; item.Title = aInfo.Name; item.WriteStatus = "PROTECTED"; item.Restricted = true; resource.Size = aInfo.Length; resource.Uri = aResourceUri; resource.ProtocolInfo = string.Format("http-get:*:application/octet-stream:*"); if (!string.IsNullOrEmpty(aArtworkUri)) { item.AlbumArtUri.Add(aArtworkUri); } return(item); } }
public void Process(NodeItem aNode) { LibraryItem libItem = aNode.LibraryItem; musicTrack track = new musicTrack(); track.Id = aNode.Id.ToString(); track.RefId = aNode.RefId.ToString(); track.ParentId = iParent.Id.ToString(); track.Restricted = true; track.WriteStatus = "PROTECTED"; if (libItem.Name != null) { track.Title = libItem.Name; } if (libItem.Album != null) { track.Album.Add(libItem.Album); } if (libItem.Artist != null) { artist artist = new artist(); artist.Artist = libItem.Artist; track.Artist.Add(artist); } if (libItem.Genre != null) { track.Genre.Add(libItem.Genre); } if (libItem.DiscCount != -1) { track.OriginalDiscCount = (int)libItem.DiscCount; } if (libItem.DiscNumber != -1) { track.OriginalDiscNumber = (int)libItem.DiscNumber; } if (libItem.TrackNumber != -1) { track.OriginalTrackNumber = (int)libItem.TrackNumber; } resource res = new resource(); if (libItem.BitRate != -1) { res.Bitrate = ((int)libItem.BitRate * 1000) / 8; } if (libItem.SampleRate != -1) { res.SampleFrequency = (int)libItem.SampleRate; } if (libItem.Size != -1) { res.Size = libItem.Size; } if (libItem.TotalTime != -1) { Upnp.Time totalTime = new Time(Convert.ToInt32(libItem.TotalTime / 1000)); res.Duration = totalTime.ToString(); } if (libItem.Kind.Contains("MPEG audio file")) { res.ProtocolInfo = "http-get:*:audio/mpeg:*"; } else if (libItem.Kind.Contains("WAV audio file")) { res.ProtocolInfo = "http-get:*:audio/x-wav:*"; } else if (libItem.Kind.Contains("AIFF audio file")) { res.ProtocolInfo = "http-get:*:audio/x-aiff:*"; } else if (libItem.Kind.Contains("AAC audio file")) { res.ProtocolInfo = "http-get:*:audio/x-m4a:*"; } else if (libItem.Kind.Contains("Apple Lossless audio file")) { res.ProtocolInfo = "http-get:*:audio/x-m4a:*"; } else { // if the file kind is unrecognised, set the protocol info so the // DS will decide - this means that KDT will add the track to the // DS playlist and then the DS can decide whether it wants to play it res.ProtocolInfo = "http-get:*:*:*"; } if (libItem.Location != null) { System.Uri uri = new System.Uri(libItem.Location); if (uri.Scheme == "file" && uri.Host == "localhost") { // handle paths that are "/Users/..." or "/C:\\Users\\..." i.e. mac or windows // strings passed to the VirtualFileSystem.Uri method must be unescaped. The unescaping // was initially implemented at the point where the Location element is read from // the XML file (the Location URI in the XML file is escaped). However, when this // unescaped string was passed to the Uri constructor, the uri.AbsolutePath returns // an **escaped** string, thus another unescape had to be performed here anyway. So, // no point in doing it twice - just do it here string path = System.Uri.UnescapeDataString(uri.AbsolutePath); if (path[2] == ':') { path = path.Substring(1); } try { res.Uri = iSupport.VirtualFileSystem.Uri(path); } catch (HttpServerException) { } } } if (res.ProtocolInfo != "" && res.Uri != "") { track.Res.Add(res); } if (libItem.AlbumArtId != null) { string filename = iLibrary.GetAlbumArtFilenameNoExt(libItem.AlbumArtId) + libItem.AlbumArtExt; try { string albumArtUri = iSupport.VirtualFileSystem.Uri(filename); track.AlbumArtUri.Add(albumArtUri); } catch (HttpServerException) { } } iMetadata = track; }
public static string Publisher(upnpObject aObject) { string result = string.Empty; if (aObject is album) { album item = aObject as album; for (int i = 0; i < item.Publisher.Count; ++i) { if (i > 0 && i < item.Publisher.Count - 1) { result += ", "; } result += item.Publisher[i]; } } else if (aObject is musicVideoClip) { musicVideoClip item = aObject as musicVideoClip; result = item.Publisher; } else if (aObject is musicTrack) { musicTrack item = aObject as musicTrack; for (int i = 0; i < item.Publisher.Count; ++i) { if (i > 0 && i < item.Publisher.Count - 1) { result += ", "; } result += item.Publisher[i]; } } else if (aObject is audioBook) { audioBook item = aObject as audioBook; for (int i = 0; i < item.Publisher.Count; ++i) { if (i > 0 && i < item.Publisher.Count - 1) { result += ", "; } result += item.Publisher[i]; } } else if (aObject is videoItem) { videoItem item = aObject as videoItem; result = item.Publisher; } else if (aObject is videoBroadcast) { videoBroadcast item = aObject as videoBroadcast; result = item.Publisher; } else if (aObject is movie) { movie item = aObject as movie; result = item.Publisher; } // always return a non-null string return(NonNullString(result)); }
public static string AlbumArtist(upnpObject aObject) { string result = string.Empty; if (aObject is person) { person person = aObject as person; result = person.Title; } else if (aObject is musicAlbum) { // Album Artist for a musicAlbum object is, in order of preference, // - the <artist role="albumArtist"> value // - the <artist> value // - the <creator> value musicAlbum album = aObject as musicAlbum; string roleAlbumArtist = null; string roleNull = null; foreach (artist a in album.Artist) { if (string.IsNullOrEmpty(a.Role)) { roleNull = a.Artist; } else if (a.Role.ToLower() == "albumartist") { roleAlbumArtist = a.Artist; } } if (!string.IsNullOrEmpty(roleAlbumArtist)) { result = roleAlbumArtist; } else if (!string.IsNullOrEmpty(roleNull)) { result = roleNull; } else { result = album.Creator; } } else if (aObject is musicTrack) { // Album Artist for a track is unambiguous - it is the <artist role="albumArtist"> value or nothing musicTrack item = aObject as musicTrack; foreach (artist a in item.Artist) { if (a.Role != null && a.Role.ToLower() == "albumartist") { result = a.Artist; break; } } } else if (aObject is musicVideoClip) { musicVideoClip item = aObject as musicVideoClip; foreach (artist a in item.Artist) { if (a.Role != null && a.Role.ToLower() == "albumartist") { result = a.Artist; break; } } } // always return a non-null string return(NonNullString(result)); }