Entwickler-Ecke
Multimedia / Grafik - PlaySound()
Aya - Mo 20.01.03 18:33
Titel: PlaySound()
Hi,
wenn ich mit PlaySound eine WAVE Datei von Festplatte abspiele wird sie ja jedesmal neu geladen...
Da ich aber ein und dieselbe datei mehrmals abspiele ist das recht.. unpraktisch, da es ab und an mal zu minimalen Ladezeiten kommt... Gibt es eine möglichkeit die Datei im Speicher zu behalten??
Au'revoir,
Aya~
Matthias - Fr 24.01.03 12:21
Hallo Aya,
hier eine kleine Procedur zur Lösung des Problems.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure PlaySoundFromMemory(Filename: string); var f: file; p: pointer; fsize: integer; begin AssignFile(f, FileName); Reset(f,1); fsize := FileSize(f); GetMem(p, fsize); BlockRead(f, p^, fsize); CloseFile(f); sndPlaySound(p,SND_MEMORY or SND_SYNC); FreeMem(p, fs); end; |
ciao
Matthias
Trallewatsch - Mi 19.02.03 01:57
Titel: WAVE Montieren
Kann ich nun auch mehrere Bereiche irgendwie zusammenfassen und mit einem Befehl abspielen?
Wenn ich jetzt einzelne Worte einzeln abspiele, sind die Pausen dazwischen zu lang.
Ich möchte einzelne Worte in separaten WAV-Dateien abspeichern und zusammengefügt abspielen.
Geht das?
tommie-lie - Mi 19.02.03 16:46
@Trallewatsch:
im Prinzip geht das. Allerdings müsstest du ja die Wave-Dateien auch hintereinander zusammenkleben, also wären die Pausen da immer noch drin. Aber du könntest versuchen, diese Pausen zu erkennen. Dummerweise ist "Stumm" nicht imer 0, sondern der jeweils letzte Wert, und wenn's aus'm Micro kommt, gibt es immer kleine Knackser.
Das reine aneinanderkleben geht mit einem Stream:
Speicherstream öffnen, erste Datei einlesen, Header vorher überspringen (siehe dazu mein
Waveform-Tutorial [
http://www.delphi-forum.de/viewtopic.php?t=7163] bei den hiesigen Tutorials). Das ganze für jede Datei machen. Jetzt hast du im Memorystream ein raw-Abbild aller Dateien, und zwar als ein einziges. Das kannst du dann mit den ebenfalls in meinem Tutorial beschriebenen Funktionen abspielen. Wichtig ist nur, daß Samplerate und Signalbreite jedesmal gleich groß sind. Du kannst also nicht 22.05kHz-Sounds mit 44.1kHz-Sounds mischen, und auch nicht 8bit mit 16bit oder gar mono mit stereo. Alles muss das gleiche sein. Oder du müsstest vorher die entsprechenden Daten interpolieren. Bei Mono/Stereo-Umwandluing ist das noch relativ einfach, aber bei Sampleratekonvertierung wüsste ich auch nix.
Trallewatsch - Mi 19.02.03 17:11
Titel: Playsound
@Tommie-lie
ich bedanke mich ganz herzlich. Das ist ja alles sehr umfangreich und beeindruckend. Darüber wollte ich schon immer mal mehr erfahren.
Werde es mir in Ruhe ansehen, bzw. erst einmal sichern.
Ich hab mir erstmal so beholfen, daß ich meine WAV-Datein alle beschnitten habe. Auch wenn man denkt, man hat exact aufgenommen, es sind immer kleine Lücken davor und dahinter. Die grafische Anzeige hat es erst gezeigt. Jetzt sieht es auch ohne Montage, also hintereinander abgespielt, sehr ordentlich, also für den Anwender zumutbar aus.
Danke
tommie-lie - Mi 19.02.03 17:23
freut mich.
Wenn du sie alle beschnitten hst, kannst du sie auch so beschneiden, daß vorne und hinten gar keine Pause ist. Dann kannst du beim abspielen die Pausenlänge beliebig anpassen, indem du einfach Leerbytes in den Memorystrem schreibst, oder einfach einen Timer bei gewöhnlicher Abspielmethode (PlaySound()) benutzt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!