LZScene

Форк
0
/
GLFileMP3.pas 
135 строк · 2.8 Кб
1
//
2
// This unit is part of the GLScene Engine https://github.com/glscene
3
//
4
{
5
   Support for MP3 format.
6

7
	 History :  
8
       25/07/09 - DaStr - Added $I GLScene.inc  
9
       06/05/09 - DanB - Creation from split from GLSoundFileObjects.pas
10
	 
11
}
12
unit GLFileMP3;
13

14
interface
15

16
{$I GLScene.inc}
17

18
uses
19
  Classes, GLApplicationFileIO, GLSoundFileObjects;
20

21
type
22

23
   // TGLMP3File
24
   //
25
   { Support for MP3 format.
26
      *Partial* support only, access to PCMData is NOT supported. }
27
   TGLMP3File = class (TGLSoundFile)
28
      private
29
          
30
         data : array of Byte; // used to store MP3 bitstream
31

32
      protected
33
          
34

35
      public
36
          
37
         function CreateCopy(AOwner: TPersistent) : TGLDataFile; override;
38

39
         class function Capabilities : TGLDataFileCapabilities; override;
40

41
         procedure LoadFromStream(Stream: TStream); override;
42
         procedure SaveToStream(Stream: TStream); override;
43

44
         procedure PlayOnWaveOut; override;
45

46
	      function WAVData : Pointer; override;
47
         function WAVDataSize : Integer; override;
48
	      function PCMData : Pointer; override;
49
	      function LengthInBytes : Integer; override;
50
   end;
51

52
implementation
53

54
// ------------------
55
// ------------------ TGLMP3File ------------------
56
// ------------------
57

58
// CreateCopy
59
//
60
function TGLMP3File.CreateCopy(AOwner: TPersistent) : TGLDataFile;
61
begin
62
   Result:=inherited CreateCopy(AOwner);
63
   if Assigned(Result) then begin
64
      TGLMP3File(Result).data := Copy(data);
65
   end;
66
end;
67

68
// Capabilities
69
//
70
class function TGLMP3File.Capabilities : TGLDataFileCapabilities;
71
begin
72
   Result:=[dfcRead, dfcWrite];
73
end;
74

75
// LoadFromStream
76
//
77
procedure TGLMP3File.LoadFromStream(stream : TStream);
78
begin
79
   // MP3 isn't actually, just loaded directly...
80
   Assert(Assigned(stream));
81
   SetLength(data, stream.Size);
82
   if Length(data)>0 then
83
      stream.Read(data[0], Length(data));
84
end;
85

86
// SaveToStream
87
//
88
procedure TGLMP3File.SaveToStream(stream: TStream);
89
begin
90
   if Length(data)>0 then
91
      stream.Write(data[0], Length(data));
92
end;
93

94
// PlayOnWaveOut
95
//
96
procedure TGLMP3File.PlayOnWaveOut;
97
begin
98
   Assert(False, 'MP3 playback on WaveOut not supported.');
99
end;
100

101
// WAVData
102
//
103
function TGLMP3File.WAVData : Pointer;
104
begin
105
   if Length(data)>0 then
106
      Result:=@data[0]
107
   else Result:=nil;
108
end;
109

110
// WAVDataSize
111
//
112
function TGLMP3File.WAVDataSize : Integer;
113
begin
114
   Result:=Length(data);
115
end;
116

117
// PCMData
118
//
119
function TGLMP3File.PCMData : Pointer;
120
begin
121
   Result:=nil;
122
end;
123

124
// LengthInBytes
125
//
126
function TGLMP3File.LengthInBytes : Integer;
127
begin
128
   Result:=0;
129
end;
130

131
initialization
132

133
  RegisterSoundFileFormat('mp3', 'MPEG Layer3 files', TGLMP3File);
134

135
end.
136

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.