Seite 1 von 2

Direkte Soundausgabe

Verfasst: 15.01.2005 21:56
von Hroudtwolf
Hallöle,

Gibts irgendwie ne Möglichkeit ohne externe DLL oder Library einen Ton
direkt über die Soundkarte auszugeben?
z.B.Einen Sinuston bei 8000herz
Wie müsste ich das anstellen.?

Re: Direkte Soundausgabe

Verfasst: 15.01.2005 23:47
von traumatic
Unter Windows am einfachsten per DirectSound.

Danilo hatte mal ein Beispiel für PureBasic gebaut:
http://www.purearea.net/pb/CodeArchiv/M ... dBuffer.pb

Alternativ kannst Du Dir auch die WINMM-Funktionen anschauen (waveOutWrite() etc.).

Verfasst: 16.01.2005 00:17
von Ynnus
beep_(8000, 2000); vielleicht?

Nur, bei 8000 Herz hörst du kaum noch was. Nimm zum Testen lieber 2000 Herz oder so.

Verfasst: 16.01.2005 00:26
von Froggerprogger
Für die Soundausgabe musst Du in jedem Fall mit einem Treiber kommunizieren, da der direkte Zugriff auf Soundkarten nicht (mehr) möglich ist. (so wie früher per Speicheradresse 0x220h oder so...)

Also kannst Du dich für DirectSound entscheiden (wofür wiederum die DirectX-DLL genutzt wird), siehe das Beispiel von Danilo.

Alternativ gibt es die WinMM-Funktionen, welche wohl den Mediaplayer nutzen. (vermute ich)

Auch mit MCI-Kommandos könntest Du Sounds direkt abspielen, welche wiederum intern (glaube ich) WinMM nutzen.

Hat da jemand genauere Ahnung von ? Würde mich auch mal interessieren.
Also : DirectSound versus WinMM versus MCI ? Und was es ggf. noch gibt ?

Verfasst: 16.01.2005 01:05
von traumatic
Sunny hat geschrieben:beep_(8000, 2000); vielleicht?

Nur, bei 8000 Herz hörst du kaum noch was. Nimm zum Testen lieber 2000 Herz oder so.
Mein Beleid! Wenn Du schon 8kHz nicht mehr hören kannst, dann ist es
bald vorbei mit Deinen Ohren... Zischlaute liegen z.B. bei ca. 10-12kHz ;)

Verfasst: 16.01.2005 01:43
von traumatic
Froggerprogger hat geschrieben: Hat da jemand genauere Ahnung von ? Würde mich auch mal interessieren.
Also : DirectSound versus WinMM versus MCI ? Und was es ggf. noch gibt ?
Auf was genau zielt denn Deine Frage ab?

Ich würde sagen, eine mögliche Beantwortung hängt immer ein wenig von
dem Einsatzzweck ab. WinMM war im Grunde der ursprüngliche Versuch von
Microsoft, die multimedialen Fähigkeiten von Windows (nicht nur Sound) in eine
einfache API zu kapseln. Vielleicht könnte man es mit GDI vergleichen...
...es funktioniert... ;)

Irgendwann entwickelte Microsoft DirectX (ok, vorher kam noch etwas anderes,
wie nannte sich das... Win Fire oder so?) und alles wurde besser, schneller
und vor allem funktionaler. Software, die vor DirectX Sounds ausgegeben hat,
nutzte entweder WinMM, war DOS-basiert oder irgendeine Treiber-Ferkelei.

Ein Problem an WinMM ist z.B., dass man keinen exklusiven Zugriff auf das
Ausgabe-Device hat, d.h. wenn man sich entscheidet, eine Ausgabe mit
24bit/96kHz zu machen geht das sofort in die Hose, wenn beispielsweise
Outlook ein .wav in 16bit/22kHz abspielt, weil neue Spam-Mails eingegangen
sind.

DirectX hingegen bietet nicht nur exklusiven Zugriff (und relativ vernünftige
Hardware-Unterstützung) sonden auch einen immensen Funktionsumfang,
der weit über die reine Ausgabe von Sounddaten hinausgeht.

Weitere Modelle - vor allem im "Low-Latency-Bereich" - wären übrigens WDM
(Kernel Streaming), ASIO und GSIF, allesamt aber wohl dem professionellen
Markt vorbehalten (will heißen, kein Spiel würde darauf zurückgreifen).

Ich weiß nicht, hilft das schon?

Verfasst: 16.01.2005 02:15
von Ynnus
traumatic hat geschrieben:
Sunny hat geschrieben:beep_(8000, 2000); vielleicht?

Nur, bei 8000 Herz hörst du kaum noch was. Nimm zum Testen lieber 2000 Herz oder so.
Mein Beleid! Wenn Du schon 8kHz nicht mehr hören kannst, dann ist es
bald vorbei mit Deinen Ohren... Zischlaute liegen z.B. bei ca. 10-12kHz ;)
Vielleicht liegts auch an meinem PC-Speaker jedenfalls kann der die 8k kaum noch hörbar darstellen, nur noch ganz leiste. Die werden ab 6k immer leiser und bei 8k war es das. Ansonsten sind meine Ohren recht gut, bisher hatte ich nie Probleme damit. (Und ich kann mich daran erinnern, im E-Technik-Unterricht mal mit einem Lautsprecher herumgespielt zu haben und dabei 9 K - 14 K Töne gut gehört zu haben, auch wenns etwas in den Ohren gezogen hat. :mrgreen:)

EDIT: Normalerweise braucht der PC-Speaker für die normalen Siglantöne auch nix was > 3 - 5 K liegt. Zumindest hab ich noch nie so hohe Signaltöne ausgegebene bekommen.

Verfasst: 16.01.2005 02:21
von traumatic
Sunny hat geschrieben:Vielleicht liegts auch an meinem PC-Speaker jedenfalls kann der die 8k kaum noch hörbar darstellen, nur noch ganz leiste. Die werden ab 6k immer leiser und bei 8k war es das.
Ok, das kann natürlich sein... da bin ich beruhigt! :D

Direkte Soundausgabe

Verfasst: 16.01.2005 07:10
von Hroudtwolf
Vielen Dank für die vielen Hilfen.
Denoch suche ich etwas direkteres. Wie kann ich den auf den Soundkartentreiber manipulativ so einwirken ,daß ich einen Ton rausbekomme ?
Bei DOS ging das mit PASCAL total einfach.(220H)

Re: Direkte Soundausgabe

Verfasst: 16.01.2005 09:31
von DarkDragon
Hroudtwolf hat geschrieben:Vielen Dank für die vielen Hilfen.
Denoch suche ich etwas direkteres. Wie kann ich den auf den Soundkartentreiber manipulativ so einwirken ,daß ich einen Ton rausbekomme ?
Bei DOS ging das mit PASCAL total einfach.(220H)
Für die Soundausgabe musst Du in jedem Fall mit einem Treiber kommunizieren, da der direkte Zugriff auf Soundkarten nicht (mehr) möglich ist. (so wie früher per Speicheradresse 0x220h oder so...)
220H ist in PureBasic $220 und ist oft die Adresse von Soundkarten(gewesen). Wenn das heute noch der Fall wäre, würde ich dir die InpOutp32 DLL empfehlen. Heute kann man damit aber keine Soundkarten mehr ansprechen(oder es kommt zumindest nichtsmehr dabei raus). Deshalb muss man durch einen Treiber einen SoundBuffer senden, der die entsprechenden Daten enthält. DirectSound und OpenAL wären eine einfache methode den Treiber anzusprechen. Dabei ist OpenAL noch Plattformunabhängig ;) .