From 712faee73f9150550bd6d86842422a6f0c9324ac Mon Sep 17 00:00:00 2001 From: Antonio Lopez Date: Thu, 2 Apr 2026 13:08:13 +0200 Subject: [PATCH 1/2] Add EnsureMP3Encoder method to TAudioRecorder for lazy initialization of FMP3Encoder --- AudioRecorder.pas | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/AudioRecorder.pas b/AudioRecorder.pas index f0ddd31..48ed90d 100644 --- a/AudioRecorder.pas +++ b/AudioRecorder.pas @@ -52,6 +52,7 @@ TAudioRecorder = class FCurrentBuffer: Integer; FDeviceList: TStringList; FMP3Encoder: TMP3Encoder; + procedure EnsureMP3Encoder; procedure InitializeWaveFormat; procedure PrepareBuffers; procedure UnprepareBuffers; @@ -305,6 +306,12 @@ function TMP3Encoder.EncodeStreamToMP3(WavStream: TStream; BitRate: Integer): TM { TAudioRecorder } +procedure TAudioRecorder.EnsureMP3Encoder; +begin + if not Assigned(FMP3Encoder) then + FMP3Encoder := TMP3Encoder.Create; +end; + constructor TAudioRecorder.Create; begin inherited; @@ -312,7 +319,7 @@ constructor TAudioRecorder.Create; FRecordedData := TMemoryStream.Create; FRecording := False; FCurrentBuffer := 0; - FMP3Encoder := TMP3Encoder.Create; + FMP3Encoder := nil; InitializeWaveFormat; end; @@ -554,6 +561,7 @@ function TAudioRecorder.GetMP3Stream(BitRate: Integer): TMemoryStream; var WavStream: TMemoryStream; begin + EnsureMP3Encoder; WavStream := GetWaveStream; try Result := FMP3Encoder.EncodeStreamToMP3(WavStream, BitRate); From 0c71c6d53637980774fa253e3ebe2f8e804f129b Mon Sep 17 00:00:00 2001 From: Antonio Lopez Date: Thu, 2 Apr 2026 13:47:02 +0200 Subject: [PATCH 2/2] Refactor MP3 encoding process in TMP3Encoder to use TBytes for file handling and ensure safe freeing of FMP3Encoder --- AudioRecorder.pas | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/AudioRecorder.pas b/AudioRecorder.pas index 48ed90d..aefcf49 100644 --- a/AudioRecorder.pas +++ b/AudioRecorder.pas @@ -152,6 +152,8 @@ procedure TMP3Encoder.GetLameFunctions; procedure TMP3Encoder.EncodeFileToMP3(const WavFile, MP3File: string; BitRate: Integer); var WavStream, MP3Stream: TMemoryStream; + LBytes: TBytes; + LFile: AnsiString; begin WavStream := TMemoryStream.Create; try @@ -159,7 +161,9 @@ procedure TMP3Encoder.EncodeFileToMP3(const WavFile, MP3File: string; BitRate: I MP3Stream := EncodeStreamToMP3(WavStream, BitRate); try MP3Stream.SaveToFile(MP3File); - beWriteVBRHeader(PAnsiChar(AnsiString(MP3File))); + LBytes := TEncoding.ANSI.GetBytes(MP3File); + SetString(LFile, PAnsiChar(@LBytes[0]), Length(LBytes)); + beWriteVBRHeader(PAnsiChar(LFile)); finally MP3Stream.Free; end; @@ -328,7 +332,10 @@ destructor TAudioRecorder.Destroy; FDeviceList.Free; if FRecording then StopRecording; - FMP3Encoder.Free; + + if (assigned(FMP3Encoder)) then + FMP3Encoder.Free; + FRecordedData.Free; inherited; end;