diff --git a/AudioRecorder.pas b/AudioRecorder.pas index f0ddd31..aefcf49 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; @@ -151,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 @@ -158,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; @@ -305,6 +310,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 +323,7 @@ constructor TAudioRecorder.Create; FRecordedData := TMemoryStream.Create; FRecording := False; FCurrentBuffer := 0; - FMP3Encoder := TMP3Encoder.Create; + FMP3Encoder := nil; InitializeWaveFormat; end; @@ -321,7 +332,10 @@ destructor TAudioRecorder.Destroy; FDeviceList.Free; if FRecording then StopRecording; - FMP3Encoder.Free; + + if (assigned(FMP3Encoder)) then + FMP3Encoder.Free; + FRecordedData.Free; inherited; end; @@ -554,6 +568,7 @@ function TAudioRecorder.GetMP3Stream(BitRate: Integer): TMemoryStream; var WavStream: TMemoryStream; begin + EnsureMP3Encoder; WavStream := GetWaveStream; try Result := FMP3Encoder.EncodeStreamToMP3(WavStream, BitRate);