Avatar billede Slettet bruger
14. februar 2006 - 18:46 Der er 10 kommentarer og
1 løsning

ID3 Tag Writer, behøver hjælp med Byte[]

Jeg er ved at tage en MP3 tag reader/writer.. readeren fungere som den skal, men kan ikke fine ud af at skrive til filen..

Her er hvad jeg har lavet på writeren:

static void SetSongAttributeByName(IWMHeaderInfo3 info, string name, WMT_ATTR_DATATYPE attribType)
        {
            ushort length = 4;
            byte[] attribData = null;
            ushort streamNum = 0;
            try
            {
                attribData = new byte[length];
               
                info.SetAttribute(streamNum, name, attribType, attribData, length);
            }
            catch (Exception)
            {
                attribData = new byte[0];
            }
        }


Jeg skal angive teksten der skal skrives, men det skal være som byte.. Smider lige lidt kode som måske kan være til hjælp..

Håber nogen kan være til hjælp!.. tak

MSND: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmform95/htm/iwmheaderinfosetattribute.asp




Her HENTER jeg information fra en fil:

static byte[] GetSongAttributeByName(IWMHeaderInfo3 info, string name, ref WMT_ATTR_DATATYPE attribType)
        {
            ushort length = 0;
            byte[] attribData = null;
            ushort streamNum = 0;
            try
            {
                if (info.GetAttributeByName(ref streamNum, name, out attribType, null, ref length) == 0)
                {
                    attribData = new byte[length];
                    info.GetAttributeByName(ref streamNum, name, out attribType, attribData, ref length);
                }
            }
            catch (Exception)
            {
                attribData = new byte[0];
            }
            return attribData;
        }



name er fx "Title"




public static TagInfo GetPlayListTags(string filepath)
        {
            IWMMetadataEditor editor;

            string filename = "";
            string artist = "";
            string title = "";
            int duration = 0;

            if (WMFSDKFunctions.WMCreateEditor(out editor) == 0)
            {
                try
                {
                    if (editor.Open(filepath) == 0)
                    {
                        byte[] attribData;
                        WMT_ATTR_DATATYPE attribType = WMT_ATTR_DATATYPE.WMT_TYPE_QWORD;
                        IWMHeaderInfo3 header = editor as IWMHeaderInfo3;

                        filename = System.IO.Path.GetFileNameWithoutExtension(filepath);
                       
                        attribData = GetSongAttributeByName(header, "Duration", ref attribType);
                        duration = Convert.ToInt32(BitConverter.ToUInt64(attribData, 0) / 10000000);

                        attribData = GetSongAttributeByName(header, "Title", ref attribType);
                        title = ConvertToString(attribData);

                        attribData = GetSongAttributeByName(header, "Author", ref attribType);
                        artist = ConvertToString(attribData);

                        if (title == "")
                            title = "Unknown";

                        if (artist == "")
                            artist = "Unknown";
                     
                    }
                }
                catch (Exception)
                {
                    string ErrorTitle = "";
                    string ErrorArtist = "";
                    int ErrorDuration = 0;

                    if (title != "") ErrorTitle = title;
                    else ErrorTitle = "Unknown";
                   
                    if (artist != "") ErrorArtist = artist;
                    else ErrorArtist = "Unknown";

                    if (duration > 0) ErrorDuration = duration;
                    else ErrorDuration = 0;

                    editor.Close();
                    return new TagInfo(filename, ErrorTitle, ErrorArtist, "Not Available", "Not Available", ErrorDuration, "Not Available", 0, 0, 0);
                }
            }
           
            editor.Close();
            return new TagInfo(filename, title, artist, "Not Available", "Not Available", duration, "Not Available", 0, 0, 0);
        }
Avatar billede nielle Nybegynder
14. februar 2006 - 20:16 #1
Hvordan definere du dinIWMHeaderInfo3 klasse?
Avatar billede nielle Nybegynder
14. februar 2006 - 20:28 #2
... eller retter sagt dit interface. :^)

Mere bestemt, hvordan importere du SetAttribute-funktionen?
Avatar billede Slettet bruger
14. februar 2006 - 20:34 #3
Det gør jeg ud fra "WMFSDKWrapper.dll" filen fundet i dette projekt:

http://www.codeproject.com/csharp/yamo.asp
Avatar billede nielle Nybegynder
14. februar 2006 - 20:42 #4
Jeg er ikke medlem og han derfor ikke lige downloade de filer. :^|

Jeg forstår dog ikke... hvis de allerede har wrappet SetAttribute-funktionen i den dll, så er det vel bare at kalde den som den er?
Avatar billede Slettet bruger
14. februar 2006 - 20:48 #5
Jep der er det jo, men problemet er jeg ikke ved hvordan jeg bruger den, kig på min "SetSongAttributeByName", jeg skal skrive en Byte[] værdi som så skal være fx den nye title...
Avatar billede nielle Nybegynder
14. februar 2006 - 20:54 #6
Det lyder nu underligt at de skulle have valgt at wrappe funktionen på den måde, når det faktisk er helt simpelt at wrappe den som en string på den argument-plads.

Desuden lyder byte som et halv-dårligt walg idet at funktionen faktisk forventer en "wide-character null-terminated string " - altså et array hvor hvert tegn fylder 2 byte (unicode).

Men det kan jo være at det rent faktisk *er* sådan at det skal gøres - hvad siger din intellisense når at du har markøren ved name-argumentet?
Avatar billede Slettet bruger
14. februar 2006 - 20:59 #7
name er string.. er sikker på det punkt angiver hvor den skal skrive, fx under "title" eller "album". attribdata må være den nye titel i byte[], length må være størrelsen på det byte array, men hvordan forvandler jeg fx "ny titel" til en byte array for at sætte det ind?
Avatar billede nielle Nybegynder
14. februar 2006 - 21:22 #8
Ahh på den måde.. :^)

Prøv med dette:

byte[] attribData = System.Text.Encoding.ASCII.GetBytes("Demo æøå");
int length = attribData.Length;
Avatar billede nielle Nybegynder
20. februar 2006 - 18:48 #9
Har du fået kigget på det?
Avatar billede Slettet bruger
19. marts 2007 - 14:30 #10
smider du et svar? :)
Avatar billede nielle Nybegynder
19. marts 2007 - 19:30 #11
Svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester