Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Testing Impulse Tracker music file PCM creation and playback
#1
Music 
A silly program to test Impulse Tracker module playback, and PCM data creation from it on QB64 Phoenix Edition v3.1:
Code: (Select All)
option _explicit
dim afile$, soundf as long
$IF 64BIT THEN
dim as _integer64 soundbg, soundsz, c
$ELSE
dim as long soundbg, soundsz, c
$END IF
dim b as _mem, bb as _byte, h as _byte
dim sacr$(1 to 10)

randomize (timer mod 16)

afile$ = "retro_expirement.it"
print "Please wait, loading song:"
print afile$
soundf = _sndopen(afile$)
if soundf = -1 then print "Failed to open tracker music.": end
b = _memsound(soundf, 1)
soundbg = ConvertOffset(b.OFFSET)
soundsz = ConvertOffset(b.OFFSET + b.SIZE)
soundsz = soundsz - soundbg
c = 0
h = 1
sacr$(h) = space$(3998)
_sndplay soundf

do while c < soundsz
    bb = _memget(b, b.OFFSET + c, _byte)
    if bb < 32 then bb = 95
    mid$(sacr$(h), p, 1) = chr$(bb)
    p = p + 1
    if p > 3998 then
        p = 1
        h = h + 1
        if h > 10 then exit do
        sacr$(h) = space$(3998)
    end if
    c = c + 1
loop

do
    _limit 10
    locate 1, 1
    print sacr$(int(rnd * 10 + 1));
    if not _sndplaying(soundf) then exit do
loop until _keydown(27)
_sndstop soundf
_sndclose soundf
system

FUNCTION ConvertOffset&& (value AS _OFFSET)
$CHECKING:OFF
DIM m AS _MEM 'Define a memblock
m = _MEM(value) 'Point it to use value
$IF 64BIT THEN
    dim i64ret as _integer64
    'On 64 bit OSes, an OFFSET is 8 bytes in size.  We can put it directly into an Integer64
    _MEMGET m, m.OFFSET, i64ret 'Get the contents of the memblock and put the values there directly into ConvertOffset&&
    ConvertOffset&& = i64ret
$ELSE
    dim temp&
    'However, on 32 bit OSes, an OFFSET is only 4 bytes.  We need to put it into a LONG variable first
    _MEMGET m, m.OFFSET, temp& 'Like this
    ConvertOffset&& = temp& 'And then assign that long value to ConvertOffset&&
$END IF
_MEMFREE m 'Free the memblock
$CHECKING:ON
END FUNCTION

Download the Impulse Tracker music file from here:

https://modarchive.org/module.php?189056

Press [ESC] to quit the program.

Create executable and copy the IT file you downloaded into the same folder. I'm sorry about hardwiring the value of "afile$". This should work with any module format, the problem is that the longer the song file is, the longer "_SNDOPEN" takes to load it into RAM. Now this could apply to music tracker modules despite their usually being much smaller than MP3 and WAV and formats like that.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Simple finance tracker program Delsus 0 517 06-15-2025, 08:02 AM
Last Post: Delsus
  pan around a large image for video creation hsiangch_ong 0 503 01-09-2025, 01:32 AM
Last Post: hsiangch_ong
  Dancing Tesla Coil To Music SierraKen 4 1,254 08-16-2024, 11:55 PM
Last Post: SierraKen
Star GPT-4o - BBOX Mouse States - Experiment with a diagram to hint at creation of code. grymmjack 10 2,455 08-10-2024, 04:36 PM
Last Post: Pete
Video PLAY music grid wiki example code review grymmjack 2 816 06-13-2023, 01:19 AM
Last Post: bplus

Forum Jump:


Users browsing this thread: 1 Guest(s)