I just came across this restriction as well XD.
I already thought there was an error in my code, until I read the help carefully ... lol.
Really stupid.
However, does anybody know of a plugin for this?
I'm currently building an archive system within Dark Basic, and of course it should support sound files.
But I think it's a bit odd to extract them as a memblock, since you most likely can't play them back in any program XD.
If the reason for this is really the avoidance of music piracy, may I laugh?
What it really is? May I laugh even louder?
In the time of free internet radio ...
You can download whole music albums in like 10 minutes if you know the correct websites ( no I'm not providing a link XD ) ...
And TGC is concerned that somebody could write a program to steal and save music as .wav!?
Are you serious? XD
I mean ... I don't even XD.
EDIT:
I created this function really quick:
For a slightly updated version
click here.
FUNCTION Save_Sound(Savepath$ AS STRING, SoundID AS INTEGER)
LOCAL dfID, memID, db AS INTEGER
LOCAL memSize, memPtr AS DOUBLE INTEGER
`Values
LOCAL Samplerate, Byterate AS INTEGER
LOCAL Format, Channels, Blockalign, BitsperSample AS WORD
`make memblock
memID = FIND FREE MEMBLOCK()
MAKE MEMBLOCK FROM SOUND memID, SoundID
memSize = GET MEMBLOCK SIZE(memID)
memPtr = GET MEMBLOCK PTR(memID)
`get values
Format = PEEK INTEGER(memptr)
Channels = PEEK INTEGER(memptr+4)
Samplerate = PEEK INTEGER(memPtr+8)
Byterate = PEEK INTEGER(memptr+12)
Blockalign = PEEK INTEGER(memptr+16)
BitsperSample = PEEK INTEGER(memptr+20)
`open file
dfID = FIND FREE DATAFILE()
OPEN DATAFILE TO WRITE dfID, Savepath$
DATAFILE STRING TYPE dfID, 7
`write riff section
WRITE DATAFILE DATASTRING dfID, "RIFF"
WRITE DATAFILE INTEGER dfID, (memSize-28)+36
WRITE DATAFILE DATASTRING dfID, "WAVE"
`write fmt section
WRITE DATAFILE DATASTRING dfID, "fmt "
WRITE DATAFILE INTEGER dfID, 16
WRITE DATAFILE WORD dfID, Format
WRITE DATAFILE WORD dfID, Channels
WRITE DATAFILE INTEGER dfID, Samplerate
WRITE DATAFILE INTEGER dfID, Byterate
WRITE DATAFILE WORD dfID, Blockalign
WRITE DATAFILE WORD dfID, BitsperSample
`write data section
WRITE DATAFILE DATASTRING dfID, "data"
WRITE DATAFILE INTEGER dfID, memSize-28
WRITE DATAFILE MEMORY dfID, memPtr+28, memSize-28
`close
CLOSE DATAFILE dfID
`delete memblock
DELETE MEMBLOCK memID
ENDFUNCTION
The function is working for me.
I would appreciate it if somebody could test this and confirm it's working
.
I don't really know much about different .wav formats, but since I'm reading all the important information from the dark basic
memblock I guess it should work just fine with all .wav files that can be loaded by dark basic.
Feel free to use and/or change it.
If there are any problems with this I'm afraid you have to look into it yourself.
However, if you enhance it, it would be nice of you to post the changed version here.