Announcement

Collapse
No announcement yet.

Wave + Ton verlängern?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wave + Ton verlängern?

    ich habe noch ein problem und brauche echt die hilfe eines erfahrenen programmierers. ich suche schon seit tagen nach einer möglichkeit, finde aber nichts über das thema.<br>
    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

    <PRE>
    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,CA LLBACK_NULL);
    with lpwheader^ do
    begin
    lpData:=puffer;
    dwBufferLength:=44132;
    end;
    waveOutPrepareHeader(wavehandle^,lpwheader,sizeof( lpwheader^));
    waveOutWrite(wavehandle^,lpwheader,sizeof(lpwheade r^));
    repeat until (lpwheader^.dwFlags and WHDR_DONE = WHDR_DONE);
    waveOutUnPrepareHeader(wavehandle^,lpwheader,sizeo f(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. </PRE>
Working...
X