CSong::CSong(CMusicInfoTag& tag) { SYSTEMTIME stTime; tag.GetReleaseDate(stTime); strTitle = tag.GetTitle(); genre = tag.GetGenre(); strFileName = tag.GetURL(); artist = tag.GetArtist(); strAlbum = tag.GetAlbum(); albumArtist = tag.GetAlbumArtist(); strMusicBrainzTrackID = tag.GetMusicBrainzTrackID(); strMusicBrainzArtistID = tag.GetMusicBrainzArtistID(); strMusicBrainzAlbumID = tag.GetMusicBrainzAlbumID(); strMusicBrainzAlbumArtistID = tag.GetMusicBrainzAlbumArtistID(); strMusicBrainzTRMID = tag.GetMusicBrainzTRMID(); strComment = tag.GetComment(); rating = tag.GetRating(); iYear = stTime.wYear; iTrack = tag.GetTrackAndDiskNumber(); iDuration = tag.GetDuration(); bCompilation = tag.GetCompilation(); embeddedArt = tag.GetCoverArtInfo(); strThumb = ""; iStartOffset = 0; iEndOffset = 0; idSong = -1; iTimesPlayed = 0; iKaraokeNumber = 0; iKaraokeDelay = 0; //! Karaoke song lyrics-music delay in 1/10 seconds. iAlbumId = -1; }
CSong::CSong(CMusicInfoTag& tag) { SYSTEMTIME stTime; tag.GetReleaseDate(stTime); strTitle = tag.GetTitle(); strGenre = tag.GetGenre(); strFileName = tag.GetURL(); strArtist = tag.GetArtist(); strAlbum = tag.GetAlbum(); strAlbumArtist = tag.GetAlbumArtist(); strComment = tag.GetComment(); strLabel = tag.GetLabel(); // Laureon: Added getLabel strISRC = tag.GetISRC(); // Laureon: Added getISRC iVisible = 1; // Laureon: Added: Song Visibility rating = tag.GetRating(); iYear = stTime.wYear; iTrack = tag.GetTrackAndDiskNumber(); iDuration = tag.GetDuration(); strThumb = ""; iStartOffset = 0; iEndOffset = 0; idSong = -1; iTimesPlayed = 0; iKaraokeNumber = 0; iKaraokeDelay = 0; //! Karaoke song lyrics-music delay in 1/10 seconds. iArtistId = -1; iAlbumId = -1; }
bool CMusicInfoTagLoaderMP4::Load(const CStdString& strFileName, CMusicInfoTag& tag) { try { // Initially we say that we've not loaded any tag information tag.SetLoaded(false); // Attempt to open the file.. if ( !m_file.Open( strFileName ) ) { CLog::Log(LOGDEBUG, "Tag loader mp4: failed to open file %s", strFileName.c_str() ); return false; } // We've opened it, so associate the tag with the filename. tag.SetURL(strFileName); // Now go parse our atom data m_thumbSize = false; m_thumbData = NULL; m_isCompilation = false; ParseAtom( 0, m_file.GetLength(), tag ); if (m_thumbData) { // cache the thumb // if we don't have an album tag, cache with the full file path so that // other non-tagged files don't get this album image CStdString strCoverArt; if (!tag.GetAlbum().IsEmpty() && (!tag.GetAlbumArtist().IsEmpty() || !tag.GetArtist().IsEmpty())) strCoverArt = CThumbnailCache::GetAlbumThumb(&tag); else strCoverArt = CThumbnailCache::GetMusicThumb(tag.GetURL()); if (!CUtil::ThumbExists(strCoverArt)) { if (CPicture::CreateThumbnailFromMemory( m_thumbData, m_thumbSize, "", strCoverArt ) ) { CUtil::ThumbCacheAdd( strCoverArt, true ); } else { CLog::Log(LOGDEBUG, "%s unable to cache thumb as %s", __FUNCTION__, strCoverArt.c_str()); CUtil::ThumbCacheAdd( strCoverArt, false ); } } delete[] m_thumbData; } if (m_isCompilation) { // iTunes compilation flag is set - this could be a various artists file if (tag.GetAlbumArtist().IsEmpty()) tag.SetAlbumArtist(g_localizeStrings.Get(340)); // Various Artists } // Close the file.. m_file.Close(); // Return to caller return true; } catch (...) { CLog::Log(LOGERROR, "Tag loader mp4: exception in file %s", strFileName.c_str()); } // Something must have gone wrong for us to get here, so let's report our failure to the boss.. tag.SetLoaded(false); return false; }
void CMusicInfoTagLoaderWMA::SetTagValueBinary(const CStdString& strFrameName, const unsigned char* pValue, CMusicInfoTag& tag) { if (strFrameName == "WM/Picture") { WM_PICTURE picture; int iPicOffset = 0; // Picture types: http://msdn.microsoft.com/library/en-us/wmform/htm/wm_picture.asp picture.bPictureType = (BYTE)pValue[iPicOffset]; iPicOffset += 1; picture.dwDataLen = (DWORD)pValue[iPicOffset] + (pValue[iPicOffset + 1] * 0x100) + (pValue[iPicOffset + 2] * 0x10000); iPicOffset += 4; CStdStringW wString; CStdString16 utf16String = (uint16_t*)(pValue+iPicOffset); g_charsetConverter.utf16LEtoW(utf16String, wString); g_charsetConverter.wToUTF8(wString, picture.pwszMIMEType); iPicOffset += (wString.length() * 2); iPicOffset += 2; utf16String = (uint16_t*)(pValue+iPicOffset); g_charsetConverter.utf16LEtoW(utf16String, picture.pwszDescription); iPicOffset += (picture.pwszDescription.length() * 2); iPicOffset += 2; picture.pbData = (BYTE *)(pValue + iPicOffset); // many wma's don't have the bPictureType specified. For now, just take // Cover Front (3) or Other (0) as the cover. if (picture.bPictureType == 3 || picture.bPictureType == 0) // Cover Front { CStdString strExtension(picture.pwszMIMEType); // if we don't have an album tag, cache with the full file path so that // other non-tagged files don't get this album image CStdString strCoverArt; if (!tag.GetAlbum().IsEmpty() && (!tag.GetAlbumArtist().IsEmpty() || !tag.GetArtist().IsEmpty())) strCoverArt = CUtil::GetCachedAlbumThumb(tag.GetAlbum(), tag.GetAlbumArtist().IsEmpty() ? tag.GetArtist() : tag.GetAlbumArtist()); else strCoverArt = CUtil::GetCachedMusicThumb(tag.GetURL()); if (!CUtil::ThumbExists(strCoverArt)) { int nPos = strExtension.Find('/'); if (nPos > -1) strExtension.Delete(0, nPos + 1); if (picture.pbData != NULL && picture.dwDataLen > 0) { if (CPicture::CreateThumbnailFromMemory(picture.pbData, picture.dwDataLen, strExtension, strCoverArt)) { CUtil::ThumbCacheAdd(strCoverArt, true); } else { CUtil::ThumbCacheAdd(strCoverArt, false); CLog::Log(LOGERROR, "Tag loader wma: " "Unable to create album art for %s " "(extension=%s, size=%u)", tag.GetURL().c_str(), strExtension.c_str(), picture.dwDataLen); } } } } } }