Einzelnen Beitrag anzeigen

Ducksoul

Registriert seit: 19. Apr 2006
Ort: Ilmenau
87 Beiträge
 
RAD-Studio 2009 Pro
 
#11

Re: "bass.dll" Aufnahme an beliebiger Stelle im St

  Alt 10. Sep 2008, 21:53
So sieht die abgeänderte Version aus. Jetzt wird der Header nicht jedes mal neu geschrieben. Das war mir heute morgen schon aufgefallen, aber das abzuändern hatte leider nichts gebracht.
Das Problem mit dem Rauschen besteht aber leider immernoch, komischerweise nicht immer, sondern nur manchmal.

Kann es sein, dass aus mir unbekannten Gründen der Stream manchmal vorhandene Daten überschreibt und daher das Rauschen entsteht? Da ich keine Ahnung habe woran das Verhalten überhaupt liegen kann, weiß ich nichmal wie ich das Problem angehen kann

Delphi-Quellcode:
  (* Aufnahme Start *)
  procedure TFormular.StartRecording;
    var
      vol: Float;
      i, RecPos: Integer;
      Flag: DWord;
    begin

      if WaveStream.Size = 0 then
        begin
         // Header für WAV-File generieren
       with WaveHdr do
        begin
            riff := 'RIFF';
            len := 36;
            cWavFmt := 'WAVEfmt ';
            dwHdrLen := 16;
            wFormat := 1;
            wNumChannels := 2;
            dwSampleRate := 44100;
            wBlockAlign := 4;
            dwBytesPerSec := 176400;
            wBitsPerSample := 16;
            cData := 'data';
            dwDataLen := 0;
        end; // with

         WaveStream.Write(WaveHdr, SizeOf(WAVHDR));
         i := 0;
        end
      else
        begin
          if Rec_Overwrite.Checked = True then
            begin
                // hier ab aktueller Position Aufnahme fortsetzen
              (*WaveStream.Seek(GetPos, soFromBeginning);

              if WaveStream.Position < SizeOf(WaveHDR) then
                WaveStream.Seek(SizeOf(WaveHDR)+1, soFromBeginning);

              WaveStream.SetSize(WaveStream.Position);
              WaveStream.Seek(0, soFromEnd);
              Edit1.Text := IntToStr(WaveStream.Size); *)


              RecPos := GetPos;
                // Zwischenspeicher anlegen
              BufStream := TMemoryStream.Create;
              BufStream.SetSize(RecPos);
                // Wavedaten in Zwischenspeicher kopieren
              Move(WaveStream.Memory^,BufStream.Memory^,RecPos);
                // WaveStream abschneiden
              WaveStream.SetSize(RecPos);
                // Wavedaten rückkopieren
              Move(BufStream.Memory^,WaveStream.Memory^,RecPos);
              BufStream.Free;
                // Position setzen
              WaveStream.Position := RecPos;
            end; // if

          if Rec_Passage.Checked = True then
            begin
                // hier an aktueller Position Passage einfügend
            end; // if
        end; // if


        vol := RecordPegelBar.Position/100;
         while BASS_RecordSetInput(i, BASS_INPUT_OFF, vol)
          do i := i + 1;


          // ---LoWord-- ----HiWord----
        Flag := MakeLong(c16BitAudio, cRecordingTime);
           // Aufnahmebeginn @ 44100hz 16-bit stereo
         rchan := BASS_RecordStart(cSamplerate,
                                  cNumChannels,
                                  Flag,
                                  @RecordingCallback,
                                  nil);

         if rchan = 0
          then begin
              MessageDlg('Aufnahme konnte nicht gestartet werden!',
                        mtError, [mbOk], 0);
              WaveStream.Clear;
           end;
    end; // procedure StartRecording
Danke trotzdem,
Duck
Franz
  Mit Zitat antworten Zitat