Donnerstag, 24. Februar 2011

Lieder mit iTunes abspielen, in Wiedergabelisten navigieren

Im vorigen Post wurde gezeigt, wie man bestimmte Lieder in iTunes suchen kann, heute möchte ich nocheinmal explizit darauf eingehen, wie man Lieder abspielt und wie man in Wiedergabelisten navigiert, ein Lied vor etc ...
Zum Abspielen eines Lieds ist die Funktion Play() nötig, die von einem Objekt vom Typ IITTrack aufgerufen werden muss.
Wie im vorigen Post beschrieben kann also nach einem bestimmten Lied in der gesamten Musikbibliothek gesucht werden, bei Sucherfolg kann dieses dann mittels Play() abgespielt werden.
Folgendes Beispiel spielt das 10. Lied aus der Musikbibliothek ab:

foreach (IITTrack track in iTunesPlayer.LibraryPlaylist.Tracks)
{
    if (counter++ > 10)
    {
        track.Play();
        break;
    }
}

Eine ganze Wiedergabe kann über die Funktion PlayFirstTrack() abgespielt werden, die passenderweise von einer Wiedergabeliste aus (von einem Objekt vom Typ IITPlaylist) aufgerufen wird.
Die folgende Funktion sucht nach einer Playlist, dessen Namen dem übergebenen Parameter entspricht, und gibt diese dann zurück:

private IITPlaylist SuchePlayList(iTunesApp iTunesPlayer, string name)
{
    foreach (IITPlaylist playlist in iTunesPlayer.LibrarySource.Playlists)
        if (playlist.Name == name)
            return playlist;
    return null;
}

Wenn wir nun eine bestimmte Wiedergabeliste abspielen wollen, rufen wir die Suchfunktion mit dem Namen dieser auf und rufen dann die Funktion PlayFirstTrack() auf:

IITPlaylist Techno = SuchePlayList(iTunesPlayer, "Techno");
if (Techno != null)
    Techno.PlayFirstTrack();

Zum vorigen / nächsten Lied springen kann man über die Funktionen NextTrack() und PreviousTrack(), die über das iTunes Player Objekt aufgerufen werden:
iTunesPlayer.NextTrack();

iTunesPlayer.PreviousTrack();

Mittwoch, 23. Februar 2011

Bestimmte Titel in iTunes suchen

Nachdem im vorigen Post gezeigt wurde, wie man die komplette iTunes Mediathek durchläuft, möchte ich nun eine Möglichkeit zeigen, wie man nach bestimmten Titeln suchen kann.
Hierzu durchläuft man wie beschrieben die Mediathek oder bestimmte Playlists und prüft, ob die Suchkriterien erfüllt sind.
Die unten stehende Funktion sucht nach Interpret und Titel und gibt anschließend den gewünschten Track zurück.
Bei einer kompletten Suche kann es natürlich vorkommen, dass mehrere Ergebnisse gefunden werden, als Ergebnis würde sich dann eine Liste anbieten.

private IITTrack Suche(iTunesApp iTunesPlayer, string artist, string title)
{
    foreach (IITTrack track in iTunesPlayer.LibraryPlaylist.Tracks)
    {
        if (track.Artist == artist && track.Name == title)
            return track;
    }
    return null;
}

So könnte die Suchfunktion beispielsweise eingebunden werden, folgende Codezeilen suchen nach dem Lied "Saturday" von "Basshunter" und spielen dieses dann ab:

IITTrack Ergebnis = Suche(iTunesPlayer, "Basshunter", "Saturday");
if (Ergebnis != null)
    Ergebnis.Play();

Donnerstag, 17. Februar 2011

iTunes Mediathek durchlaufen

In diesem Post möchte ich euch zeigen, wie man in C# die komplette iTunes Mediathek bzw. einzelne Wiedergabeliste durchlaufen kann.
Voraussetzung hierfür ist der vorige Post (Einbinden von iTunes in C#).
Sei iTunesPlayer nun wieder ein Objekt vom Typ iTunesApp, welches auf iTunes referenziert.
Dann liefert die Eigenschaft iTunesPlayer.LibraryPlaylist.Tracks alle in iTunes geladenen Mediendateien als Objekte vom Typ IITTrack.
Folgender Beispielcode schreibt alle Titel in eine Textbox (diese heißt textBox1, Multiline muss auf true stehen und Scrollbars sollten aktiviert sein):

iTunesApp iTunesPlayer = new iTunesApp();
foreach (IITTrack track in iTunesPlayer.LibraryPlaylist.Tracks)
{
    textBox1.Text += track.Artist + " - " + track.Name + Environment.NewLine;
}

Es können aber auch gezielt einzelne Wiedergabelisten (Playlists) angesprochen werden.
Über die Eigenschaft iTunesPlayer.LibrarySource.Playlists kann auf alle angelegten Playlists zugegriffen werden.
Jede Playlist hat dann wieder die Eigenschaft Tracks, worin die Mediendateien der Liste gespeichert sind.
Der folgende Beispielcode schreibt in eine Textbox alle Wiedergabelisten aus iTunes samt Titeln (als 1. Wiedergabeliste erscheint die Wiedergabeliste "Mediathek", welche die gesamte Bibliothek enthält):

foreach (IITPlaylist playlist in iTunesPlayer.LibrarySource.Playlists)
{
    textBox1.Text += "Wiedergabeliste: " + playlist.Name + Environment.NewLine + Environment.NewLine;
    foreach (IITTrack track in playlist.Tracks)
    {
        textBox1.Text += track.Artist + " - " + track.Name + Environment.NewLine;
    }
    textBox1.Text += "--------------" + Environment.NewLine + Environment.NewLine;
}

iTunes einbinden

Die nächste Postreihe wird sich mit dem Musikprogramm iTunes von Apple beschäftigen.
Hierzu werde ich mehrere Posts veröffentlichen, die verschiedene Funktionen der Anbindung zeigen.
In diesem ersten Post zeige ich, wie man iTunes grundsätzlich in ein C# - Programm einbindet - hierfür ist gar keine zusätzliche Software wie das iTunes SDK nötig, schon bei der "normalen" Installation von iTunes wird das benötigte COM - Objekt mitinstalliert.
Um nun in einem bestehnden C# - Projekt eine Referenz zu diesem einzufügen, ist der Menüaufruf Projekt - Verweis hinzufügen nötig.
Dann wechselt man zur Spalte COM und wählt dort das Objekt iTunes 1.13 Type Library aus (die Versionsnummer kann natürlich anders lauten). Und schon ist iTunes fertig zur Nutzung!
Der Einfachkeit halber importieren wir die entsprechende Bibliothek mittels using:
using iTunesLib;

Im Programm kann dann eine Instanz des iTunes Players beispielsweise so instanziert werden:

iTunesApp iTunesPlayer = new iTunesApp();

Wird diese Zeile im Programm ausgeführt, öffnet sich iTunes (wenn nicht bereits offen), und die Player Instanz wird mit dem Objekt im C# - Programm verknüpft.
Im nächsten Post beschreibe ich das Durchlaufen aller Lieder der Musikbibliothek / verschiedener Wiedergabelisten.

Google Earth einbinden

So hallo, nach längerer Pause erscheint heute (endlich) mal wieder ein Post.
Tut mir Leid für die lange Zeit ohne, ich bin ziemlich beschäftigt im Moment, aber der Blog wird auf jeden Fall weiter gehen.

Der heutige Post ist eigentlich auch nur ein kurzer, allerdings dürfte er recht interessant werden.
Und zwar möchte ich kurz zeigen, wie man Google Earth in eine C# Anwendung einbinden kann.
Wie für viele Sachen gibt es von Google hierzu eine Programmbibliothek, die Google Earth API. In diesem Post hier geht's allerdings nur um eine erste Bereitstellung von Google Earth, dazu wird diese API gar nicht benötigt, denn online stellt Google ein Plugin für Desktopanwendungen bereit, welches sich im Browser betrachten lässt.
Dieses Plugin ist erreichbar unter der URL http://earth-api-samples.googlecode.com/svn/trunk/demos/desktop-embedded/pluginhost.html, wir müssen diese Seite nur noch in einem Webbrowser Steuerelement auf einem Formular unterbringen und schon haben wir den von Google Earth gewohnten bedienbaren Globus!
Ein kleines Manko ist, dass die Endnutzer das Plugin installieren müssen, allerdings wird das Fehlen dieses auch im Webbrowser Control angezeigt und kann mit einem Klick heruntergeladen werden.
Heißt das auf dem Formular platzierte Steuerlement webBrowser1, ruft folgender Code das Plugin auf:

private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.Navigate(@"http://earth-api-samples.googlecode.com/svn/trunk/demos/desktop-embedded/pluginhost.html");
}

So könnte dann eine beispielhafte Anwendung aussehen: