Der neue PC-Standard: High Definition Audio

09.07.2004 von Jim Huang und MATT MCCLELLAN 
In Intels aktuellen Chipsätzen sorgt erstmalig HD-Audio mit Dolby Digital EX, 7.1 Surround-Sound und parallelen Streams für ein neues Hörerlebnis. Wir erläutern die Details und die Programmierung des neuen Standards.

Geräusche aus dem PC wurden erstmals 1983 vorgestellt und waren zunächst nicht viel mehr als ein Pfeifton aus dem Lautsprecher. Er vermittelte dem Anwender lediglich einen einfachen akustischen Feedback. Mitte der achtziger Jahre nutzten dann Spiele-Entwickler die Lautsprecher. Sie spielten verschiedene Töne abhängig von der Handlung ein und gestalteten damit PC-Spiele aufregender.

Mit der ersten Mono-Sound-Karte von 1988 verbesserte sich der PC-Klang erheblich, und die Spiele-Entwickler schufen ein viel intensiveres Tonerlebnis für ihre Spiele. Aber die Software-Entwicklung für Sound-Karten war eine zeitaufwendige und schwierige Aufgabe. Es gab noch keine standardisierten APIs, mit denen Spiele- und Sound-Entwickler problemlos alle Sound-Karten ansprechen konnten. Die Entwickler mussten entweder mehrere Pfade in ihre Applikationen einbauen und so alle Sound-Karten bedienen. Oder sie unterstützten von vornherein nur die auf dem Markt gängigsten Sound-Karten und hofften, dass dies genügen würde.

1996 stellte Microsoft DirectSound vor und gab den Entwicklern damit ein Set von APIs an die Hand, mit dem sie ihre Applikationen für einen standardisierten Audio-Support ausrüsten konnten. Die Hersteller von Sound-Karten entwickelten zeitgleich passende DirectSound-Treiber, über die das DirectSound-API mit der Karte kommunizierte.

Anfang 1998 führte Intel eine Audio- und Modem-Codec-Spezifikation ein, um auch die Features von Audio-Geräten zu standardisieren, den so genannten Audio Codec'97 oder kurz AC'97. Seit ihrer Einführung wurde die Spezifikation mehrfach überarbeitet und den Entwicklungen im PC-Audio-Bereich angepasst. Weitere Informationen zur AC'97-Audio-Spezifikation finden Sie bei Intel im Bereich AC'97 Audio Specification und in unserem Grundlagenbericht Onboard-Sound vs. Sound-Karte.

Die nächste Audio-Generation

Intels High Definition Audio (HD-Audio) ist die Spezifikation für die nächste Generation integrierter Audio-Lösungen. Auf dem Intel Developer Forum im Frühjahr 2003 wurde sie noch unter dem Codenamen "Azalia" vorgestellt und hat seither großen Anklang bei der PC-Audio-Gemeinde gefunden.

HD-Audio soll eine vollständige Audio-Spezifikation liefern, von den Steckverbindungen bis hin zur Treiberebene des Betriebssystems. HD-Audio wird erstmals von den im Juni 2004 vorgestellten Chipsätzen Intel 915 "Grantsdale" und 925 "Alderwood" unterstützt und ist eine konsequente Weiterentwicklung von AC'97.

HD-Audio bietet zahlreiche Features und unterstützt eine Vielzahl von neuen Audio-Spezifikationen:

.

Neuerungen von HD-Audio

Die folgende Tabelle gibt einen Überblick über die Vorteile der HD-Audio-Spezifikation gegenüber der gegenwärtigen AC'97-Audio-Spezifikation.

Vorteile von HD-Audio gegenüber AC'97

AC'97

High Definition Audio

Vorteil

11,5 MByte/s max. Bandbreite

48 MByte/s Out, 24 MByte/s In

Höhere Bandbreite für mehr Channels und Mikrofon-Arrays, höhere Abtastraten

Fest zugewiesene Bandbreite, festes Slot-basiertes Protokoll

Dynamisch zugewiesene Bandbreite

Bandbreite wird je nach aktuellem Bedarf verteilt

Festgelegte DMA-Benutzung

Dynamische Zuordnung von Standard-DMAs

Unterstützung für Multistreaming und Array-Devices

Singlestream-Support (in und out)

Support für Multi-streams (in und out)

Support für neue Digital-Home- / Digital-Office-Anwendungsmodelle

Takt wird vom primären Codec generiert

Takt wird vom Intel I/O Controller Hub (ICH) generiert

Eine einzelne, hochwertige und stabile Taktquelle zur Synchronisation

Stabilität abhängig vom Software-Hersteller (Treiber des Hardware-Herstellers)

Einheitlicher Microsoft Bus-treiber

Ein einziger Bustreiber sorgt für mehr Stabilität und bietet immer die volle Basisfunktionalität

Begrenzte Geräte-erkennung, eingeschränkte Zuweisung von Steckverbindungen

Vollständige automatische Geräteerkennung und dynamische Konfiguration von Steckverbindungen

Unterstützung für vollständiges Audio-Plug-and-Play

2-Elemente- (Stereo) Array-Mikrofon-Support

16-Elemente-Array-Mikrofon-Support

Hochqualitative Spracheingabe für eine verbesserte Spracherkennung

Microsofts Universal Audio Architecture

Die HD-Audio-Spezifikation ist außerdem vollständig kompatibel zu Microsofts Universal Audio Architecture (UAA). Eine erste Implementierung für UAA existiert für Windows XP, vollständig wird es ab dem nächsten Windows-Betriebssystem "Longhorn" unterstützt.

UAA ist eine von Microsoft angeführte Initiative der Industrie mit dem Ziel, auf jedem Windows-basierten PC-System hochqualitatives Audio bereitzustellen. Die UAA-Initiative setzt einen neuen Standard für die Audio-Verarbeitung unter Windows und soll so einen qualitativ hochwertigen Basissatz an Audio-Funktionalität garantieren. Zudem definiert UAA die zugehörigen Standardschnittstellen für die Hardware-Treiber. Dies soll die Zuverlässigkeit und Sicherheit von PC-Audio erheblich verbessern und das von Consumer-Geräten gewohnte "Anstecken und es geht" auch für Audio mit dem PC ermöglichen.

Neue Möglichkeiten für Entertainment und Spiele

Die HD-Audio-Architektur von Intel eröffnet PC-basiertem Heim-Entertainment, Gaming und Kommunikation neue Einsatzgebiete. Mit dem Multistreaming-Feature kann ein PC beispielsweise Audio-Inhalte aus dem Internet ins Wohnzimmer streamen und zugleich einen Kinofilm mit Dolby-Digital-Sound auf den Fernseher im Esszimmer übertragen. Doch nicht nur das Heim-Entertainment soll von der Flexibilität und den Features der HD-Audio-Architektur profitieren. Auch für Windows-basierte PC-Spiele ergeben sich durch das Multistreaming vollkommen neue Möglichkeiten.

Um Echtzeit-Chats zu ermöglichen und zeitgleich Sound-Effekte abzuspielen, müssen Spiele heutzutage alle Audio-Streams mischen und den Klang über ein Lautsprechersystem wiedergeben. Zwar können sich mit einem Headset ausgestattete Spieler mit anderen Online-Spielern unterhalten. Aber hierbei werden die Sound-Effekte und das von den anderen Spielern Gesagte in einen einzigen Stream gemischt und über die Kopfhörer ausgegeben.

Ist ein PC jedoch mit High Definition Audio ausgestattet, können die Sound-Effekte der Spiele von der Unterhaltung getrennt über verschiedene Audio-Output-Ports ausgegeben werden. Der Chat läuft stielecht über den Kopfhörer, die Sound-Ausgabe effektvoll über die Surround-Anlage.

Die Möglichkeit, Sound-Effekte von der Unterhaltung der Spieler zu trennen, ist nicht ganz neu. Aber mit Hilfe von HD-Audio müssen die Applikationsentwickler zur Trennung der verschiedenen Streams nicht länger proprietäre APIs und teure Spezial-Hardware benutzen, sondern können auf einen allgemein akzeptierten Standard aufsetzen.

Vorteil im Office

Im beruflichen Einsatz führen die parallelen Streams zu einer höheren Qualität der Spracheingabe und so zu optimierter Spracherkennung und verbessertem Voice over IP. Mit Hilfe der in der HD-Audio-Spezifikation erweiterten Bandbreite und Array-Mikrofonen eröffnet sich eine Vielzahl von Möglichkeiten, um Konferenzschaltungen und Spracherkennung zu verbessern.

Durch eine phasenrichtige Verschaltung der Audio-Streams mehrerer Mikrofone lässt sich beispielsweise die Richtcharakteristik eines Mirofon-Arrays per Software steuern. Richtet man so die virtuelle empfindliche Keule des Mirofons auf den Sprecher, werden störende Nebengeräusche stark unterdrückt.

Dies sind nur einige wenige der verschiedenen Möglichkeiten. Die in den folgenden Codebeispielen gezeigten Lösungen richten sich vor allem an Entwickler. Die in den Vorbetrachtungen erwähnten Punkte lassen aber auch den normalen Anwender erahnen, wie zukünftige Programme aussehen werden.

Voraussetzungen für High Definition Audio

Auch Anwendungen und Spiele, die bereits die DirectSound- und DirectMedia-API nutzen, benötigen einige kleinere Änderungen für HD-Audio. Die Änderungen betreffen vor allem die Stellen, die die vorhandenen Input- und Output-Quellen abfragen und den Sound darauf wiedergeben. Denn die Applikationsentwickler werden es zukünftig sicher dem Anwender überlassen wollen, welches Wiedergabegerät er einsetzen möchte.

Folgende Punkte sollten Entwickler einer HD-Audio-Anwendung immer vor Augen haben:

Weitere Aufgaben bei der Entwicklung

Da die aktuelle DirectX-API nicht alle notwendigen Features für HD-Audio abdeckt, muss man sich noch ein paar zusätzliche Gedanken bei der Entwicklung machen:

Demoprogramm und Codebeispiele

Die folgende Liste nennt die wichtigsten Stufen, die ein Software-Entwickler für HD-Audio beachten muss. Dies gilt insbesondere, da sich die Konfiguration eines HD-Audio-PC ständig dynamisch ändern kann.

Notwendige Schritte beim Öffnen der Applikation:

Notwendige Schritte beim Schließen der Applikation:

Die auf den nächsten Seiten folgenden Codebeispiele und der entsprechende Code von Intel zum Download zeigen, wie Audio-Geräte zu ermitteln sind, wie Audio-Inhalte über mehrere Geräte abgespielt werden und schließlich wie eine Liste von Audio-Geräten geführt und per Update aktuell gehalten wird.

Ermitteln verfügbarer Audio-Geräte

PC-Systeme haben heutzutage typischerweise nur ein Wiedergabegerät. Die nächste Generation wird mit HD-Audio ausgestattet sein und daher mehrere Wiedergabegeräte auf ein und demselben System bieten.

Initialisieren eines DirectSound-Objekts

Dieser Abschnitt zeigt die Initialisierung, wenn Ihre Applikation die PlaySound()-Funktion nutzt, um Audio-Sound über den Default-Port abzuspielen. Da PlaySound() nicht das DirectX-API benutzt, muss der C/C++-Code das DirectX-COM-Objekt erzeugen, ehe die Applikation vom DirectSound-API profitieren kann. Das folgende Codebeispiel zeigt, wie die benötigten COM-Objekte erzeugt werden.

// Instantiate an interface to query the sound devices.
if( FAILED( hr = CoCreateInstance( CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC, IID_IDirectMusicLoader8, (void**)&m_pLoader ) ) )
return hr;
// Create a new music object
if( FAILED( hr = CoCreateInstance( CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC, IID_IDirectMusicPerformance8,(void**)&m_pPerformance ) ) )
return hr;

Das IID_IDirectMusicLoader8-Interface wird genutzt zum Auffinden, Auflisten, Speichern und Laden der Objekte. Im Codebeispiel wird dieses Objekt zum Laden einer Audio-Datei benutzt.

Das IID_IDirectMusicPerformance8-Interface wird hauptsächlich als allgemeiner Wiedergabe-Manager eingesetzt. Das Codebeispiel zum Download nutzt dieses Interface, um das Audio-Objekt auf dem Wiedergabegerät zu initialisieren, den Audio-Stream zu starten und zu stoppen, den Status des Audio-Streams zu prüfen und die Geräte freizugeben.

Suchen nach Geräten

Um HD-Audio zu ermöglichen, muss im ersten Schritt das System nach den verfügbaren Wiedergabe- und Aufnahmegeräten abgefragt werden. Da die HD-Audio-Spezifikation es erlaubt, Ports wieder zu verwenden, ist es wichtig, beim Öffnen der Applikation die Geräte abzufragen, aufzulisten und mit den bereits gespeicherten Settings zu versehen. Die Suche nach verfügbaren Geräten ist unkompliziert und benötigt nur wenig zusätzlichen Code.

Der folgende Code demonstriert, wie das System nach verfügbaren Wiedergabegeräten abgefragt wird.

if( FAILED( hr = DirectSoundEnumerate( (LPDSENUMCALLBACK)DSoundEnumCallback,(VOID*)this ) ) )
return DXTRACE_ERR_MSGBOX( TEXT("DirectSoundEnumerate"), hr );

Die DirectSoundEnumerate()-Funktion ist eine DirectSound-Funktion, die ein Callback für jedes verfügbare Wiedergabegerät generiert. Beachten Sie, dass sich im ersten Parameter die Callback-Funktion DSoundEnumCallback() findet. Die Callback-Funktion wird für jedes im System installierte Wiedergabegerät einzeln aufgerufen. Da die HD-Audio-Spezifikation es erlaubt, Ports wieder zu verwenden, variiert die Anzahl der Callbacks abhängig von der Systemkonfiguration.

Der zweite Parameter ist der anwenderdefinierte Kontext. Im Codebeispiel wird dieser Parameter benutzt, um zu bestimmen, in welche Listbox die Callback-Informationen eingetragen werden.

Falls Ihre Applikation oder Ihr Spiel Spracheingabe erfordert oder Audio-Inhalte aufzeichnet, funktioniert die Suche nach den Input-Geräten ähnlich wie die nach den Wiedergabegeräten.

if( FAILED( hr = DirectSoundCaptureEnumerate( (LPDSENUMCALLBACK)DSoundEnumCallback,(VOID*)this ) ) )
return DXTRACE_ERR_MSGBOX( TEXT("DirectSoundCaptureEnumerate"), hr );

Auswählen der Wiedergabegeräte

Nachdem das System nach verfügbaren Geräten gesucht hat, muss es die Liste der Geräte im Arbeitsspeicher ablegen und dem Anwender für die Konfiguration und Auswahl präsentieren. Auch Applikationen, die nur einen Audio-Stream nutzen, sollten es dem Anwender ermöglichen, die Wiedergabegeräte selbst auszuwählen, statt automatisch auf die Default-Geräte zurückzugreifen.

Das erlaubt dem Anwender, seine Umgebung selbst zu konfigurieren und beispielsweise Musik über Kopfhörer abzuspielen, während der System-Sound über die Lautsprecher ausgegeben wird. Zukünftige Applikationen und Spiele sollten diesen Vorteil HD-Audio-fähiger PC-Systeme nutzen und dem Anwender die Kontrolle darüber überlassen, welches Wiedergabegerät er wofür einsetzt.

Das folgende Codesegment zeigt, wie eine Audio-Datei geladen und einem Wiedergabegerät zugewiesen wird.

// Load the filename into the DirectMusicLoader object.
hr = m_pLoader->LoadObjectFromFile (CLSID_DirectMusicSegment, IID_IDirectMusicSegment8, wstrFileName, (LPVOID*) &m_pSegment );

// Initialize the audio path and attach the selected playback device to the path
hr = m_pPerformance->InitAudio ((IDirectMusic **)&m_pDirectMusic8, (IDirectSound **)&pDS8, m_hParentWnd, DMUS_APATH_DYNAMIC_STEREO, 128, DMUS_AUDIOF_ALL, NULL ) ;

Das Codebeispiel zum Download kreiert so ein Objekt für jeden Stream und managt jeden Stream unabhängig von den anderen Streams.

Beispielanwendung

Der begleitende Quellcode zum Download von Intel demonstriert, wie mehrere Audio-Dateien über dasselbe Wiedergabegerät oder über mehrere Geräte gesucht und abgespielt werden. Ehe Sie den Quellcode herunterladen und die Datei erstellen, überprüfen Sie, ob Sie die folgende Entwicklungsumgebung installiert haben:

Das Originalbeispiel von Intel lässt sich unter Visual Studio .Net 2003 nicht sofort kompilieren. Laden Sie sich deshalb zusätzlich die zwei von uns überarbeiteten Dateien herunter und tauschen Sie diese gegen die Originale von Intel aus.

Ihr PC-System benötigt mehrere Sound-Karten, um parallel Audio-Dateien an unterschiedlichen Lautsprechern ausgeben zu können. Alternativ können Sie selbstverständlich auch ein System mit "echtem" High Definition Audio benutzen.

Erstellen der Beispielanwendung

Wenn Ihre Entwicklungsumgebung alle Voraussetzungen erfüllt, befolgen Sie diese Schritte zur Erstellung des Quellcodes.

Falls Sie mit dem Visual Studio .Net 2003 arbeiten, müssen Sie nach dem Entpacken noch die beiden von tecCHANNEL modifizierten Dateien herunterladen und im Codeverzeichnis austauschen. Öffnen Sie anschließend die Datei AzaliaDemo.dsp. In der dann erscheinenden Dialogbox lassen Sie alle Dateien in das Format von Visual Studio .Net 2003 konvertieren. Bevor Sie nun das Projekt erstellen können, müssen Sie nur noch das Header- und Lib-Verzeichnis des DirectXx-SDKs bei den Projekteigenschaften mit angeben.

Zusammenfassung

Die HD-Audio-Spezifikation von Intel eröffnet ganz neue Möglichkeiten für den Einsatz von PC-Systemen. HD-Audio dürfte in Zukunft das Klangerlebnis der Anwender revolutionieren. Die dynamische Konfiguration der Steckverbindungen, die erhöhte Audio-Qualität, die Multistreaming-Fähigkeit und andere Features werden es Software-Entwicklern erlauben, eine neue Generation von Applikationen zu schaffen.

Heim-Entertainment-, Gaming- und Kommunikations-Software profitieren dabei von den neuen HD-Audio-Chipsätzen, die ein erheblich verbessertes Audio-Erlebnis erzeugen - ganz ohne zusätzliche teure Hardware. Abgesehen vom DirectSound-API muss sich dafür niemand mehr mit neuen und proprietären APIs auseinander setzen. Und selbst ohne neue Entwicklungsplattform können Programmierer ein HD-Audio-fähiges PC-System weit gehend emulieren, indem sie ihren PC einfach mit mehreren Sound-Karten ausstatten. (Übersetzt von Britta Mümmler, überarbeitet und aktualisiert von Albert Lauchner)

Über die Autoren: Jim Huang ist Senior Technical Marketing Engineer und Matt McClellan Senior Application Engineer bei Intel. Dieser Artikel wurde erstmals im Intel Developer Service veröffentlicht. Die deutsche Zweitverwertung erfolgt mit Genehmigung von Intel.