Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Wav bei Wiedergabe manipulieren (https://www.delphipraxis.net/12708-wav-bei-wiedergabe-manipulieren.html)

horst 2. Dez 2003 19:37


Wav bei Wiedergabe manipulieren
 
wer weis rat
ich habe eine wav datei die besteht nur aus einen gleichbleibenden ton z.b. Trompete ist ca. 3 sek lang
jetzt möchte ich die wav mit hilfe von parametern gesteuert abspielen über die parameter möchte ich die Tonhöhe (Frequenz) die Tonlänge (Wiedergabelänge) und die Tonlautstärke mitgeben z.b. so

playwav(hoch,lang,laut,tromp.wav);
hat jemand eine idee?

horst 5. Dez 2003 18:20

Re: Wav bei Wiedergabe manipulieren
 
das mit der tonhöhe und der lautstärke habe ich mittlerweile hinbekommen, jetzt beliebt nur noch ein problem.
die wav-datei die ich habe hat einen ton von exact 3 sekunden länge ich möchte den ton aber 6 sekunden hören.
ich arbiete mit waveout usw. gibt es da soetwas wie ein loop der den ton zweimal ohne pause zwischendrin abspielt.
hier kurz mein bisheriger code, damit ihr besser wisst was ich meine
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 with lpFormat^ do
  begin
   wFormatTag:=WAVE_FORMAT_PCM;
   nChannels:=1;
   //////////////////////////////////////////////////////////////////////////////// 
   /// Tonhöhe
   nSamplesPerSec:= Scrollbar1.Position; // Hier die Tonhöhe anpassen
   //////////////////////////////////////////////////////////////////////////////// 
   wBitsPerSample:= 16;
   nBlockAlign:= (nChannels*wBitsPerSample)div 8;
   cbSize:=0;
  end;
 //////////////////////////////////////////////////////////////////////////////// 
 /// Lautstärke
 LVol := Scrollbar2.position; // max. is 65535 
 RVol := Scrollbar2.Position; // max. is 65535 
 SetWaveVolume(MakeLong(LVol, RVol));
 //////////////////////////////////////////////////////////////////////////////// 
 // tonlänge
 //  hier will ich noch die länge des tones verdoppeln
 //////////////////////////////////////////////////////////////////////////////// 
 waveOutOpen(wavehandle,WAVE_MAPPER,lpFormat,0,0,CALLBACK_NULL);
 with lpwheader^ do
  begin
   lpData:=puffer;
   dwBufferLength:=44132;
  end;
 waveOutPrepareHeader(wavehandle^,lpwheader,sizeof(lpwheader^));
 waveOutWrite(wavehandle^,lpwheader,sizeof(lpwheader^));
 repeat until (lpwheader^.dwFlags and WHDR_DONE = WHDR_DONE);
 waveOutUnPrepareHeader(wavehandle^,lpwheader,sizeof(lpwheader^));
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
 label4.caption := inttostr(Scrollbar1.position);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//nun etwas aufräumen
 waveOutClose(wavehandle^);
 dispose(wavehandle);
 dispose(lpFormat);
 dispose(lpwheader);
 close;
end;

function TForm1.SetWaveVolume(const AVolume: DWORD): Boolean;
var
  WaveOutCaps: TWAVEOUTCAPS;
begin
  Result := False;
  if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then
    if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
      Result := WaveOutSetVolume(WAVE_MAPPER, AVolume) = MMSYSERR_NOERROR;
end;

procedure TForm1.ScrollBar2Change(Sender: TObject);
begin
 label3.Caption := inttostr(scrollbar2.position);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 new(wavehandle);
 new(lpFormat);
 new(lpwheader);
 //Datei öffnen und einlesen
 hmio:= mmioopen('1.wav',nil, MMIO_READ or MMIO_ALLOCBUF);
 MMioSeek(hmio,0,SEEK_SET);
 getmem(puffer,44132);
 mmioRead(hmio,puffer,44132);
end;

procedure TForm1.ScrollBar3Change(Sender: TObject);
begin
 label6.Caption := inttostr(scrollbar3.position);
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 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