Forum: PC-Programmierung Soundausgabe mit Windows


von Farin (Gast)


Lesenswert?

Hallo Leute

Ich habe heute begonnen einen MP3-Decoder zu schreiben. Momentan habe 
ich das File so weit, dass ich die MP3-Frames und ihre Header auslesen 
und verstehen kann. Das Problem ist jetzt, wie komme ich, mit C#(oder C 
oder C++) unter Windows soweit auf die Soundkarte, dass ich unabhängig 
von DirectX oder ähnlichem 3rd party zeugs bin.

Ich möchte das unbedingt verwirklichen, da ich sehr gerne mal in der 
Musik-Informatik Branche arbeiten möchte und dies mein erster Schritt in 
die richtige Richtung wäre.

Ich hoffe ihr könnt mir helfen, ich finde nämlich keinerlei Infos bei 
Google die mir im Ansatz helfen könnten.

Danke im Voraus

Farin

von Peter II (Gast)


Lesenswert?

Farin schrieb:
> Das Problem ist jetzt, wie komme ich, mit C#(oder C
> oder C++) unter Windows soweit auf die Soundkarte, dass ich unabhängig
> von DirectX oder ähnlichem 3rd party zeugs bin.

Warum willst du davon unabhängig sein?

Hier ist die normalen API schnittstellen beschrieben

http://msdn.microsoft.com/en-us/library/aa446573.aspx

von Sharping (Gast)


Lesenswert?

Farin schrieb:
> soweit auf die Soundkarte, dass ich unabhängig
> von DirectX oder ähnlichem 3rd party zeugs bin

So wie ich das sehe gibt es das "Third Party Zeugs" ja gerade um 
unabhängig zu werden. Da hast du eine schöne Schnittstelle gegen die du 
implementieren kannst, weclhe Hardware (Soundkarte) dann darunter sitzt 
kann dir egal sein.
Oder willst du tatsächlich den Treiber selber ansprechen?

von schmitti (Gast)


Lesenswert?

DirectX ist als Bestandteil von Windows zu sehen und die bevorzugte 
Variante um Audio auszugeben. Alternativ gibt es noch die alte "WaveOut" 
API.
Beides sollte in der Windows-SDK beschrieben sein.

von Farin (Gast)


Lesenswert?

Mein Ziel ist es den Treiber anzusprechen, da ich durch den Treiber 
spezifischere Funktionen der Soundkarte nutzen kann.

Mein Ziel ist es eine externe Soundkarte(Digitales Interface für die 
Gitarre oder ein Mischpult) per USB anzuschliessen und über dessen 
Treiber die verschiedenen Equalizer-Funktionen etc. der Geräte nutzen zu 
können. Daher will ich, bevor ich aufnehme und rumspiele Sound ausgeben 
können.

Ich hoffe es geht dennoch trotz der API's. Das Gerät was ich ansprechen 
möchte wäre z.b. ein G2.1u von Zoom.

von Peter II (Gast)


Lesenswert?

Farin schrieb:
> Mein Ziel ist es den Treiber anzusprechen, da ich durch den Treiber
> spezifischere Funktionen der Soundkarte nutzen kann.

dann mach das doch, dann hilft die die doku von MS auch nicht weiter. 
Dann braucht du die Doku vom Treiber.

von Sharping (Gast)


Lesenswert?

Ja, das geht natürlich.
Allerdings unterstützt du dann tatsächlich nur dieses eine Gerät. 
Entwicklungswerkzeuge (in diesem Fall ein SDK) gibts (wenn du Glück 
hast) beim Hersteller.

von Farin (Gast)


Lesenswert?

Ich hatte leider kein Glück und hab' nun nur den ASIO-Treiber für das 
Gerät...

Hat jemand Beispiel-Code(vlt. C#) mit dem man einen Treiber ansprechen 
kann?
Ich wär euch extrem dankbar. =)

von Peter II (Gast)


Lesenswert?

Farin schrieb:
> Hat jemand Beispiel-Code(vlt. C#) mit dem man einen Treiber ansprechen
> kann?
> Ich wär euch extrem dankbar. =)

das geht so aber nicht, wenn du keine Doku vom dem Treiber hast kannst 
du ihn nicht ansprechen. Du brauchst dafür ein SDK vom Hersteller sonst 
wird das nichst.

von Sharping (Gast)


Lesenswert?

Naja, du musst halt den Treiber reverse-engineeren und dich langsam 
rantasten.

von Farin (Gast)


Lesenswert?

Hab auf CodeProject was tolles für den ASIO Treiber gefunden und werde 
das bei Zeiten mal Ausprobieren. Der Artikel sieht vielversprechend aus 
und macht eigentlich genau das was ich will. =D

http://www.codeproject.com/Articles/24536/Low-Latency-Audio-using-ASIO-Drivers-in-NET

von Peter II (Gast)


Lesenswert?

Farin schrieb:
> Der Artikel sieht vielversprechend aus
> und macht eigentlich genau das was ich will.

ich habe das mal kurz überflogen, aber das macht doch auch nur eine 
sound ausgabe über ASIO. Nur mit geringer Latenz.

Du wolltest doch spezielle funktionen von deinem Gerät ansprechen?

von Farin (Gast)


Lesenswert?

Der ASIO Treiber gibt mir die Möglichkeit Daten über das Gerät 
aufzunehmen, den Buffer zu modifizieren und zurückzusenden an den Output 
mit eben dieser Low Latency-Funktion die ich mit DirectX nicht hatte...

Das Gerät benutzt den ASIO-Treiber(Sry hab ich vergessen zu erwähnen) 
und so habe ich alle Gerätefunktionen zur Verfügung =))

von Peter II (Gast)


Lesenswert?

Farin schrieb:
> Das Gerät benutzt den ASIO-Treiber(Sry hab ich vergessen zu erwähnen)
> und so habe ich alle Gerätefunktionen zur Verfügung =))

welche funktionen hast du denn noch zur verfügung? (außer Low Latency)

von Farin (Gast)


Lesenswert?

momentan ist mir nur low latency und voll duplex(hardwareabhängig) 
bekannt. Ich werde, wenn du möchtest aber darüber auf meinem Blog 
schreiben.

http://www.blog.farin.ch

Das Projekt, arbeite gerade daran, wird dann auch dort verfügbar. =)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.