AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi "bass.dll" Aufnahme an beliebiger Stelle im Stream fortsetze
Thema durchsuchen
Ansicht
Themen-Optionen

"bass.dll" Aufnahme an beliebiger Stelle im Stream fortsetze

Offene Frage von "Ducksoul"
Ein Thema von Ducksoul · begonnen am 27. Aug 2008 · letzter Beitrag vom 10. Okt 2008
 
Ducksoul

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

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

  Alt 7. Sep 2008, 15:05
Hm ne, das hat mir ausnahmsweise mal nicht geholfen..

Also momentan sieht es bei mir folgendermaßen aus:

Callback-Routine:
Delphi-Quellcode:
  (* Callback *)
  function RecordingCallback(Handle: HRECORD; buffer: Pointer; length, user: DWord): boolean; stdcall;
    begin
        // Kopiere neuen Bufferinhalt in den Memory Buffer
       Formular.WaveStream.Write(buffer^, length);
        // Weiteres Aufnehmen erlauben
       Result := True;

    end; // function Callback
Start der Aufnahme:
Delphi-Quellcode:
  (* Aufnahme Start *)
  procedure TFormular.StartRecording;
    var
      vol: Float;
      i: Integer;
      Flag: DWord;
    begin

        // Aufnahme je nach Aufnahmemodus
      if WaveStream.Size = 0 then
        begin
        end
      else
        begin
      if Rec_Passage.Checked = True then
        begin
          try
            // ín aufgenommenen Stream eine Passage nach aktueller
            // Position einfügen
          except
          end;
        end
      else
        begin
            (*WaveStream.Position := GetPos;
            Edit1.Text := IntToStr(WaveStream.Position);
            BufStream := TMemoryStream.Create;
            BufStream.CopyFrom(WaveStream, WaveStream.Position);

            BASS_ChannelStop(chan);
            BASS_ChannelStop(rchan);
            BASS_StreamFree(chan);
            BASS_StreamFree(rchan);
            WaveStream := nil;
            WaveStream := TMemoryStream.Create;

            WaveStream.CopyFrom(BufStream, 0);
            FreeAndNil(BufStream);*)


            // alles nach aktueller Position löschen und dort Aufnahme
            // fortführen

          try
          except
          end;
      end; // if
      end;

         // 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;


        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

Beenden der Aufnahme:
Delphi-Quellcode:
  (* Stop recording *)
  procedure TFormular.StopRecording;
    var
       i: integer;
    begin
       BASS_ChannelStop(rchan);

         // WAV-Header komplettieren
       WaveStream.Position := 4;
       i := WaveStream.Size - 8;
       WaveStream.Write(i, 4);
       i := i - $24;
       WaveStream.Position := 40;
       WaveStream.Write(i, 4);
       WaveStream.Position := 0;

      if Rec_Passage.Checked = True then
        begin
          try
          finally
          end;
      end; // if

         // Stream für aufgenomme Daten kreieren
       chan := BASS_StreamCreateFile(True, WaveStream.Memory, 0, WaveStream.Size, 0);


       if chan <> 0
        then begin
          //???
         end
      else begin
          MessageDlg('Fehler beim Erstellen eines Streams aus der Aufnahme!',
                    mtError, [mbOk], 0);
        end; // if
    end; // procedure StopRecording

  (* RecordButtonClick || Start Aufnahme *)
  procedure TFormular.RecExecute(Sender: TObject);
    begin
      if BASS_ChannelIsActive(rchan) = BASS_Active_Stopped then // Aufnahme starten
        begin

          if BASS_ChannelIsActive(chan) <> BASS_Active_Stopped then
            begin
              BASS_ChannelStop(chan);
              //ProgressBar.Position := ProgressBar.Max;
              StartRecording;
            end
          else
          begin
            //ProgressBar.Position := ProgressBar.Max;
            StartRecording;
          end; // if
          RecToggleStatus(8);

        end
      else if BASS_ChannelIsActive(rchan) = BASS_Active_Playing then // Aufnahme beenden
        begin
          StopRecording;
          RecToggleStatus(3);
      end;
    end; //procedure RecExecute

Es kann doch eigentlich nich so schwer sein beim Start der Aufnahme vom vorhandenen Stream alles aber der aktuellen Position des Streams zu löschen und dort die Aufnahme fortzuseten, oder doch?


MfG Ducksoul
Franz
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz