Artikel

Dezember 2004 | Artikel

Da ist Musik drin!

(Link zum Artikel: http://www.it-republik.de/dotnet/artikel/0650)

WMA-Dateien mit Visual Basic .NET erzeugen und manipulieren

Text: von Uwe Baumann
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
WMA ist neben MP3 das populärste Format für digitale Audiodaten: Der Windows Media Player, aber auch die meisten portablen Digitalplayer, DVD-Player und sogar neuere Autoradios freuen sich über Daten in diesem Format. Kein Wunder, denn WMA glänzt mit guter Klangqualität bei gleichzeitig geringen Dateigrößen und bietet zusätzlich Features wie Kodierung mit variabler Bitrate (VBR) und digitales Rechtemanagement (DRM). Auch für Entwickler ist WMA ideal: Mithilfe verschiedener kostenloser Software Development Kits (SDKs) können sie auch in eigenen Anwendungen problemlos mit dem WMA-Format arbeiten. Dieser Artikel zeigt, wie Sie mit Visual Basic .NET selbst WMA-Dateien abspielen, erzeugen und manipulieren können - als Nebeneffekt entsteht dabei ein kleines Tool, über das sich alle Besitzer eines WMA-fähigen Digitalplayers freuen dürften.

Not macht bekanntlich erfinderisch: Am Anfang stand der Wunsch nach einem kleinen Hilfsprogramm, welches meine zahlreichen WMA-Dateien für die Verwendung mit einem digitalen Mini-Player aufbereiten sollte. Das Lastenheft war schnell erstellt: Suche nach Codebeispielen für die genannten Aufgaben erwies sich jedoch als frustrierend: Seitenlange C++-Listings und kein Wort über die Verwendung der entsprechenden Bibliotheken unter .NET. Was tun?

Konzert der SDKs
Nach einiger Recherchezeit bei guter Musik stellte sich heraus, dass die Arbeit mit Mediendateien durchaus auch unter .NET möglich ist. Unterschiedliche Aufgaben werden dabei von verschiedenen SDKs abgedeckt, die jeweils mit ausführlicher Dokumentation frei verfügbar sind (Kasten SDK-Downloads und Dokumentation):
  • Abspielen von Dateien: Das Windows Media Player 10 SDK bietet eine Schnittstelle zum Windows Media Player 10. Hiermit lassen sich sehr einfach beliebige Medienfiles in eigenen Anwendungen abspielen.
  • Lesen und Editieren von spezifischen Dateiattributen: Das Windows Media Format 9.5 SDK erlaubt unter anderem den Zugriff auf Dateien im ASF-Format, zu denen auch WMA als Subformat gehört. Mit dem SDK lassen sich die in den einzelnen Dateien eingebetteten Metadaten, wie etwa Songtitel, Albumtitel, Interpret, Songnummer oder Genre auslesen und bearbeiten.
  • Kodieren und Umkodieren von WMA-Dateien: Das Windows Media Encoder 9 Series SDK bietet Funktionalität zum Umwandeln fast beliebiger Audiofiles in das WMA-Format sowie zur Umwandlung verschiedener WMA-Kodierungsarten untereinander. So lassen sich beispielsweise WMA-Dateien, die mit einer hohen Bitrate kodiert werden, in solche mit einer niedrigeren Bitrate konvertieren (Downsampling).
SDK-Downloads und Dokumentation

Technolgieübersichten
Folgende Artikel enthalten generelle Übersichten zum Thema Medien-SDKs:
msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwmt/html/cplusvbappdevs.asp
www.microsoft.com/windows/windowsmedia/mp10/sdk.aspx

Windows Media Encoder 9
Der Windows Media Encoder ist eine Applikation zur Kodierung von Video- und Audioformaten mit Windows-Codecs:
www.microsoft.com/windows/windowsmedia/9series/encoder/default.aspx

Windows Media Encoder 9 SDK
Das Media Encoder SDK ermöglicht die Nutzung der vielfältigen Funktionen des Windows Media Encoders in eigenen Programmen:bwww.microsoft.com/downloads/details.aspx?FamilyID=
000a16f5-d62b-4303-bb22-f0c0861be25b&DisplayLang=en


Der Media Encoder Programming Guide erklärt den Umgang mit den Encoder SDK:
msdn.microsoft.com/library/default.asp?url=
/library/en-us/wmencode/htm/programmingguide.asp


Windows Media Format 9.5 SDK
Das Media Format SDK ermöglicht die Arbeit mit allen Dateien im ASF-Format, hierzu gehören auch WMA-Dateien:
wmlicense.smdisp.net/v9sdk/

Windows Media Player 10 Series
Neuer, leistungsstarker Player mit Ripping-Funktionalität und integriertem Medien-Onlineshop:
www.microsoft.com/windows/windowsmedia/default.aspx

Media Media Player 10 Series SDK
Ermöglich die Nutzung fast aller Funktionen des Windows Media Players in eigenen Applikationen:
www.msdn.microsoft.com/library/default.asp?url=
/library/en-us/wmplay10/mmp_sdk/windowsmediaplayer10sdk.asp


Der Artikel Using the Media Player Control in .NET gibt nützliche Tipps für die Arbeit mit dem Media Player ActiveX Control:
www.informit.com/articles/article.asp?p=101752

Übrigens überschneidet sich der Funktionsumfang der verschiedenen SDKs teilweise erheblich. So ist es möglich, auch mit dem Media Format SDK Mediendateien zu kodieren, und das Media Player SDK kann ebenfalls Attribute setzen und lesen - zu den Gründen dafür später mehr. Mir war es für diesen Artikel in erster Linie wichtig, einen Überblick der verfügbaren SDKs zu liefern.Gerüstet mit den richtigen Bibliotheken stand einer Implementierung meines kleinen Tools nichts mehr im Wege. Das Ergebnis möchte ich Ihnen im Folgenden vorstellen. Die fertige Applikation samt Quellcode finden Sie wie immer auf der Heft-CD.
Konvertieren statt resignieren
Die Arbeit mit der WMAToolbox gestaltet sich denkbar einfach: Zunächst kann der Benutzer ein Verzeichnis wählen, welches beliebige WMA-Dateien enthält. Das Programm zeigt die Attribute dieser Musikstücke übersichtlich in einer Liste an. Über einen einfachen Mini-Player mit Play/Pause-Knöpfen und einer Spielzeitanzeige lassen sich einzelne Titel probehören.
Für die Konvertierung der Dateien gibt es zwei Optionen: Dateinamen anpassen benennt Dateien anhand ihrer Metadaten um. Der Benutzer wählt mittels Dropdown-Feldern die einzelnen Elemente, aus denen sich der Dateiname einer so konvertierten Datei zusammensetzen soll (Abpictureung 2). Zur Verfügung stehen neben den bekannten variablen Dateiattributen auch die Trennzeichen Bindestrich, Punkt und Leerzeichen.
Die zweite Konvertierungsoption Audioformat ändern dient dem Resampling der ausgewählten Dateien. Hier lassen sich Bitrate und Samplingfrequenz der Musikstücke verändern (Abpictureung 3) - in den meisten Fällen macht hier eine Reduzierung der Bitrate Sinn. Die beiden Konvertierungsoptionen lassen sich kombinieren, sodass in einem Arbeitsgang alle Dateien umbenannt und neu kodiert werden können.
Mit einem Klick auf Konvertierung starten beginnt der Umwandlungsprozess, der je nach Systemkonfiguration relativ lange dauern kann. Das Programm zeigt deshalb ein kleines Statusfenster mit einem Fortschrittsbalken an und erlaubt den Abbruch des Konvertierungsvorgangs zu jedem Zeitpunkt (Abpictureung 4).
Kleines WMA-Glossar

Bit-Rate.
Gibt an, wie viele Kilobits in einem Audiofile zur Verfügung stehen, um eine Sekunde Klang zu beschreiben. Je höher die Bitrate, desto besser die Qualität - und desto größer das File. WMA-Dateien werden üblicherweise mit 128 kbps (Kilobit/Sekunde) kodiert.

Variable Bit-Rate (VBR).
Feature des neuen WMA-9-Codecs, welches es ermöglicht, unterschiedlich komplexe Abschnitte gegebener Eingangsdaten mit unterschiedlichen Bit-Raten zu kodieren, d.h. schwierige Passagen aufwendiger zu beschreiben. Dies erlaubt einen sehr guten Kompromiss zwischen Dateigröße und Qualität.

Sampling-Frequenz.
Gibt an, wie oft pro Sekunde der Kodieralgorithmus das Original-Musiksignal abtastet. Die Sampling-Frequenz beeinflusst den Frequenzumfang der kodierten Audiodatei - je höher die Sampling-Frequenz, desto größer der mögliche Frequenzumfang. Auch die Sampling-Frequenz hat Auswirkungen auf die Dateigröße, allerdings nicht so stark wie die Bit-Rate.

Codec.
Codemodul, das die Kodierung (Coding) und Dekodierung (Decoding) der Eingangsdaten übernimmt.

Kodierformat.
Codecs erlauben in den meisten Fällen die Kodierung von Eingangsdaten mit verschiedenen Kombinationen von Sampling-Frequenzen und Bit-Raten, auch genannt Kodierformate (codec formats).

Encoder.
Codemodul, das mit Hilfe eines Codecs die Kodierung von Audiodaten vornimmt.

WMA.
Windows-Media-Audio-Format. Ein Format für Mediendaten, das ausschließlich Audiodaten enthält, die mit Windows-eigenen Codecs kodiert sind.

Streaming.
Abspielmodus, bei dem Mediendaten auf dem Server kodiert und über eine Netzwerkverbindung übertragen werden. Der Empfänger dekodiert die Daten annähernd in Echtzeit. Bereits abgespielte Daten werden nicht gespeichert und in der Regel vergeht nur eine geringe Wartezeit, bis die Wiedergabe beginnt.
Let the Music Play!
Wie realisiert die WMA Toolbox die einzelnen Programmfeatures? Die einfachste Aufgabe ist die Implementierung des integrierten Mini-WMA-Players. Das Abspielen von Musikdateien und die Steuerung der damit verbunden Elemente des Benutzer-Interfaces übernimmt ein echter Abspiel-Profi - der Windows Media Player 10. Dessen SDK stellt ein leistungsstarkes ActiveX-Control bereit, welches problemlos auch in .NET-Programme eingebunden werden kann. Dabei hat der Programmierer die Wahl, ob das Control eine vollständige Oberfläche anzeigen, sich auf wenige wichtige Bedienelemente beschränken oder sich komplett verstecken soll. Hierzu reicht es aus, die Eigenschaft uiMode entsprechend zu setzen. Im vorliegenden Fall soll die Steuerung über eigene Play- und Stop-Schaltflächen der Hostapplikation geschehen, und das Windows Media Player Control soll kein eigenes Benutzer-Interface anzeigen - uiMode bekommt folglich den Wert invisible.Der Windows Media Player bietet einen riesigen Funktionsumfang, von dem die WMAToolbox jedoch nur einen Bruchteil nutzt. Zunächst wird die abzuspielende Datei festgelegt, indem ein neues Medienobjekt erzeugt und mit dem Namen der WMA-Datei initialisiert wird:
  1. Dim CurrentMedia As WMPLib.IWMPMedia
  2. CurrentMedia = _
  3. PreviewMediaPlayer.newMedia( _
  4. "file://" & WMADateiname)
  5. PreviewMediaPlayer.currentMedia = CurrentMedia
Dieses Medienobjekt wird der Eigenschaft currentMedia zugewiesen und der Player ist bereit, in Aktion zu treten.Die Schaltflächen zum Starten, Pausieren und Stoppen der Wiedergabe sind ebenfalls sehr einfach zu realisieren, denn die Eigenschaft Ctlcontrols des Media Players stellt ein Objekt mit allen nötigen Methoden zur Verfügung. Hierzu gehören natürlich unter anderem die grundlegenden Funktionen play(), pause() und stop(). Aber Achtung: Da manche Befehle natürlich nur in bestimmten Betriebsmodi des Players gültig sind, muss vor Ausführung jedes Mal der momentane Zustand des Players abgefragt werden. Ein Stop-Befehl macht schließlich nur Sinn, wenn auch gerade Musik abgespielt wird. Über die Eigenschaft playState ist diese Zustandsabfrage jederzeit möglich:
  1. If (PreviewMediaPlayer.playState = WMPPlayState.wmppsPlaying) Then
  2. PreviewMediaPlayer.Ctlcontrols.pause()
  3. Else
  4. PreviewMediaPlayer.Ctlcontrols.play()
  5. End If
Der Player selbst benachrichtigt das Programm über alle Zustandsänderungen. Dies ist beispielsweise der Fall, wenn ein Stück zu Ende gespielt wurde und der Zustand von playing auf stopped wechselt. Das Programm kann dann seine eigene Benutzeroberfläche entsprechend des aktuellen Zustands aktualisieren (Listing 1).

Listing 1
  1. Private Sub Player_PlayStateChange( _
  2. , ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) _
  3. Handles PreviewMediaPlayer.PlayStateChange
  4. Dim NewPlayerState As WMPPlayState = e.newState
  5. Select Case NewPlayerState
  6. Case WMPPlayState.wmppsPlaying
  7. cmdPlayPause.Text = "Pause"
  8. lblPlayTime.Visible = True
  9. cmdPlayPause.Enabled = False
  10. cmdStop.Enabled = True
  11. Case WMPPlayState.wmppsStopped
  12. cmdPlayPause.Text = "Play"
  13. lblPlayTime.Visible = False
  14. cmdPlayPause.Enabled = True
  15. cmdStop.Enabled = False
Praktisch alle Informationen über den momentanen Zustand und über das aktive Medium sind mittels spezieller Eigenschaften abrufbar - WMAToolbox macht nur von der Eigenschaft currentPositionString Gebrauch, welche die bereits abgelaufene Spielzeit des momentan abgespielten Titels liefert. Diese Eigenschaft wird in einem Timer-Event ausgelesen und angezeigt:
  1. Private Sub PlayTimer_Tick(, ByVal e As System.EventArgs) _
  2. Handles PlayTimer.Tick
  3. lblPlayTime.Text = PreviewMediaPlayer.Ctlcontrols.currentPositionString
  4. End Sub
Gut informiert
Die zweite Aufgabe bei der Implementierung der WMAToolbox heißt: Informationen über die zu konvertierenden WMA-Dateien einholen. WMA-Dateien enthalten eine Vielzahl von Metainformationen über ihren musikalischen Inhalt, von offensichtlichen Daten wie Interpret und Titel über etwas ausgefallenere Angaben wie Erscheinungsjahr oder Genre. WMAToolbox liest diese Informationen aus, stellt sie übersichtlich dar und verwendet sie zur Erstellung von sprechenden Dateinamen. Leider ist dies mit etwas Arbeit verbunden, denn der von mir gewählte Weg zu den gewünschten Daten führt über eine weitere, etwas sperrige Bibliothek - das Windows Media Format SDK (WMFSDK).Die Arbeit mit diesem Low-level-SDK ist alles andere als intuitiv. Die Bibliothek ist primär für die Verwendung in C++ gedacht und wird über eine mitgelieferte Wrapper-Bibliothek aus .NET angesprochen. Trotzdem lohnt sich die Beschäftigung damit, denn das Windows Media Format SDK ist die Allzweckwaffe für praktisch alle Arbeiten mit Mediendaten unter Windows. Auch die beiden anderen hier erwähnten SDKs beruhen intern auf dem WMFSDK, was erklärt, warum sich die Funktionalitäten der einzelnen Bibliotheken überschneiden. Deshalb lohnt es sich auch, für die WMAToolbox den harten Weg zu den Metadaten zu wählen - aus pädagogischen Gründen, sozusagen.

WMA: Codecs für alle Fälle
Codec ist nicht gleich Codec. Allein für das WMA-Format stehen in der aktuellen Version 9 mehrere Codecs zur Verfügung, die für unterschiedliche Einsatzbereiche optimiert sind:

Windows Media Audio 9.
Universal-Codec mit guter Kompression bei gleichzeitig hoher Qualität und der Möglichkeit, Dateien mit variabler Bit-Rate zu erzeugen.

Windows Media Audio 9 Professional.
Codec, welcher speziell für die Kodierung von Surround Sound Audio (5.1 und 7.1) entwickelt wurde.

Windows Media Audio 9 Lossless.
Codec, welcher Eingangsdaten ohne rechnerischen Qualitätsverlust kodiert. Vor allem für die bequeme Archivierung von digitalen Audiodateien geeignet, da diese originalgetreu und mit eingebetteten Metadaten abgelegt werden.

Windows Media Audio 9 Voice.
Codec, der speziell für das Streaming von Sprache optimiert wurde und eine gute Qualität bei niedrigen Bit-Raten ermöglicht.

Eine detaillierte Übersicht findet sich unter:
www.microsoft.com/windows/windowsmedia/9series/codecs/audio.aspx


Beispiele für die Verwendung des WMFSDK in .NET sind rar. Doch wer sucht, der findet: Duncan Mackenzie zeigt in seinem Artikel msdn-Artikel Playing with Music Files wie das Ganze funktioniert [1]: Zunächst wird ein so genanntes Metadata-Editor-Objekt über die Funktion WMCreateEditor erzeugt. Dieses Objekt implementiert das Interface IWMHeaderInfo, über das schließlich der Zugriff auf die entsprechenden Attribute der Musikdatei möglich ist. Im folgenden Beispiel wird die Information über die Bitrate einer WMA-Datei ausgelesen (Listing 2).

Listing 2
  1. uHR = WMFSDKFunctions.WMCreateEditor(Editor)
  2. hr = Convert.ToInt32(uHR)
  3. If hr = 0 Then
  4. uHR = Editor.Open(FileName)
  5. hr = Convert.ToInt32(uHR)
  6. If hr = 0 Then
  7. HeaderInfo = DirectCast(Editor, IWMHeaderInfo3)
  8. Dim value As Byte()
  9. Dim pType As WMT_ATTR_DATATYPE
  10. value = GetAttributeByName(HeaderInfo, "bitrate", pType)
Dieser kurze Codeabschnitt macht klar: Hier handelt es sich um Programmierung im C++-Stil unter .NET - nicht jedermanns Sache. WMAToolbox verpackt den Code deshalb in eine eigene Klasse namens WMAFileInfo, welche alle Attribut-Informationen einer WMA-Datei ausliest und extern durch Eigenschaften bereitstellt. Das Schreiben und Lesen der Attribute ist über die beiden Funktionen GetAttributes und WriteAttributes möglich:
  1. Dim CurrentWMAFileInfo As WMAFileInfo
  2. CurrentWMAFileInfo = WMAEncoder.GetAttributes(CurrentFile)
  3. Dim Interpret As String = CurrentWMAFileInfo.Author
Dieses Vorgehen bietet neben der Kapselung des SDK-Codes weitere Vorteile: Eine Liste von WMAFileInfo-Objekten lässt sich in ein ArrayList-Objekt füllen, und dieses eignet sich hervorragend als Datenquelle für ein DataGrid. So lassen sich Informationen über mehrere WMA-Dateien übersichtlich tabellarisch darstellen.
Eine Frage des Formats
Die letzte Aufgabe bei der Implementierung der WMAToolbox ist das Umkodieren (Resampling) von WMA-Dateien - und dies bedeutet die Beschäftigung mit einem dritten SDK. Als mittlerweile versierte Experten in der Welt der Windows-Audio-Dateien sind wir aber gut gerüstet ...

Für alle Aufgaben, die mit Sampling und Resampling zu tun haben, ist das Windows Media Encoder SDK das Mittel der Wahl. Dieses SDK implementiert eine Pipeline zur Erzeugung von kodierten Medieninformationen. Dabei werden verschiedene Eingabekanäle (Audio, Video und sogar Untertitelinformationen) zu einer Gruppe zusammengefasst, die durch ein SourceGroup-Objekt repräsentiert wird. Ein Encoder-Objekt nimmt die verschiedenen Eingabedaten entgegen, kodiert sie als Windows Media-Datenstrom und schreibt sie auf ein Ausgabemedium oder auch auf mehrere Medien. Dabei werden die verschiedenen Eingabekanäle (beispielsweise Sound und Bild bei einem Konzert) zu einem Datenstrom kombiniert. Die Ausgabe kann in eine Datei erfolgen - oder in Form von Streaming direkt über ein Netzwerk verschickt und live von allen angeschlossenen Empfängern konsumiert werden. Ein Audience-Objekt definiert die Parameter für die Kodierung und ein Profile-Objekt ermöglicht das einfache Speichern aller Konfigurationsdaten für einen bestimmten Anwendungsfall.

Die WMAToolbox hat einfache Ansprüche: Es gibt nur einen Audio-Eingabemedium, die WMA-Quelldatei. Auch das Ausgabemedium ist eine einfache WMA-Datei. Dazwischen wandelt der Encoder den Datenstrom in ein bestimmtes Format. Dabei kann der Encoder auf verschiedene Codecs (Kodier-/Dekodiermodule) zurückgreifen, welche wiederum unterschiedliche Qualitäts- und Kompressionseigenschaften haben. Die Codecs übernehmen die eigentliche Berechnung der kodierten Daten und unterstützen ihrerseits verschiedene Kodierformate mit unterschiedlichen Bit-Raten und Sampling-Frequenzen. Und so sieht der ganze Vorgang in der Praxis aus: Zunächst wird eine Instanz des Encoder-Objekts erzeugt.
  1. 'Neuen Encoder erzeugen
  2. Encoder = New WMEncoder
Je ein SourceGroup-Objekt wird erstellt und eine einzige Datenquelle vom Typ Audio wird hinzugefügt (Listing 3).

Listing 3
  1. 'Neue SourceGroupCollection erzeugen und eine SourceGroup hinzufügen</font>
  2. EncoderSourceGroupCollection = Encoder.SourceGroupCollection
  3. EncoderSourceGroup = _
  4. EncoderSourceGroupCollection.Add("WMAToolboxSourceGroup")
  5. 'Audio-Source zur Sourcegroup hinzufügen
  6. <font>EncoderSource = _
  7. EncoderSourceGroup.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO)
Ein Objekt vom Typ Profile dient zur Konfiguration des Kodiervorgangs:
  1. 'Neues Audio-Encoding-Profile erzeugen
  2. EncoderProfile = New WMEncProfile2
  3. EncoderProfile.ProfileName = "WMAToolboxProfile"
  4. EncoderProfile.ContentType = WMENC_SOURCE_TYPE.WMENC_AUDIO
Ein Tipp aus leidvoller Erfahrung: Das Profil muss immer einen Namen haben, sonst beschwert sich der Encoder bitterlich, aber mit einer kryptischen Fehlermeldung. Leider schweigt sich die Dokumentation zu diesem wichtigen Punkt komplett aus. Der nächste Schritt ist die Erstellung eines Audience-Objekts. Mit dessen Hilfe wird der verwendete Codec samt Kodierformat festgelegt. Diese Information wird dem gerade erstellten Profil hinzugefügt.
  1. Dim EncoderAudience As IWMEncAudienceObj
  2. EncoderAudience = EncoderProfile.AddAudience(FormatBitrate)
  3. EncoderAudience.AudioCodec(0) = CodecIndex
  4. EncoderAudience.AudioFormat(0) = FormatIndex
Welche Codecs und welche Kodierformate für die einzelnen Codecs zur Verfügung stehen, kann über die beiden Funktionen EnumAudioCodec und Enum AudioFormat des Profil-Objekts ermittelt werden. Schließlich wird noch festgelegt, welche Datei als Datenquelle dient ...
  1. EncoderSource.SetInput(SourceFilename)
... und welche Datei die umkodierten Daten aufnimmt.
  1. Dim OutputFile As IWMEncFile = Nothing
  2. OutputFile = Encoder.File
  3. OutputFile.LocalFileName = DestinationFilename
Nach umfangreichen Vorbereitungen kann jetzt der eigentliche Kodiervorgang beginnen, und dies geschieht durch den Aufruf einer Methode von entwaffnender Einfachheit:
  1. Encoder.Start()
Aber Vorsicht: Der Encoder arbeitet asynchron! Der Aufruf von Start() kehrt sofort zurück, während im Hintergrund die Kodierung weiter läuft. Ein Versuch, gleich danach eine zweite Datei zu kodieren, wird vom Encoder mit der Fehlermeldung Operation in Progress quittiert. Die Applikation muss sich deshalb über die Eigenschaft RunState des Encoders informieren, ob noch ein Kodiervorgang läuft, bevor sie eine neue Kodierung in Angriff nimmt. Alternativ kann der Encoder über die Applikation über den Event OnStateChange darüber informieren, dass er seine Arbeit beendet hat. Es empfiehlt sich übrigens, die Kopierarbeit auf einen eigenen Thread auszulagern, damit die Hauptapplikation noch auf Ereignisse wie das Drücken der Abbruch-Schaltfläche reagieren kann.
Entdecke die Möglichkeiten
Drei SDKs und viele Tricks später steht fest: Mit den richtigen SDKs ist es möglich, aus eigenen Programmen effektiv mit WMA-Audiodateien zu arbeiten. Das hier vorgestellte kleine Hilfsprogramm nützt die Möglichkeiten der verfügbaren SDKs natürlich nur im Ansatz aus. Das Ziel dieses Artikels war es, die verfügbaren Technologien in Aktion zu zeigen. Der Phantasie sind jedoch (fast) keine Grenzen gesetzt: Denkbar wären beispielsweise ein erweiterter Attribut-Editor oder eine Software mit Funktionalität für die neueste Mode in der Online-Welt: Audio-Blogs mit Postings im WMA-Format.Darüber hinaus eignen sich die vorgestellten Bibliotheken nicht nur zum Einsatz mit Audiodaten, sondern können auch für die Arbeit mit Videodaten eingesetzt werden, was aber den Rahmen dieses Artikels definitiv gesprengt hätte. Bleibt mir nur der Rat einer bekannten skandinavischen Möbelkette: Entdecke die Möglichkeiten!
Uwe Baumann ist Technologieberater bei der Microsoft Deutschland GmbH und passionierter Musikfan. Er wurde unlängst in einem Elektromarkt dabei beobachtet, wie er gleichzeitig eine Platte von John Denver und eine von Metallica zur Kasse trug. Während des Musikhörens programmiert er hauptsächlich ASP.NET-Seiten in VB.NET. Er ist erreichbar unter uwebaum@microsoft.com.

Links und Literatur
[1] Duncan Mackenzie: Playing With Music Files: msdn.microsoft.com/library/default.asp?url=/library/en-us/dncodefun/html/code4fun01242003.asp


Anzeige

Kommentare

zurück zum Seitenanfang