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