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);
}
}
}
