--!movie
--!encoding=utf-8
-- ************************************************************************
-- Software: SOUND MEMBER EXPORTER
-- Version: 0.2 - D11.5+ version
-- Date: 2015-08-12
-- Author: Valentin Schmidt
--
-- Requirements/Dependencies:
-- * Xtra "FileIO"
-- * Xtra "Crypto" (http://valentin.dasdeck.com/xtras/crypto_xtra/win/d11.5/)
-- * Xtra "MP3Xtra" (http://valentin.dasdeck.com/xtras/mp3_xtra/win/)
--
-- Usage:
-- ok = exportSound (member("wav"), _movie.path, "mysound")
-- ok = exportSound (member("mp3"), _movie.path)
-- ok = exportSound (member("swa"), _movie.path)
--
-- ************************************************************************
----------------------------------------
-- Exports internal sound member as file
-- Compressed members are exported as MP3 or SWA, uncompressed members as WAV files
--
-- @param {string} tMemRef
-- @param {string} tFolder
-- @param {string} [tBaseName] - optional, if omitted, memberName is used
-- @return {bool} success
----------------------------------------
on exportSound (tMemRef, tFolder, tBaseName)
if tMemRef.type<>#sound then return false
if voidP(tBaseName) then tBaseName = tMemRef.name
pd = the last char of _movie.path
if the last char of tFolder<>pd then put pd after tFolder
ok = false
data = cx_member_to_bytes(tMemRef, TRUE)
useCompressed = false
if data.length>=25 then useCompressed = (data[25]>0)
if useCompressed then
data.position = 29
dataType = data.readRawString(data[25])
data.position = data.position+8
case (dataType) of
"kMoaCfFormat_MPEG3": -- EXPORT AS MP3
len = data.readInt32()
ok = file_put_bytes(tFolder&tBaseName&".mp3", data.readByteArray(len))
"kMoaCfFormat_SWA": -- EXPORT AS SWA
len = data.readInt32()
ok = file_put_bytes(tFolder&tBaseName&".swa", data.readByteArray(len))
end case
else -- EXPORT AS WAV
mx = xtra("MP3Xtra").new()
ok = mx.mem2wav(tMemRef, tFolder&tBaseName&".wav")
mx = 0
end if
return ok
end
----------------------------------------
-- Saves byteArray as file
-- @param {string} tFile
-- @param {byteArray} tByteArray
-- @return {bool} success
----------------------------------------
on file_put_bytes (tFile, tByteArray)
fp = xtra("fileIO").new()
fp.openFile(tFile, 1)
err = fp.status()
if (err=0) then fp.delete()
else if (err <> -37) then return false
fp.createFile(tFile)
err = fp.status()
if (err<>0) then return false
fp.openFile(tFile, 2)
err = fp.status()
if (err<>0) then return false
ok = fp.writeByteArray(tByteArray)
fp.closeFile()
fp = 0
return (err=0)
end