Einzelnen Beitrag anzeigen

horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Wav bei Wiedergabe manipulieren

  Alt 5. Dez 2003, 18:20
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.
  Mit Zitat antworten Zitat