ca0203e58079d87673078bcbefad4744ae49a6cf
3 interface
5 uses
6 sdl2,
7 SDL2_mixer,
8 e_log,
9 SysUtils;
11 type
20 private
23 protected
31 public
51 const
57 function e_LoadSoundMem(pData: Pointer; Length: Integer; var ID: DWORD; isMusic: Boolean): Boolean;
59 // returns channel number or -1
74 var
77 implementation
79 uses
82 const
86 var
92 var
94 begin
100 { // wow, this is actually MIDI player!
101 // we need module player
102 if (Mix_Init(MIX_INIT_MOD) and MIX_INIT_MOD) <> MIX_INIT_MOD then
103 begin
104 e_WriteLog('Error initializing SDL module player:', MSG_FATALERROR);
105 e_WriteLog(Mix_GetError(), MSG_FATALERROR);
106 //Exit;
107 end;
108 }
112 begin
115 Exit;
125 begin
128 begin
134 begin
137 begin
143 var
145 begin
149 begin
151 Exit;
155 begin
158 end
159 else
160 begin
167 var
169 begin
182 begin
185 end
186 else
187 begin
197 function e_LoadSoundMem(pData: Pointer; Length: Integer; var ID: DWORD; isMusic: Boolean): Boolean;
198 var
201 begin
214 begin
216 end
217 else
218 begin
230 var
232 begin
236 if {(e_SoundsArray[ID].nRefs >= gMaxSimSounds) or} (e_SoundsArray[ID].Sound = nil) and (e_SoundsArray[ID].Music = nil) then Exit;
239 begin
243 Exit;
248 {
249 if e_SoundsArray[ID].isMusic then
250 res := Mix_PlayChannel(-1, e_SoundsArray[ID].Sound, -1)
251 else
252 res := Mix_PlayChannel(-1, e_SoundsArray[ID].Sound, 0);
253 }
261 var
264 begin
268 begin
279 var
281 begin
285 begin
293 var
296 begin
300 begin
313 begin
325 //TODO
327 {
328 var
329 i: Integer;
330 Chan: FMOD_CHANNEL;
331 vol: Single;
332 }
333 begin
334 // Mix_Volume(-1, volm);
335 {
336 for i := 0 to N_CHANNELS-1 do
337 begin
338 Chan := nil;
339 res := FMOD_System_GetChannel(F_System, i, Chan);
341 if (res = FMOD_OK) and (Chan <> nil) then
342 begin
343 res := FMOD_Channel_GetVolume(Chan, vol);
345 if res = FMOD_OK then
346 begin
347 if setMode then
348 vol := SoundMod
349 else
350 vol := vol * SoundMod;
352 res := FMOD_Channel_SetVolume(Chan, vol);
354 if res <> FMOD_OK then
355 begin
356 end;
357 end;
358 end;
359 end;
360 }
363 //TODO
365 {
366 var
367 res: FMOD_RESULT;
368 i: Integer;
369 Chan: FMOD_CHANNEL;
370 }
371 begin
372 {
373 if Enable = SoundMuted then
374 Exit;
376 SoundMuted := Enable;
378 for i := 0 to N_CHANNELS-1 do
379 begin
380 Chan := nil;
381 res := FMOD_System_GetChannel(F_System, i, Chan);
383 if (res = FMOD_OK) and (Chan <> nil) then
384 begin
385 res := FMOD_Channel_SetMute(Chan, Enable);
387 if res <> FMOD_OK then
388 begin
389 end;
390 end;
391 end;
392 }
396 begin
402 var
404 begin
416 begin
420 begin
427 begin
428 //FMOD_System_Update(F_System);
431 { TBasicSound: }
434 begin
443 begin
449 begin
457 // aPos: msecs
459 begin
463 //TODO: aPos
467 begin
474 begin
483 begin
485 //GetPosition();
491 begin
494 if e_isSound(FID) then Result := (Mix_Paused(FChannel) > 0) else Result := (Mix_PausedMusic() > 0);
498 begin
501 begin
503 begin
506 end
507 else
508 begin
510 begin
514 {
515 if Enable then
516 begin
517 res := FMOD_Channel_GetPosition(FChannel, FPosition, FMOD_TIMEUNIT_MS);
518 if res <> FMOD_OK then
519 begin
520 end;
521 end;
522 }
525 //TODO
527 begin
530 {
531 res := FMOD_Channel_GetVolume(FChannel, vol);
532 if res <> FMOD_OK then
533 begin
534 Exit;
535 end;
536 Result := vol;
537 }
541 begin
548 //TODO
550 begin
553 {
554 res := FMOD_Channel_GetPan(FChannel, pan);
555 if res <> FMOD_OK then
556 begin
557 Exit;
558 end;
559 Result := pan;
560 }
564 var
566 begin
576 //TODO
578 begin
581 {
582 res := FMOD_Channel_GetMute(FChannel, b);
583 if res <> FMOD_OK then
584 begin
585 Exit;
586 end;
587 Result := b;
588 }
591 //TODO
593 begin
595 {
596 res := FMOD_Channel_SetMute(FChannel, Enable);
597 if res <> FMOD_OK then
598 begin
599 end;
600 }
603 //TODO
605 begin
608 {
609 res := FMOD_Channel_GetPosition(FChannel, FPosition, FMOD_TIMEUNIT_MS);
610 if res <> FMOD_OK then
611 begin
612 Exit;
613 end;
614 Result := FPosition;
615 }
618 //TODO
620 begin
623 {
624 res := FMOD_Channel_SetPosition(FChannel, FPosition, FMOD_TIMEUNIT_MS);
625 if res <> FMOD_OK then
626 begin
627 end;
628 }
631 //TODO
633 begin
634 {
635 if (FChannel <> nil) and (FPriority <> priority) and
636 (priority >= 0) and (priority <= 256) then
637 begin
638 FPriority := priority;
639 res := FMOD_Channel_SetPriority(FChannel, priority);
640 if res <> FMOD_OK then
641 begin
642 end;
643 end;
644 }