basic_sound.pp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. program BasicSound;
  2. {$L build/soundbank.bin.o}
  3. {$mode objfpc}
  4. uses
  5. ctypes, nds9, maxmod9;
  6. const
  7. SFX_AMBULANCE = 0;
  8. SFX_BOOM = 1;
  9. MOD_FLATOUTLIES = 0;
  10. MSL_NSONGS = 1;
  11. MSL_NSAMPS = 33;
  12. MSL_BANKSIZE = 34;
  13. var
  14. soundbank_bin_end: array [0..0] of cuint8; cvar; external;
  15. soundbank_bin: array [0..0] of cuint8; cvar; external;
  16. soundbank_bin_size: cuint32; cvar; external;
  17. ambulance, boom: mm_sound_effect;
  18. amb: mm_sfxhand;
  19. keys_pressed, keys_released: integer;
  20. begin
  21. consoleDemoInit();
  22. mmInitDefaultMem(mm_addr(@soundbank_bin));
  23. // load the module
  24. mmLoad(MOD_FLATOUTLIES);
  25. // load sound effects
  26. mmLoadEffect(SFX_AMBULANCE);
  27. mmLoadEffect(SFX_BOOM);
  28. // Start playing module
  29. mmStart(MOD_FLATOUTLIES, MM_PLAY_LOOP);
  30. with ambulance do
  31. begin
  32. id := SFX_AMBULANCE;
  33. rate := trunc(1.0 * (1 shl 10));
  34. handle := 0;
  35. volume := 255;
  36. panning := 0;
  37. end;
  38. with boom do
  39. begin
  40. id := SFX_BOOM;
  41. rate := trunc(1.0 * (1 shl 10));
  42. handle := 0;
  43. volume := 255;
  44. panning := 255;
  45. end;
  46. // ansi escape sequence to clear screen and home cursor
  47. // /x1b[line;columnH
  48. iprintf(#$1b'[2J');
  49. // ansi escape sequence to set print co-ordinates
  50. // /x1b[line;columnH
  51. iprintf(#$1b'[0;8HMaxMod Audio demo');
  52. iprintf(#$1b'[3;0HHold A for ambulance sound');
  53. iprintf(#$1b'[4;0HPress B for boom sound');
  54. // sound effect handle (for cancelling it later)
  55. amb := 0;
  56. while true do
  57. begin
  58. swiWaitForVBlank();
  59. scanKeys();
  60. keys_pressed := keysDown();
  61. keys_released := keysUp();
  62. // Play looping ambulance sound effect out of left speaker if A button is pressed
  63. if ( keys_pressed and KEY_A ) <> 0 then
  64. begin
  65. amb := mmEffectEx(@ambulance);
  66. end;
  67. // stop ambulance sound when A button is released
  68. if ( keys_released and KEY_A ) <> 0 then
  69. begin
  70. mmEffectCancel(amb);
  71. end;
  72. // Play explosion sound effect out of right speaker if B button is pressed
  73. if ( keys_pressed and KEY_B ) <> 0 then
  74. begin
  75. mmEffectEx(@boom);
  76. end;
  77. end;
  78. end.