Click here to Skip to main content
15,899,754 members
Home / Discussions / C#
   

C#

 
AnswerRe: How to perform carriage return by coding,not by clicking the Enter key? Pin
Luis Alonso Ramos19-Nov-04 9:03
Luis Alonso Ramos19-Nov-04 9:03 
Generaldatagrid slow updating Pin
bwagz18-Nov-04 14:21
bwagz18-Nov-04 14:21 
GeneralArrayList in ArrayList Pin
stumpi18-Nov-04 13:52
stumpi18-Nov-04 13:52 
GeneralRe: ArrayList in ArrayList Pin
maibuihuynhtg18-Nov-04 16:43
maibuihuynhtg18-Nov-04 16:43 
GeneralOverriding soap interpretation of specific types Pin
WildRide18-Nov-04 13:32
WildRide18-Nov-04 13:32 
GeneralRe: Overriding soap interpretation of specific types Pin
steve_hocking19-Nov-04 3:23
steve_hocking19-Nov-04 3:23 
QuestionHow can i get the ID3 info on MP3s Pin
visiontec18-Nov-04 13:30
visiontec18-Nov-04 13:30 
AnswerRe: How can i get the ID3 info on MP3s Pin
Leon van Wyk18-Nov-04 22:07
professionalLeon van Wyk18-Nov-04 22:07 
This is not perfect but it works.

<br />
<br />
namespace id3 {<br />
<br />
  using System;<br />
  using System.IO;<br />
  using System.Text;<br />
  <br />
  class FileCommands <br />
  {<br />
<br />
    public static void GetMP3Tag (ref MP3 paramMP3) <br />
	{<br />
		try<br />
		{<br />
			// Read the 128 byte ID3 tag into a byte array<br />
			FileStream oFileStream;<br />
			oFileStream = new FileStream(paramMP3.fileComplete , FileMode.Open);<br />
			byte[] bBuffer = new byte[128];<br />
			oFileStream.Seek(-128, SeekOrigin.End);<br />
			oFileStream.Read(bBuffer,0, 128);<br />
			oFileStream.Close();<br />
  <br />
			// Convert the Byte Array to a String<br />
			Encoding  instEncoding = new ASCIIEncoding();   // NB: Encoding is an Abstract class<br />
			string id3Tag = instEncoding.GetString(bBuffer);<br />
  <br />
<br />
<br />
			// If there is an attched ID3 v1.x TAG then read it <br />
			if (id3Tag .Substring(0,3) == "TAG") <br />
			{<br />
				paramMP3.id3Title       = id3Tag.Substring(  3, 30).Trim();<br />
				paramMP3.id3Artist      = id3Tag.Substring( 33, 30).Trim();<br />
				paramMP3.id3Album       = id3Tag.Substring( 63, 30).Trim();<br />
				paramMP3.id3Year        = id3Tag.Substring( 93, 4).Trim();<br />
				paramMP3.id3Comment     = id3Tag.Substring( 97,28).Trim();<br />
<br />
<br />
<br />
				// Get the track number if TAG conforms to ID3 v1.1<br />
				if (id3Tag[125]==0)<br />
					paramMP3.id3TrackNumber = bBuffer[126];<br />
				else<br />
					paramMP3.id3TrackNumber = 0;<br />
<br />
				paramMP3.id3Genre = bBuffer[127];<br />
				paramMP3.hasID3Tag     = true;<br />
				// ********* IF USED IN ANGER: ENSURE to test for non-numeric year<br />
			}<br />
			else <br />
			{<br />
				// ID3 Tag not found so create an empty TAG in case the user saces later<br />
				paramMP3.id3Title       = paramMP3.fileFileName.Substring(0,paramMP3.fileFileName.LastIndexOf("."));<br />
				paramMP3.id3Artist      = "";<br />
				paramMP3.id3Album       = "";<br />
				paramMP3.id3Year        = "";<br />
				paramMP3.id3Comment     = "";<br />
				paramMP3.id3TrackNumber = 0;<br />
				paramMP3.id3Genre       = 0;<br />
				paramMP3.hasID3Tag      = false;<br />
			}<br />
		}<br />
		catch<br />
		{<br />
			// ID3 Tag not found so create an empty TAG in case the user saces later<br />
			paramMP3.id3Title       = paramMP3.fileFileName.Substring(0,paramMP3.fileFileName.LastIndexOf("."));<br />
			paramMP3.id3Artist      = "";<br />
			paramMP3.id3Album       = "";<br />
			paramMP3.id3Year        = "";<br />
			paramMP3.id3Comment     = "";<br />
			paramMP3.id3TrackNumber = 0;<br />
			paramMP3.id3Genre       = 0;<br />
			paramMP3.hasID3Tag      = false;<br />
		}<br />
    }<br />
  <br />
    public static void UpdateMP3Tag (ref MP3 paramMP3) {<br />
      // Trim any whitespace<br />
      paramMP3.id3Title   = paramMP3.id3Title.Trim();<br />
      paramMP3.id3Artist  = paramMP3.id3Artist.Trim();<br />
      paramMP3.id3Album   = paramMP3.id3Album.Trim();<br />
      paramMP3.id3Year    = paramMP3.id3Year.Trim();<br />
      paramMP3.id3Comment = paramMP3.id3Comment.Trim();<br />
  <br />
      // Ensure all properties are correct size<br />
      if (paramMP3.id3Title.Length > 30)   paramMP3.id3Title    = paramMP3.id3Title.Substring(0,30);<br />
      if (paramMP3.id3Artist.Length > 30)  paramMP3.id3Artist   = paramMP3.id3Artist.Substring(0,30);<br />
      if (paramMP3.id3Album.Length > 30)   paramMP3.id3Album    = paramMP3.id3Album.Substring(0,30);<br />
      if (paramMP3.id3Year.Length > 4)     paramMP3.id3Year     = paramMP3.id3Year.Substring(0,4);<br />
      if (paramMP3.id3Comment.Length > 28) paramMP3.id3Comment  = paramMP3.id3Comment.Substring(0,28);<br />
      <br />
      // Build a new ID3 Tag (128 Bytes)<br />
      byte[] tagByteArray = new byte[128];<br />
      for ( int i = 0; i < tagByteArray.Length; i++ ) tagByteArray[i] = 0; // Initialise array to nulls<br />
  <br />
      // Convert the Byte Array to a String<br />
      Encoding  instEncoding = new ASCIIEncoding();   // NB: Encoding is an Abstract class // ************ To DO: Make a shared instance of ASCIIEncoding so we don't keep creating/destroying it<br />
      // Copy "TAG" to Array<br />
      byte[] workingByteArray = instEncoding.GetBytes("TAG"); <br />
      Array.Copy(workingByteArray, 0, tagByteArray, 0, workingByteArray.Length);<br />
      // Copy Title to Array<br />
      workingByteArray = instEncoding.GetBytes(paramMP3.id3Title);<br />
      Array.Copy(workingByteArray, 0, tagByteArray, 3, workingByteArray.Length);<br />
      // Copy Artist to Array<br />
      workingByteArray = instEncoding.GetBytes(paramMP3.id3Artist);<br />
      Array.Copy(workingByteArray, 0, tagByteArray, 33, workingByteArray.Length);<br />
      // Copy Album to Array<br />
      workingByteArray = instEncoding.GetBytes(paramMP3.id3Album);<br />
      Array.Copy(workingByteArray, 0, tagByteArray, 63, workingByteArray.Length);<br />
      // Copy Year to Array<br />
      workingByteArray = instEncoding.GetBytes(paramMP3.id3Year);<br />
      Array.Copy(workingByteArray, 0, tagByteArray, 93, workingByteArray.Length);<br />
      // Copy Comment to Array<br />
      workingByteArray = instEncoding.GetBytes(paramMP3.id3Comment);<br />
      Array.Copy(workingByteArray, 0, tagByteArray, 97, workingByteArray.Length);<br />
      // Copy Track and Genre to Array<br />
      tagByteArray[126] = paramMP3.id3TrackNumber;<br />
      tagByteArray[127] = paramMP3.id3Genre;<br />
  <br />
      // SAVE TO DISK: Replace the final 128 Bytes with our new ID3 tag<br />
      FileStream oFileStream = new FileStream(paramMP3.fileComplete , FileMode.Open);<br />
      if (paramMP3.hasID3Tag)<br />
          oFileStream.Seek(-128, SeekOrigin.End);<br />
      else<br />
          oFileStream.Seek(0, SeekOrigin.End);<br />
      oFileStream.Write(tagByteArray,0, 128);<br />
      oFileStream.Close();<br />
      paramMP3.hasID3Tag  = true;<br />
    }<br />
  <br />
  }<br />
  <br />
  struct MP3 <br />
  {<br />
      public string  filePath;<br />
      public string  fileFileName;<br />
      public string  fileComplete;<br />
      public bool    hasID3Tag;<br />
      public string  id3Title;<br />
      public string  id3Artist;<br />
      public string  id3Album;<br />
      public string  id3Year;<br />
      public string  id3Comment;<br />
      public byte    id3TrackNumber;<br />
      public byte    id3Genre;<br />
      <br />
	  public override string ToString()<br />
	  {<br />
		  return id3Title;<br />
	  }<br />
      // Required struct constructor<br />
      public MP3(string path, string name) <br />
	  {<br />
        this.filePath     = path;<br />
        this.fileFileName = name;<br />
        this.fileComplete = path + "\\" + name;<br />
        this.hasID3Tag    = false;<br />
        this.id3Title   = null;<br />
        this.id3Artist    = null;<br />
        this.id3Album   = null;<br />
        this.id3Year    = null;<br />
        this.id3Comment   = null;<br />
        this.id3TrackNumber = 0;<br />
        this.id3Genre   = 0;<br />
    }<br />
  } <br />
}<br />
<br />
<br />


Leon v Wyk
GeneralOverriding Object.Equals; Overriding Object.GetHashCode Pin
McClamm18-Nov-04 12:07
McClamm18-Nov-04 12:07 
GeneralRe: Overriding Object.Equals; Overriding Object.GetHashCode Pin
Daniel Turini18-Nov-04 20:45
Daniel Turini18-Nov-04 20:45 
GeneralDeclaring arrays of class objects Pin
Steve Searcy18-Nov-04 9:20
Steve Searcy18-Nov-04 9:20 
GeneralRe: Declaring arrays of class objects Pin
Daniel Turini18-Nov-04 10:05
Daniel Turini18-Nov-04 10:05 
GeneralDataGrid Header in Windows Application Pin
Hamada_star18-Nov-04 6:28
Hamada_star18-Nov-04 6:28 
GeneralC# Datagrid Separate Column Header Font Colors Pin
StyleGuide18-Nov-04 5:13
StyleGuide18-Nov-04 5:13 
QuestionHow to create automatic updates ? Pin
Inquire2you18-Nov-04 4:14
Inquire2you18-Nov-04 4:14 
AnswerRe: How to create automatic updates ? Pin
Ami Bar18-Nov-04 9:19
Ami Bar18-Nov-04 9:19 
Generalcombobox.selectedvalue Pin
webhay18-Nov-04 3:16
webhay18-Nov-04 3:16 
GeneralString Contains String Pin
MrEyes18-Nov-04 3:01
MrEyes18-Nov-04 3:01 
GeneralRe: String Contains String Pin
MrEyes18-Nov-04 3:10
MrEyes18-Nov-04 3:10 
Generaleasy: string formatting Pin
bouli18-Nov-04 1:17
bouli18-Nov-04 1:17 
GeneralRe: easy: string formatting Pin
Ami Bar18-Nov-04 4:11
Ami Bar18-Nov-04 4:11 
GeneralRe: easy: string formatting Pin
bouli18-Nov-04 4:15
bouli18-Nov-04 4:15 
GeneralRe: easy: string formatting Pin
Dave Kreskowiak18-Nov-04 6:33
mveDave Kreskowiak18-Nov-04 6:33 
GeneralRe: easy: string formatting Pin
bouli18-Nov-04 9:06
bouli18-Nov-04 9:06 
GeneralRe: easy: string formatting Pin
Dave Kreskowiak18-Nov-04 9:46
mveDave Kreskowiak18-Nov-04 9:46 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.