Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Wave direkt aus nem Array abspielen? (https://www.delphipraxis.net/35032-wave-direkt-aus-nem-array-abspielen.html)

dizzy 1. Dez 2004 18:19


Wave direkt aus nem Array abspielen?
 
Tach miteinander!

Ich breche mir gerade gut einen ab dabei... Ich möchte gerne ein Wave abspielen dessen Daten ich ein einem array of SmallInt (also 16 Bit Wave-Daten) halte. Nur irgendwie bekomme ich das so garnicht hin.
Ich hab jetzt schon einiges mit DelphiX versucht zu drehen, aber ich bekomme das Teil einfach nicht von Hand initialisiert. Und einfach eine temporäre Datei zu erzeugen finde ich absolut unschön, zumal es sich um Wavedaten im Millisekundenbereich handelt (ich will jetzt nen Sythesizer bauen :stupid:).

Ich bin absolut nicht auf DirectX festgelegt! Jede möglichkeit ist mir lieb um mein array hörbar zu machen :)
Kennt da einer was?

Gruss,
Fabian

supermuckl 1. Dez 2004 18:47

Re: Wave direkt aus nem Array abspielen?
 
wenn du das in echtzeit berechnen und wiedergeben willst ( midi gesteuert z.b. ) dann müsstest du wohl den ASIO treiber bzw ASIO2 oder DirectX (das ist langsamer und fast nicht zu gebrauchen) benutzen, sonst haste da eine derbe latenz drin.

fürs offline synthesizen und rumprobieren reicht das normale unbeschleunigte audiotreiber system aus. aber für live glaub mir, ist es absolut nicht gut wenn du da keinen ASIO standard unterstützen würdest.

Tubos 1. Dez 2004 20:22

Re: Wave direkt aus nem Array abspielen?
 
MSDN-Library durchsuchenplaysound, ist aber nur eine zweitklassige Lösung.
Am besten beschäftigst du dich direkt mit DirectSound.

dizzy 1. Dez 2004 20:36

Re: Wave direkt aus nem Array abspielen?
 
@supermuckl: Naja, Fruityloops läuft bei mir auch über DirectX (bietet aber auch ASIO), und das klappt auch mit x Synthies noch gut :). Aber an sich wäre ASIO eine feine Sache, da bin ich nicht drauf gekommen. Jetzt gibt es da nur ein winziges Problemchen: Wo zum Henker finde ich Infos/Kompos um ASIO anzusprechen!? :stupid:

@Tubos: Sauberes Loopen ist damit quasi nicht möglich - zumindest wenn man aus einer Datei abspielt (die für jeden Aufruf neu geöffnet wird). Und das ist schon sehr wichtig, da ich keine Lieder abspielen will, sonden ein Waveform-Loop von wenigen ms Länge. Zudem ist ja das eigentliche Problem nicht womit ich abspiele, sondern wie bekomme ich meine Daten worein? :) (ohne Umweg über ein Wavefile)

Direktes DirectSound :kotz: - ich weiss ja nicht ob ich das hinbekomme... DX ist für mich immer noch ein Buch mit 6 1/2 Siegeln. Ein wirklich gutes Grundlagen-Tut täte da wohl Not, und ich habe bisher nur solche gesehen die davon ausgingen dass man das Konzept/System schon längst durchblickt hat, und sofort mit Code (meist auch noch VC++ *shiver*) beginnen.
Mir fehlt irgendwie das Gesamtverständnis zu DirectX - ich weiss nur dass meine Zocks damit prima laufen :stupid:


Danke euch beiden schon mal! Werd mal versuchen noch was zu ASIO rauszufinden... und u.U. DirectSound :coder:

supermuckl 1. Dez 2004 20:40

Re: Wave direkt aus nem Array abspielen?
 
naja wie gesagt, die latenzzeit merkst du nur, und sie stört dich auch nur, wenn du z.b. mit einem midi eingabegerät ( keyboard ) spielst, und dein softwaresynthesizer soll darauf in echtzeit töne von sich geben. dann kommt midi in realtime und der sound wenige millisekunden hinterher und sowas ist extrem störend..
in fruity loops machst du ja alles offline und lässt abspielen. da fällt dir die verzögerung 1. nicht auf und 2. nervt es nicht :)

ASIO und DirectX sind da die einzigen anlaufstellen für latenzfreien sound.

es geht auch noch mit gigasampler schnittstellen aber sowas unterstützen nur teure soundkarten

ASIO übrigends auch nicht jede billigkarte, aber schon die CreativeLabs Audigy 2 ZS für knappe 70 kröten hat es!

je nach soundkarte ist die latenzzeit größer ( und je nach wavebuffer größe )

dizzy 1. Dez 2004 20:46

Re: Wave direkt aus nem Array abspielen?
 
Zitat:

Zitat von supermuckl
in fruity loops machst du ja alles offline und lässt abspielen. da fällt dir die verzögerung 1. nicht auf und 2. nervt es nicht :)

Stimmt ja... ich hab mal mein Keyboard mit FL verwendet, und ich erinnere mich daran es aus diesem Grund recht schnell wieder aufgegeben zu haben :cyclops:

Zitat:

Zitat von supermuckl
es geht auch noch mit gigasampler schnittstellen aber sowas unterstützen nur teure soundkarten

Na, sooo hoch wollmer net greifen.

Zitat:

Zitat von supermuckl
ASIO übrigends auch nicht jede billigkarte, aber schon die CreativeLabs Audigy 2 ZS für knappe 70 kröten hat es!

Meine SB Audigy Player sogar auch :)


Hast du zufällig nette Links in diese Richtung (wenn möglich sogar mit Delphibezug)?

supermuckl 1. Dez 2004 20:53

Re: Wave direkt aus nem Array abspielen?
 
nein leider garnichts developer mäßiges.

ich mach nur nebenbei als hobby musik und kenn mich deshalb ein wenig aus mit dem zeug.

{schleichwerbung}

guck mal auf meine page unter selfmade music

{/schleichwerbung}

dizzy 1. Dez 2004 20:55

Re: Wave direkt aus nem Array abspielen?
 
YEAH! Die ersten 2 Treffer bei Google sehen echt spitze aus! Für alle die sowas mal suchen sollten:

ASIO SDK für Delphi
DirectX SDK für Delphi (Der hier verlinkt sogar auf den ersten :))

\\edit2: evtl. auch interessant in diesem Zusammenhang: ASIO- & VST-Host

Bin jetzt erstmal wieder beschäftigt damit rauszubekommen ob ich damit klar komme. Danke für den Denkanstoß! :thumb:

\\edit: Die Mucke bockt! Reason klingt echt schon nett, woll!? Ach wenn ich doch nur auch endlich meinen Webspace auf unserem Clanserver hätte... hab hier auch noch so einiges rumliegen...
:thumb:

supermuckl 1. Dez 2004 21:02

Re: Wave direkt aus nem Array abspielen?
 
np

es wird auf jeden fall das optimum sein, es gleich richtig zu machen. am meisten spass macht sowas, wenn du dann in echtzeit dein keyboard abrocken lassen kannst und dein softsynth macht die sounds :)

auch wenn es evtl schwieriger ist, mit asio oder DX zu arbeiten, ist es trotzdem sehr zu empfehlen, sich da durch zu kämpfen.

lege am besten die prio auf asio. das ist wirklich nur dafür gemacht, das es die latenz auf ein minimum reduziert. DX ist zwar auch schneller als der standardtreiber, ist aber noch lange nicht so schnell wie der ASIO.

in den meisten audio apps kann man übrigends wählen ob man asio oder dx oder standard haben will.

evtl kannst du es ja auch so machen, das du dann nurnoch eine einzige schnittstelle hast, und dort dann wählen kannst.
es sieht zwar so aus als ob es sowas gäbe ( so wie bei der codec auswahl @ verschiedene video editoren usw )
aber es könnte auch für alle 3 fälle gesondert programmiert worden sein und nur eine standard gui dafür gemacht worden sein, wo es dann so aussieht alsob ;)

schwer auszudrücken.. zieh dir das Demo von Reason (www.Propellerhead.se), damit arbeite ich. Dort kann man das besagte so auswählen.

Motzi 1. Dez 2004 21:08

Re: Wave direkt aus nem Array abspielen?
 
Ich werf hier einfach mal diverse APIs in den Raum.. :roll:
waveOutOpen()
waveOutPrepareHeader()
waveOutWrite()
waveOutClose()
...


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 Uhr.
Seite 1 von 2  1 2      

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