Avatar billede unsigned Nybegynder
06. juni 2006 - 18:25 Der er 7 kommentarer og
1 løsning

Hent mp3-fil-varighed med mciSendString

Jeg har programmeret en mp3 afspiller. Det går meget godt med play, pause og stop. Men det er ikke nok. Jeg vil også kunne hente varigheden af den aktuelle mp3 fil, men funktionen virker ikke. Hele koden er listet nedenfor. Jeg har markeret funktionen med #-tegn. Alle bidrag modtages med tak.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Runtime.InteropServices;
using System.Collections;

namespace mptre
{
    public partial class mptre : Form
    {
        [DllImport("winmm.dll")]
            private static extern long mciSendString(string strCommand,
                StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);

        // Erklæringer
        string akt_mus; // akt_mus er den mp3 fil, som brugeren eller
            // programmet aktuelt har valgt til afspilning.
        int tilstand = 0;
            // Tilstand er den tilstand, som mp3 afspilleren er i.
            //      1 = stoppet
            //      2 = spiller
            //      3 = paused
        int lae_i_sek ; // Holder længden i sekunder af akt_mus melodien

        public mptre()
        {
            InitializeComponent();
        }

        private void mptre_Load(object sender, EventArgs e)
        {
            WindowState = FormWindowState.Maximized;
            til_tekst.Text = "Tilstand: Stoppet.";
        }

        private void mptre_FormClosed(object sender, FormClosedEventArgs e)
        {
        }

        private void button8_Click(object sender, EventArgs e)
        {
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        }

        private void button2_Click(object sender, EventArgs e)
        {
        }

        public void Open(string sFileName)
        {
            //MP3 is the device type that we are going to use
            //the format of the song location must be with double quotes around it
            string sCommand = "open \"" + sFileName + "\" type mpegvideo alias MediaFile";
            mciSendString(sCommand, null, 0, IntPtr.Zero);
        }

        public void Play()
        {
            //tell the device to play
            string sCommand = "play MediaFile";
            mciSendString(sCommand, null, 0, IntPtr.Zero);
        }

        void egen_play(string akt_mus2)
        {
            Open(akt_mus2);
            Play();
        }

        private void button14_Click(object sender, EventArgs e)
        {
            egen_play(akt_mus);
            tilstand = 2 ; // Spiller
            til_tekst.Text = "Tilstand: Spiller.";
        }

        private void button12_Click(object sender, EventArgs e)
        {
            mciSendString("Close MediaFile", null, 0, IntPtr.Zero);
            tilstand = 1; // Stoppet
            til_tekst.Text = "Tilstand: Stoppet.";
        }

        private void button13_Click(object sender, EventArgs e)
        {
            mciSendString("Pause MediaFile", null, 0, IntPtr.Zero);
            tilstand = 3; // Paused
            til_tekst.Text = "Tilstand: Paused." ;
        }
       
        // ### Varighed funktion her #######################
        public int hent_laengde_i_sekunder()
        {
            Open(akt_mus);
            System.Text.StringBuilder durLength = new System.Text.StringBuilder(128);
            mciSendString("status media length", durLength, durLength.Length, IntPtr.Zero);
            if(durLength.Length == 0)
                return -1 ;
            return (int)(Convert.ToDouble(durLength) / 1000f);
            mciSendString("Close MediaFile", null, 0, IntPtr.Zero);
        }

        private void til_tekst_TextChanged(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Vælg nummeret
            if (Vaelg_et_nummer.ShowDialog() == DialogResult.OK)
            {
                // Skriv navn
                textBox1.Text = Vaelg_et_nummer.FileName;
                akt_mus = Vaelg_et_nummer.FileName;
            }
            lae_i_sek = hent_laengde_i_sekunder();
            melodi_laengde.Text = "Aktuel melodi varighed: " + Convert.ToString(lae_i_sek);
        }
    }
}
Avatar billede Slettet bruger
09. juni 2006 - 08:33 #1
Jeg har lavet en klasse hvor du kan hente en hel masse ud fra en mp3 fil. Duration, bitrate, length osv.. er det noget du er interesseret i?
Avatar billede unsigned Nybegynder
09. juni 2006 - 11:46 #2
Ja, det er jeg. :)
Avatar billede Slettet bruger
09. juni 2006 - 12:26 #3
http://media.putfile.com/ID3-Tags

OMDØB TIL .rar, gad ikke finde en anden upload side ;)

using MP3Info;

For at få info ud:

TagInfo mp3File = ID3TagReader.ReadTags("Den fulde sti til musik filen");

mp3File.Album
mp3File.Artist

osv...


For at skrive Tag info i filen:

bool result0 = ID3TagReader.SetTagInfo(FullPathLabel.Text, AlbumLabel.Text, 0);
                bool result1 = ID3TagReader.SetTagInfo(FullPathLabel.Text, ArtistLabel.Text, 1);
                //bool result2 = ID3TagReader.SetTagInfo(FullPathLabel.Text, BitrateLabel.Text, 2);
                //bool result3 = ID3TagReader.SetTagInfo(FullPathLabel.Text, DurationLabel.Text, 3);
                bool result4 = ID3TagReader.SetTagInfo(FullPathLabel.Text, GenreLabel.Text, 4);
                bool result5 = ID3TagReader.SetTagInfo(FullPathLabel.Text, TitleLabel.Text, 5);
                //bool result6 = ID3TagReader.SetTagInfo(FullPathLabel.Text, TrackLabel.Text, 6);
                //bool result7 = ID3TagReader.SetTagInfo(FullPathLabel.Text, Year.Text, 7)


Det er ikke alle jeg har fået til at virke så man kan skrive, kun dem med strings vidst nok.. men du kan jo se på det
Avatar billede Slettet bruger
09. juni 2006 - 12:27 #4
hmm det virker jo ikke, 2 sec
Avatar billede Slettet bruger
09. juni 2006 - 12:35 #5
Avatar billede unsigned Nybegynder
09. juni 2006 - 12:42 #6
Det ser spændende ud. Jeg ser på det og kommer med en tilbagemelding.
Avatar billede unsigned Nybegynder
11. juni 2006 - 23:56 #7
Jeg har downloadet filen og pakket de 2 cs filer ud. Jeg har tænkt på at arbejde noget mp3-fil-tags-opdatering ind i min mp3 afspiller, så det er noget jeg kan bruge. Smid et svar, så får du pointene. I første omgang vil jeg have mcisendstring til at virke. Men når jeg kommer til/har programmeret opdateringsdelen, vil jeg komme med et indlæg.
Avatar billede Slettet bruger
12. juni 2006 - 00:02 #8
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