Mediaplayer
Børre Stenseth
Moduler>GUI-komponenter>Mediaplayer

Mediaplayer

Hva
screen
Introduksjon av Windows Mediaplayer som kontrol

I denne modulen introduserer vi en "ny" komponent i verktøykassa til Visual Studios GUI-editor. Vi vil bruke MIcrosofts Windows Mediaplayer som en komponent. Denne er ikke automatisk lagt inn i verktøykassa. Vi skal legge til denne komponenten, lage et trivielt program som bruker den og et litt mer involvert eksempel, Klokkeradio.

Å legge inn en ny komponent

Her forutsettes at Windows Mediaplayer er installert på maskinen. Vi kan da legge inn Mediplayer-komponenten i verktøykassa ved å velge menyen: "Tools" - "Choose Toolbox Items". Så velger vi "COM Components" og haker av for "Windows Mediaplayer". Vi kvitterer med ok.

Når vi har gjort dette vil det dukke opp en ny komponent i verktøykassa. Vi kan trekke denne inn på en form og vi ser da at to nye biblioteker har dukket opp under references: AxWMPLib og WMPLib.

Et enkelt program

Det enkleste vi kan gjøre er å kople mediakomponenten til en URI som den skal spille av, typisk en mp3-fil:

public Form1()
{
    InitializeComponent();
    this.axWindowsMediaPlayer1.URL = @"c:\music\Stan Getz\The Lyrical Stan Getz\04 Ligia.mp3";
    //this.axWindowsMediaPlayer1.URL = @"http://radio.hiof.no/nrk-p2-128";          
}

Alternativet som er kommentert ut spiller en radiostrøm i mp3-format (NRK P2), som sendes fra HIOF's medieprosjekt.

Uten å vite mer om Mediaplayer enn det vi finner ut av properties i Visual Studio kan vi lage en enkel radio slik:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace mediaplay
{
    // NRKs lyd tjenester se:
    // http://nrk.no/tjenester/lyd/
    
    public partial class Form1 : Form
    {
        //String startTune="c:\\music\\Stan Getz\\The Lyrical Stan Getz\\04 Ligia.mp3";
        String startTune = "c:\\music\\Stan_Getz___Chet_Baker___Misty_.mp3";
        public Form1()
        {
            InitializeComponent();
            this.axWindowsMediaPlayer1.URL = startTune;
            labelKanal.Text = "Stan Getz";
        }
 
        private void trackBar1_Changed(object sender, EventArgs e)
        {
            int ix = trackBar1.Value;
            String address = "";
            String kname = "";            
            switch (ix)
            {
                case 1: address =
                    startTune; 
                    kname = "Stan Getz"; break;
                case 2: address =                    
                    "http://lyd.nrk.no/nrk_radio_p1_ostlandssendingen_mp3_m";
                    // was _wma_m in stead of _mp3_m
                    kname = "NRK-P1"; break;
                case 3: address =
                    "http://lyd.nrk.no/nrk_radio_p2_mp3_m"; 
                    kname = "NRK-P2";break;
                case 4: address =
                    "http://lyd.nrk.no/nrk_radio_p3_mp3_m"; 
                    kname = "NRK-P3"; break;
                case 5: address =
                    "http://lyd.nrk.no/nrk_radio_klassisk_mp3_m"; 
                    kname = "NRK-Alltid klassisk";break;
                case 6: address =
                    "http://lyd.nrk.no/nrk_radio_alltid_nyheter_mp3_m"; 
                    kname = "NRK-Alltid nyheter";break;
                default: address =
                    "http://lyd.nrk.no/nrk_radio_p1_ostlandssendingen_mp3_m"; 
                    kname = "NRK-P1"; break;
            }
            labelKanal.Text = kname;
            this.axWindowsMediaPlayer1.URL = address;
        }
    }
}

Dette er en minimalistisk løsning som mangler en del i detaljer i grensesnittet og i hensiktsmessig utforming av mediaplayer.

Klokkeradio

screen

Dersom du bruker programmet Windows Mediaplayer vet du at dette er et program som kan spille mange formater, lyd og video. Vi vet dessuten at vi kan skifte utseende på spilleren, den kan vises i forskjellige former og vi kan administrere spillelister. Alle disse mulighetene er tilgjengelig for oss som programmerere, men for å få til dette må vi ha dokumentasjon og helst noen eksempler. Vi finner dette her: [1] Hvis du laster ned exe-fila: Windows Media Player 10 SDK, og kjører denne vil den lage en katalog på din maskin der du vil finne dokumentasjon og eksempler i flere programmeringsspråk.

Vi bruker noe av den kunnskapen vi finner og bygger en enkel klokkeradio. Igjen er det mye som kan gjøres for å lage grensesnittet pent og bedre, funksjonelt sett. Det er heller ikke bygd inn noen form for sikkerhet i koden.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using AxWMPLib;
using WMPLib;

namespace mediaplay2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // deafult selections
            comboBoxPlayerMode.SelectedIndex = 0;
            comboBoxStation.SelectedIndex = 1;
            // time now
            DateTime dt = DateTime.Now;
            labelNowHour.Text = Convert.ToString(dt.Hour);
            labelNowMinute.Text = Convert.ToString(dt.Minute);
            // default alarm
            numericUpDownHours.Value = 6;
            numericUpDownMinutes.Value = 0;           
        }
        private void buttonStart_Click(object sender, EventArgs e)
        {
            if (axWindowsMediaPlayer1.playState == WMPPlayState.wmppsPlaying)
                axWindowsMediaPlayer1.Ctlcontrols.stop();//.pause();
            else
                axWindowsMediaPlayer1.Ctlcontrols.play();                
        }
        private void comboBoxPlayerMode_SelectedIndexChanged(object sender, 
                                                            EventArgs e)
        {
            String mode = 
                (String)comboBoxPlayerMode.Items[comboBoxPlayerMode.SelectedIndex];
            axWindowsMediaPlayer1.uiMode = mode;
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            // ticks once in a minute
            DateTime dt = DateTime.Now;
            if((dt.Hour==Convert.ToInt16(numericUpDownHours.Value))&&
                (dt.Minute==Convert.ToInt16(numericUpDownMinutes.Value)))
            {
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
            labelNowHour.Text = Convert.ToString(dt.Hour);
            labelNowMinute.Text = Convert.ToString(dt.Minute);
        }
        private void comboBoxStation_SelectedIndexChanged(object sender, 
                                                          EventArgs e)
        {
            int ix = comboBoxStation.SelectedIndex;
            // from: http://nrk.no/tjenester/lyd/
            String address = "";
            switch (ix)
            {
                case 0: address = 
                        // was:"http://radio.hiof.no/nrk-p1-128";break;
                    "http://lyd.nrk.no/nrk_radio_p1_ostlandssendingen_wma_m";break;
                case 1: address =
                        // was:"http://radio.hiof.no/nrk-p2-128";break;
                    "http://lyd.nrk.no/nrk_radio_p2_wma_m";break;
                case 2: address =
                        // was:"http://radio.hiof.no/nrk-petre-128";break;
                    "http://lyd.nrk.no/nrk_radio_p3_wma_m";break;
                case 3: address =
                        // was:"http://radio.hiof.no/nrk-alltid-klassisk-128";break;
                    "http://lyd.nrk.no/nrk_radio_klassisk_wma_m";break;
                case 4: address =
                        // was:"http://radio.hiof.no/nrk-alltid-nyheter-128";break;
                    "http://lyd.nrk.no/nrk_radio_alltid_nyheter_wma_m";break;
                default: address =
                        // was:"http://radio.hiof.no/nrk-p1-128";break;
                    "http://lyd.nrk.no/nrk_radio_p1_ostlandssendingen_wma_m";break;
            }
            this.axWindowsMediaPlayer1.URL = address;
        }
    }
}
Referanser
  1. Windows Media Developer CenterMicrosoft2009Microsoftmsdn.microsoft.com/en-us/windowsmedia/default.aspx14-03-2010
  • Minimumsradioen:
    https://svn.hiof.no/svn/psource/Csharpspikes/mediaplay1
  • Klokkeradioen:
    https://svn.hiof.no/svn/psource/Csharpspikes/mediaplay2
Vedlikehold
B.Stenseth, januar 2007
(Velkommen) Moduler>GUI-komponenter>Mediaplayer (Kortstokk)