Autor Beitrag
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mo 20.01.03 18:33 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121



BeitragVerfasst: Fr 24.01.03 12:21 
Hallo Aya,

hier eine kleine Procedur zur Lösung des Problems.

ausblenden 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
Hält's aus hier
Beiträge: 7

XP, Win 98
Delphi
BeitragVerfasst: 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?

_________________
[b:6c422201f2][color=red:6c422201f2]Trallewatsch[/color:6c422201f2]
... einfach zum Drücken[/b:6c422201f2]
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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 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.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Trallewatsch
Hält's aus hier
Beiträge: 7

XP, Win 98
Delphi
BeitragVerfasst: 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

_________________
[b:6c422201f2][color=red:6c422201f2]Trallewatsch[/color:6c422201f2]
... einfach zum Drücken[/b:6c422201f2]
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert