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.