![]() |
Generelle frage zu TFileStream
hi
ich trete auf einer stelle und komme nicht weiter. das heißt ich weiß nicht was die bessere lösung für mein problem ist. ich arbeite an einem Skype - Sound Recorder. das klappt auch ziemlich gut. das problem das ich habe ist, ich schicke den Sound/Mix durch verschieden Encoder wie (lame_enc.dll, libFLAC.dll,...) und zeichne den sound direkt per TFileStream auf. jetzt möchte ich die aufnahme Schneiden Bzw. auf 5 MB per File Limitieren wenn möglich Bit genau. das wäre awesome wenn mir da jemand weiterhelfen könnte. eins der probleme ist, verschiedene encoder schreiben die daten in verschieden grosse blöcke.
Delphi-Quellcode:
function TEncoder_MP3.Encoder_Write(Buf : Pointer; Len : Cardinal) : Boolean;
var BytesRead : Int64; OutSize : LongWord; beError : BE_ERR; wres : longint; begin Result:= true; if FAbort then begin Result:= false exit; end; if Len <> 0 then begin beError := beEncodeChunk(Stream, Len div 2, Buf, mp3buf, OutSize); if (beError <> BE_ERR_SUCCESSFUL) then raise FLameException.Create('beEncodeChunk failed. ' + IntToStr(beError)); FFileStream.Write(mp3buf^, OutSize); //<< auf 5 MB per File Limitieren end else begin Result:= false; exit; end; end; (************ Conver 32 Bit Floating-point to 16 Bit integer LE/BE ************) procedure DSP32f_16bitLE(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: Pointer); stdcall; var src : array of Single; dst : array of SmallInt; i : Integer; SaveValue : Integer; begin SetLength(src, length); SetLength(dst, length div 2); move(buffer^, src[0], length); for I := 0 to (length div 4) do begin SaveValue := Trunc(src[I] * 32768); SaveValue := Clip_16(SaveValue); dst[I] := SmallInt(SaveValue); end; FMp3Encoder.Encoder_Write(@dst[0], length div 2) end; BASS_ChannelSetDSP(Chan_Mixer, @DSP32f_16bitLE, Pointer(Self), -100); thx |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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