Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Soundausgabe ohne Streams (https://www.delphipraxis.net/109884-soundausgabe-ohne-streams.html)

Macci 9. Mär 2008 16:00


Soundausgabe ohne Streams
 
Hallo,

ich versuche zur Zeit ein Programm zu schreiben, dass viele kurze Töne über die Soundkarte ausgibt. Also im Grunde genau wie "Windows.Beep(Frequenz,Dauer)", nur dass der Ton eben nicht über den PC-Speaker ausgegeben werden soll, sondern über die Soundkarte.

Habe schon öfters hier gelesen, dass es mit Streams möglich sein soll, das klappt im Prinzip auch ganz gut, nur leider einfach viel zu langsam. Ich möchte z.B. kurze Töne, die nur 30-40 ms. lang sind hintereinander praktisch ohne Unterbrechung ausgeben, und mit Streams klappt das einfach nicht. In einen Stream gleich mehrere Tönhöhen hintereinander zu schreiben habe ich mir auch schon überlegt, da ich aber nie weiß, welche Tonhöhe als nächstes kommt, ist das für mich auch unbrauchbar.

Hat jemand von euch eine Idee, wie ich es am besten hinkriegen kann, Sound auszugeben ohne auf Streams zurückzugreifen? Werde auch selbst noch weiter suchen, aber vielleicht hat zufällig jemand sowas schon mal gemacht, und kann mir einen guten Tipp geben. :-)

Ich bin für alle nützlichen Tipps und Links dankbar.

Viele Grüße,
Mac

DeddyH 9. Mär 2008 16:01

Re: Soundausgabe ohne Streams
 
Du könntest es über die MIDI-Schnittstelle versuchen.

Macci 9. Mär 2008 16:05

Re: Soundausgabe ohne Streams
 
Gute Idee DeddyH, aber ist es damit möglich diese typischen Piepstöne, also reine Sinusschwingungen, auszugeben? Soweit ich weiß, muss man da immer auf ein Instrument zurückgreifen. Ansonsten werde ich das gleich mal versuchen :-D

DeddyH 9. Mär 2008 16:08

Re: Soundausgabe ohne Streams
 
Kommt wohl auf die Wavetable und das ausgewählte Instrument an.

Macci 9. Mär 2008 17:38

Re: Soundausgabe ohne Streams
 
Hmm, also ich möchte ja gerne diese Rechtecksschwingung haben, wie sie auch der PC-Speaker erzeugt.
Ich habe jetzt zwar eine Idee wie es gehen könnte, aber das wäre vielleicht wie mit Kanonen auf Spatzen geschossen: Ich würde die Soundkarte einfach direkt ansteuern.

Andererseits will ich meine Soundkarte nicht aus Versehen zerstören ;-)
Wie gefährlich ist sowas unter Windows XP? (Direkten Portzugriff würde ich schon hinkriegen, das wär nicht das Problem.)

Aber gibt es vielleicht noch eine elegante Zwischenlösung? Wie ist sndPlaySound intern realisiert? Weis jemand bescheid?

Danke für eure Hilfe,
Macci

igel457 9. Mär 2008 20:39

Re: Soundausgabe ohne Streams
 
Es ist nicht möglich Sounds ohne zwischenspeichern zu generieren. Du musst immer einen (wenn auch kleinen) Buffer (komfortabel über einen Memorystream zu verwalten) mit deinen Sounddaten füllen und diesen zur Soundkarte (über WaveOut oder Playsound) schicken. Siehe auch: http://wiki.delphigl.com/index.php/T...re-Synthesizer

Macci 9. Mär 2008 21:08

Re: Soundausgabe ohne Streams
 
@igel457:

Also es geht - zumindest bei meiner Soundkarte - über Basis Port $220 (Reset: Basis+ $6, Tonausgabe: Basis + $C) direkt ohne Zwischenspeicher. Was auf deinem Link steht, ist aber viel interessanter und eleganter als meine direktes Rumpfuschen in der Hardware ;-)
Werde ich mir alles in Ruhe durchlesen und probieren. Vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz