⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 id3.c

📁 plam编程
💻 C
字号:
/***********************************************************************
 *
 * Copyright (c) 2004 PalmOne Inc. or its subsidiaries.
 * All rights reserved.
 *
 ***********************************************************************/

/***********************************************************************
 *
 * File:
 *	id3.c
 *
 * Description:
 *	
 *
 ***********************************************************************/
 
#include "id3.h"

/***********************************************************************
 *
 * FUNCTION:    ConvertSynchsafeToIntger
 *
 * DESCRIPTION: 
 *
 * PARAMETERS:  
 *
 * RETURNED:    
 *
 ***********************************************************************/

static UInt32 ConvertSynchsafeToIntger(UInt32 value)
{
	UInt32 result = 0;
	
	result = value & 0x7F;
	result |= ( value & 0x7F00 ) >> 1;
	result |= ( value & 0x7F0000 ) >> 1;
	result |= ( value & 0x7F000000 ) >> 1;
		
	return result;
}

/***********************************************************************
 *
 * FUNCTION:    TagIsID3v1
 *
 * DESCRIPTION: 
 *
 * PARAMETERS:  
 *
 * RETURNED:    
 *
 ***********************************************************************/

Boolean CheckID3v1(Char* stream, UInt16 streamLen, ID3v1Tag* tag)
{
	if( streamLen < 128 )
		return false;
		
	if( stream[0] == 'T' && stream[1] == 'A' && stream[2] == 'G' )
	{
		MemSet((Char*)tag->title, 31, 0);
		StrNCopy(tag->title,  stream + 3, 30);
		MemSet((Char*)tag->artist, 31, 0);
		StrNCopy(tag->artist, stream + 33, 30);
		MemSet((Char*)tag->album, 31, 0);
		StrNCopy(tag->album,  stream + 63, 30);
		MemSet((Char*)tag->year, 31, 0);
		StrNCopy(tag->year,  stream + 93, 4);
		MemSet((Char*)tag->comment, 31, 0);
		StrNCopy(tag->comment, stream + 97, 30);
		tag->genre = stream[127];
	}
	else
		return false;
		
	return true;
}

/***********************************************************************
 *
 * FUNCTION:    TagIsID3v2
 *
 * DESCRIPTION: 
 *
 * PARAMETERS:  
 *
 * RETURNED:    
 *
 ***********************************************************************/

Boolean CheckID3v2(Char* stream, UInt16 streamLen, UInt32* size)
{
	Char flags;
	UInt32 headerSize;
	Boolean footer;
	
	*size = 0;
	
	if( streamLen < 10 )
		return false;
		
	// Check the first 3 bytes
	if( stream[0] == 'I' && stream[1] == 'D' && stream[2] == '3' )
	{
		// Read the flags
		flags = stream[5];
		footer = (flags & 0x10)?true:false;
		
		headerSize = ((UInt32)(stream[6]) << 24)| ((UInt32)(stream[7]) << 16) | ((UInt32)(stream[8]) << 8) |((UInt32)(stream[9]));
		headerSize = ConvertSynchsafeToIntger(headerSize);
		if( footer ) headerSize += 10;
		
		*size = 10 + headerSize;
	}
	else
		return false;
		
	return true;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -