Forum: PC-Programmierung Audio treiber selber machen


von Peter (Gast)


Lesenswert?

Hallo,

ich will für eine eigene USB Audio Karte einen Windows Treiber bauen.

Hat jemand damit Erfahrung oder kann mir Quellen nennen wo ich Gute 
Informationen finde. Am besten gleich mit Code.

Das ganze USB Zeugs ist übrigens nicht das Problem, sondern wie man so 
einen Treiber schreibt.


Peter

von STK500-Besitzer (Gast)


Lesenswert?

Peter schrieb:
> Hat jemand damit Erfahrung oder kann mir Quellen nennen wo ich Gute
> Informationen finde. Am besten gleich mit Code.

Microsoft bietet ein Driver Development Kit an...

von Peter (Gast)


Lesenswert?

Der GCC arbeitet auch damit?

von STK500-Besitzer (Gast)


Lesenswert?

Peter schrieb:
> Der GCC arbeitet auch damit?

Da müsstest du dich mal über das DDK selber informieren. Ich weiß nur 
von seiner Existenz...

von Peter (Gast)


Lesenswert?

Bin ja schon am lesen, nur wenn jemand gleich sagt es geht oder es geht 
nicht nimm DAS. Dann würde es mir etliche Stunden lesen und suchen 
ersparen.

Peter

von cppler (Gast)


Lesenswert?

Du kannst von Microsoft eine freie Version des VisualStudioCPP Compilers 
herunterladen, dann noch das DDK und viel Spaß bei DMA unter Windoof :-P
http://www.microsoft.com/germany/express/products/windows.aspx

von Frank K. (fchk)


Lesenswert?

Peter schrieb:
> Der GCC arbeitet auch damit?

Eher nicht. Du brauchst das Microsoft Visual Studio.

fchk

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter schrieb:
> ich will für eine eigene USB Audio Karte einen Windows Treiber bauen.

Wenn die die USB-Audio-Standardgeräteklasse implementiert, musst Du das 
gar nicht, weil dann nämlich der bei Windows standardmäßig enthaltene 
Treiber für diese Geräteklasse verwendet wird.

Windows-Devicetreiber-Entwicklung ist alles andere als trivial, Du musst 
wirklich einen sehr guten Grund dafür haben, Dich damit zu 
beschäftigen.

Der Compiler ist hierbei das geringste Problem, die kostenlose 
Express-Version des Visual Studio sollte ausreichen.

von Gerd E. (robberknight)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Peter schrieb:
>> ich will für eine eigene USB Audio Karte einen Windows Treiber bauen.
>
> Wenn die die USB-Audio-Standardgeräteklasse implementiert, musst Du das
> gar nicht, weil dann nämlich der bei Windows standardmäßig enthaltene
> Treiber für diese Geräteklasse verwendet wird.

sehe ich auch so. Es gibt nur ganz wenige Fälle wo es Sinn macht von der 
USB-Audio-Klasse abzuweichen. Z.B. wenn man für professionelles 
Studioequipment genau definiterte Latenzen braucht.

> Windows-Devicetreiber-Entwicklung ist alles andere als trivial, Du musst
> wirklich einen sehr guten Grund dafür haben, Dich damit zu
> beschäftigen.

Full Ack. Es kommen noch die Unterschiede zwischen 32 und 64 Bit 
Versionen von Windows hinzu und für 64 Bit brauchst Du im Normalfall ein 
Zertifikat um den Treiber signieren zu können (kostet mehrere 100 EUR 
pro Jahr).

von Thomas E. (thomase)


Lesenswert?

Peter schrieb:
> Hat jemand damit Erfahrung oder kann mir Quellen nennen wo ich Gute
> Informationen finde. Am besten gleich mit Code.
"Programming the Microsoft Windows Driver Model" von Walter Oney.
Wenn du das gelesen hast, weisst du erstens, was du alles beachten 
musst, wirst du zweitens nie wieder auf die Idee kommen, selbst einen 
Treiber zu schreiben.

Rufus Τ. Firefly schrieb:
> Der Compiler ist hierbei das geringste Problem, die kostenlose
> Express-Version des Visual Studio sollte ausreichen.

"System Requirements
Before you begin, you must first install Visual Studio Professional 2012 
or above."
(http://msdn.microsoft.com/en-us/windows/hardware/hh852362)

mfg.

von Ziff (Gast)


Lesenswert?

>Bin ja schon am lesen, nur wenn jemand gleich sagt es geht oder es geht
nicht nimm DAS. Dann würde es mir etliche Stunden lesen und suchen
ersparen.


Aeh. Ja. Ich kenn Leute die haben das mal bei WinNT durchgezogen. Unter 
einem halben Jahr lief gar nicht. Ich bekam damals regelmaessig 
Infomaterial von Sysinternals, einem Anbieter von Devicedriver Kits und 
Kursen. Der Kurs dauerte damals 3 Tage oder eine Woche und kostete 4000 
Pfund. Kursort war in England.

Dh. Lass es sein.

von Peter (Gast)


Lesenswert?

Nun das das keine wirkliche gute Idee ist war mir von Anfang an bewusst.
Nur gibt es keine 32 Bit/256kSampels Audio Treiber.

Windows macht von hause aus nur 16/48.

Ich will bis jetzt nur mein XP benutzen, ob das dann später unter WIN8 
auch gehen soll wird sich zeigen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter schrieb:
> Nur gibt es keine 32 Bit/256kSampels Audio Treiber.
>
> Windows macht von hause aus nur 16/48.

Tja, dann wirst Du in den sauren Apfel beißen müssen.

Da Du anscheinend noch keinerlei Erfahrung auf dem Gebiet hast (sonst 
hättest Du ja auch nicht so danach gefragt), mach Dich auf mehrere Jahre 
Entwicklungszeit gefasst.

von Thomas E. (thomase)


Lesenswert?

Rufus Τ. Firefly schrieb:
> mach Dich auf mehrere Jahre Entwicklungszeit gefasst.
Und lass deine Fenster zumauern. Sonst fliegt der PC irgendwann auf 
Strasse.

mfg.

von Ziff (Gast)


Lesenswert?

Falls denn das Wissen da waere sowas als Standalone Geraet zu bauen, 
wuerd ich erst mal das bauen. Wenn's dann geht ist die Integration in 
einem PC schon ein Stueck naeher. Und speise das Standalone Geraet auch 
mal zum Testen mit einem PC Netzteil.

von Uwe (Gast)


Lesenswert?

> Wenn du das gelesen hast, weisst du erstens, was du alles beachten
> musst, wirst du zweitens nie wieder auf die Idee kommen, selbst einen
> Treiber zu schreiben.
> > mach Dich auf mehrere Jahre Entwicklungszeit gefasst.
>Und lass deine Fenster zumauern. Sonst fliegt der PC irgendwann auf
>Strasse.
Full Ack 8-)

von Uwe (Gast)


Lesenswert?

Kannst dir mal Jungo windriver angucken. Hab ich mal was mit gemacht 
weil ich sonst durchgeknallt wäre.

von Thomas (Gast)


Lesenswert?

> Windows macht von hause aus nur 16/48.
woher hast du den diese Info? Wie hast du das getestet?
Seit Win98 SE kann windows 24/96. Hab ich selber komerziell mit USB
gemacht.

Thomas

von Robert L. (lrlr)


Lesenswert?

>> Nur gibt es keine 32 Bit/256kSampels Audio Treiber.
>
> Windows macht von hause aus nur 16/48.

directX macht nur bis 200
http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.ixaudio2sourcevoice.ixaudio2sourcevoice.setsourcesamplerate%28v=vs.85%29.aspx

oder so..
(zumindest sagt das der 1. beste google hit)

wird also schwierig..

du brauchst sowieso spezielle Software (also warum einen AUDIO treiber, 
???)

vielleicht einfach ein OSZI nehmen ;-)


Nachtrag: willst was aufnehmen, oder abspielen??

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Thomas schrieb:
>> Windows macht von hause aus nur 16/48.
> woher hast du den diese Info?

Er wird sich auf die USB-Audio-Standardgeräteklasse beziehen. Die 
schränkt das ein. Natürlich kann man über USB auch mehr, das dann aber 
nur mit einem eigenen Devicetreiber -- und den möchten der Herr ja 
wohl auch erstellen.

Fensterzumauern reicht übrigens nicht. Der PC muss eingemauert werden, 
da er sonst mit Äxten, Hämmern, Kettensägen und was auch immer gerade 
zur Hand ist, zerfetzt werden wird.

von Gerd E. (robberknight)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Fensterzumauern reicht übrigens nicht. Der PC muss eingemauert werden,
> da er sonst mit Äxten, Hämmern, Kettensägen und was auch immer gerade
> zur Hand ist, zerfetzt werden wird.

was kann denn der arme PC dafür, daß der Benutzer ihm so ein 
widerspenstiges Betriebssystem installiert hat, welches die 
Treiberentwicklung so kompliziert macht?

Ich würde also eher die Festplatte und die Windows-CD bzw. -Schachtel 
vor Zerstörung schützen. Die sind viel näher am Problem als der Rest der 
Hardware. Und damit auch mehr gefährdet.

von Christian R. (supachris)


Lesenswert?

Der Aufwand, einen Kernel-Treiber zu schreiben, zu debuggen und zu 
testen ist doch bei Linux kaum weniger hoch. Mag sein, dass es 
stellenweise besser dokumentiert ist, aber wenn ich mal so typische 
Quelltext vergleiche, ist das strukturell nicht viel Unterschied.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

USB Audio Class 2.0 macht mind. 192 kHz, 24 Bit und zig Kanäle.

von Thomas E. (thomase)


Lesenswert?

Christian R. schrieb:
> Der Aufwand, einen Kernel-Treiber zu schreiben, zu debuggen und zu
> testen ist doch bei Linux kaum weniger hoch.
Das ist doch nur wieder das übliche
Windows-ist-Scheisse-und-Linux-ist-viel-besser-Gelaber.

mfg.

von Gerd E. (robberknight)


Lesenswert?

Christian R. schrieb:
> Der Aufwand, einen Kernel-Treiber zu schreiben, zu debuggen und zu
> testen ist doch bei Linux kaum weniger hoch. Mag sein, dass es
> stellenweise besser dokumentiert ist, aber wenn ich mal so typische
> Quelltext vergleiche, ist das strukturell nicht viel Unterschied.

Im Gegensatz zu Windows, wo quasi alle Treiber Closed-Source sind, sind 
unter Linux alle ernstzunehmenden Treiber im Kernel integriert und Open 
Source.

Du hast also jede Menge funktionierenden Beispielcode der ähnliche 
Probleme löst. Das alleine macht meiner Meinung schon einen wesentlichen 
Unterschied aus.

Wenn man möchte, kann man unter Linux Treiber mittlerweile auch im 
Userspace schreiben. Das vereinfacht die Entwicklung deutlich, da 
reboots bei Änderungen wegfallen und man Werkzeuge wie einen Debugger, 
Valgrind etc. verwenden kann. Allerdings geht durch den Userspace die 
Latenz ein wenig hoch, ob das hier zum Problem wird oder nicht kann ich 
so nicht beurteilen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Andreas Schwarz schrieb:
> USB Audio Class 2.0 macht mind. 192 kHz, 24 Bit und zig Kanäle.

Und unterstützt das der mit üblichen Windows-Versionen mitgelieferte 
Standardgeräteklassentreiber?
In Ermangelung entsprechender Hardware kann ich das nicht prüfen; wenn 
der Treiber das tun sollte, hat sich die Problemstellung des 
Threadstarters gelöst, bzw. er kann sich mit dem nächsten Problem seines 
Unterfangens beschäftigen.

von Marco S (Gast)


Lesenswert?

Vielfach basiert USB Audio 2.0 auf den XMOS-Chips. Diese Teile 
ermöglichen 24/192. Unter Linux das XMOS-Board einfach angesteckt und 
Audacity spielt eine 192kHz-Datei bitperfekt mit 192kHz ab. Bei MacOS 
soll es ähnlich sein. Nur Windows verhält sich anders: Man muss erst 
einen Treiber kaufen und diesen dann installieren, um in den Genuss von 
24 Bit und 192kHz Samplerate zu kommen.

von Christian R. (supachris)


Lesenswert?

Gerd E. schrieb:
> Du hast also jede Menge funktionierenden Beispielcode der ähnliche
> Probleme löst. Das alleine macht meiner Meinung schon einen wesentlichen
> Unterschied aus.

Dann installier mal das WDK, dann bekommste du auch massig Beispiele 
incl. aller Quellen und Doku. Natürlich ist der Windows Kernel an sich 
Closed Source, aber ansonsten nimmt sich das nicht viel. Mit VS2012 ist 
das WDK jetzt auch integraler Bestandteil von VS, ist nur noch ein 
Plug-In, das macht die Sache nochmal einfacher. Ob es inzwischen bessere 
Debug-Möglichkeiten als das FireWire oder Serial Kabel gibt, weiß ich 
allerdigs nicht. Ist einige Zeit her, dass ich damit mal näher zu tun 
hatte.

von Oliver R. (superberti)


Lesenswert?

Hi Thomas,
> Peter schrieb:
>> Hat jemand damit Erfahrung oder kann mir Quellen nennen wo ich Gute
>> Informationen finde. Am besten gleich mit Code.
> "Programming the Microsoft Windows Driver Model" von Walter Oney.
> Wenn du das gelesen hast, weisst du erstens, was du alles beachten
> musst, wirst du zweitens nie wieder auf die Idee kommen, selbst einen
> Treiber zu schreiben.
>
Ich hab's gelesen. Ich kann Thomas nur zu 100% recht geben. Selbst 
beruflich würde ich mich inzwischen weigern, diesen unsäglichen Kram zu 
programmieren. Und falls es privat ist: Tu Dir einen Gefallen und nutze 
Deine Zeit sinnvoller als mit Windows-Treiberprogrammierung. Du wirst es 
uns noch danken!!! ;-)

Gruß,

von Robert L. (lrlr)


Lesenswert?

ist schon witzig, meist liest man ja Sätze wie:

"die Deppen von XY, wieder mal so ein sch.. der  AMD treiber XY ist 
Schei..., der Nvidia Treiber noch schei..iger..

sollte man die Programmierer nicht LOBEN, dass sie es, trotz aller 
Widrigkeiten, geschafft haben, überhaupt ein Bild auf den LCD zu zaubern 
;-)



wegen linux:
wenn ich mir anschauen, wie lange ich zu analogen Zeiten , auf DVB-S 
Treiber gewartet habe, (um es dann irgendwan naufzugeben) und dann 
später auf DVB-S2 treiber.. (um es dann wieder aufzugeben)
für Windows gab es das jeweils schon JAHRE vorher..

mir ist das egal, ob es unter linux EINFACHER ist, unter Windows geht es 
auf jeden Fall SCHNELLER (das sind Fakten, warum es so ist, ist auch 
klar... da kann "Linux" nicht viel dafür: da ist eher die Henne oder das 
Ei schuld)

nochmal @to: willst du aufnehmen oder abspielen???

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Robert L. schrieb:
> wenn ich mir anschauen, wie lange ich zu analogen Zeiten , auf DVB-S
> Treiber gewartet habe,

Das ist aber nicht Linux und den Linux-Treiber-Entwicklern vorzuwerfen, 
sondern den Firmen, die die DVB-S (oder -T oder -C)-Chips herstellen und 
hartnäckigst keinerlei Dokumentation rausrücken.

von Robert L. (lrlr)


Lesenswert?

>vorzuwerfen

hab ich ja  nicht

ich hab geschrieben werde schuld ist ...



zu dvb-s: ich glaube es lag eher  an der proritäten/nicht freien 
firmware, die der TREIBER jedes mal auf die karte schreiben musste, 
damit sie überhaupt erst funktioniert

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.