コード例 #1
0
ファイル: SoundFont.php プロジェクト: yoya/IO_SoundFont
 function parse($sfdata)
 {
     $reader = new IO_Bit();
     $reader->input($sfdata);
     $length = strlen($sfdata);
     $id = $reader->getData(4);
     // 'RIFF'
     if ($id !== 'RIFF') {
         throw new IO_SoundFont_Exception("non RIFF fourcc");
     }
     $size = $reader->getUI32LE();
     if ($length !== $size + 8) {
         fputs(STDERR, "parse: illegal length({$length}) and RIFF size({$size})\n");
     }
     $id = $reader->getData(4);
     // 'sfbk'
     if ($id !== 'sfbk') {
         throw new IO_SoundFont_Exception("non sfbk fourcc");
     }
     $info = $this->parseChunkLIST($reader);
     $sdta = $this->parseChunkLIST($reader);
     $pdta = $this->parseChunkLIST($reader);
     $this->sfbk = array('INFO' => $info, 'sdta' => $sdta, 'pdta' => $pdta);
     return true;
 }
コード例 #2
0
ファイル: Sound.php プロジェクト: yoya/IO_SWF
 function parseContent($tagCode, $content, $opts = array())
 {
     $reader = new IO_Bit();
     $reader->input($content);
     $this->SoundId = $reader->getUI16LE();
     // ---
     $this->SoundFormat = $reader->getUIBits(4);
     $this->SoundRate = $reader->getUIBits(2);
     $this->SoundSize = $reader->getUIBit();
     $this->SoundType = $reader->getUIBit();
     // ---
     $this->SoundSampleCount = $reader->getUI32LE();
     $this->SoundData = $reader->getDataUntil(false);
 }
コード例 #3
0
ファイル: SWF.php プロジェクト: yoya/IO_SWF
 function parse($swfdata)
 {
     $reader = new IO_Bit();
     $reader->input($swfdata);
     $this->_swfdata = $swfdata;
     /* SWF Header */
     $this->_headers['Signature'] = $reader->getData(3);
     $this->_headers['Version'] = $reader->getUI8();
     $this->_headers['FileLength'] = $reader->getUI32LE();
     if ($this->_headers['Signature'][0] == 'C') {
         // CWS の場合、FileLength の後ろが zlib 圧縮されている
         $uncompressed_data = gzuncompress(substr($swfdata, 8));
         if ($uncompressed_data === false) {
             return false;
         }
         list($byte_offset, $dummy) = $reader->getOffset();
         $reader->setOffset(0, 0);
         $swfdata = $reader->getData($byte_offset) . $uncompressed_data;
         $reader = new IO_Bit();
         $reader->input($swfdata);
         $this->_swfdata = $swfdata;
         $reader->setOffset($byte_offset, 0);
     }
     /* SWF Movie Header */
     $this->_headers['FrameSize'] = IO_SWF_Type_RECT::parse($reader);
     $reader->byteAlign();
     $this->_headers['FrameRate'] = $reader->getUI16LE();
     $this->_headers['FrameCount'] = $reader->getUI16LE();
     list($this->_header_size, $dummy) = $reader->getOffset();
     /* SWF Tags */
     while (true) {
         $swfInfo = array('Version' => $this->_headers['Version']);
         $tag = new IO_SWF_Tag($swfInfo);
         $tag->parse($reader);
         $this->_tags[] = $tag;
         if ($tag->code == 0) {
             // END Tag
             break;
         }
     }
     return true;
 }
コード例 #4
0
ファイル: Jpeg.php プロジェクト: yoya/IO_SWF
 function parseContent($tagCode, $content, $opts = array())
 {
     $reader = new IO_Bit();
     $reader->input($content);
     if ($tagCode != 8) {
         // ! JPEGTable
         $this->_CharacterID = $reader->getUI16LE();
     }
     if ($tagCode == 35) {
         // DefgineBitsJPEG3
         $alphaDataOffset = $reader->getUI32LE();
         $this->_AlphaDataOffset = $alphaDataOffset;
     }
     if ($tagCode != 35) {
         // ! DefgineBitsJPEG3
         $this->_JPEGData = $reader->getDataUntil(false);
     } else {
         $this->_JPEGData = $reader->getData($alphaDataOffset);
         $this->_ZlibBitmapAlphaData = $reader->getDataUntil(false);
     }
 }
コード例 #5
0
ファイル: Chunk.php プロジェクト: yoya/IO_SoundFont
 function parseChunkData()
 {
     if (isset($this->detail)) {
         return;
     }
     $detailData = array();
     $id = $this->id;
     $reader = new IO_Bit();
     $reader->input($this->data);
     $this->data = null;
     // XXX
     switch ($id) {
         // INFO sub-chunks
         case 'ifil':
             $detailData['sfVersionMajor'] = $reader->getUI16LE();
             $detailData['sfVersionMinor'] = $reader->getUI16LE();
             break;
         case 'INAM':
             $detailData['sfName'] = $this->data;
             // String
             break;
         case 'isng':
             $detailData['sfEngine'] = $this->data;
             // String
             break;
         case 'IENG':
             $detailData['sfEngineers'] = $this->data;
             // String
             break;
         case 'ISFT':
             $detailData['sfTools'] = $this->data;
             // String
             break;
         case 'ICMT':
             $detailData['Comments'] = $this->data;
             // String
             break;
         case 'ICOP':
             $detailData['Copyright'] = $this->data;
             // String
             break;
             // sdta sub-chunks
         // sdta sub-chunks
         case 'smpl':
             $detailData['Samples'] = $this->data;
             // String
             break;
             // pdta sub-chunks
         // pdta sub-chunks
         case 'phdr':
             $detailData = array();
             while ($reader->hasNextData()) {
                 $preset = array();
                 $presetName = explode("", $reader->getData(20));
                 $preset['PresetName'] = $presetName[0];
                 $preset['Preset'] = $reader->getUI16LE();
                 $preset['Bank'] = $reader->getUI16LE();
                 $preset['PresetBagNdx'] = $reader->getUI16LE();
                 $preset['Library'] = $reader->getUI32LE();
                 $preset['Genre'] = $reader->getUI32LE();
                 $preset['MorphologyGenre'] = $reader->getUI32LE();
                 $detailData[] = $preset;
             }
             break;
         case 'pbag':
             $detailData = array();
             while ($reader->hasNextData()) {
                 $presetBag = array();
                 $presetBag['GenNdx'] = $reader->getUI16LE();
                 $presetBag['ModNdx'] = $reader->getUI16LE();
                 $detailData[] = $presetBag;
             }
             break;
         case 'pmod':
         case 'imod':
             $detailData = array();
             while ($reader->hasNextData()) {
                 $sfMod = array();
                 $sfMod['sfModSrcOper'] = IO_SoundFont_Modulator::parse($reader);
                 $sfMod['sfModDestOper'] = $reader->getUI16LE();
                 $sfMod['modAmount'] = $reader->getSI16LE();
                 $sfMod['sfModAmtSrcOper'] = IO_SoundFont_Modulator::parse($reader);
                 $sfMod['sfModTransOper'] = $reader->getUI16LE();
                 $detailData[] = $sfMod;
             }
             break;
         case 'pgen':
         case 'igen':
             $detailData = array();
             while ($reader->hasNextData()) {
                 $detailData[] = IO_SoundFont_Generator::parse($reader);
             }
             break;
         case 'inst':
             $detailData = array();
             while ($reader->hasNextData()) {
                 $sfInst = array();
                 $InstName = explode("", $reader->getData(20));
                 $sfInst['InstName'] = $InstName[0];
                 $sfInst['InstBagNdx'] = $reader->getSI16LE();
                 $detailData[] = $sfInst;
             }
             break;
         case 'ibag':
             $detailData = array();
             while ($reader->hasNextData()) {
                 $presetBag = array();
                 $presetBag['GenNdx'] = $reader->getUI16LE();
                 $presetBag['ModNdx'] = $reader->getUI16LE();
                 $detailData[] = $presetBag;
             }
             break;
         case 'shdr':
             $detailData = array();
             while ($reader->hasNextData()) {
                 $sfSample = array();
                 $SampleName = explode("", $reader->getData(20));
                 $sfSample['SampleName'] = $SampleName[0];
                 $sfSample['Start'] = $reader->getUI32LE();
                 $sfSample['End'] = $reader->getUI32LE();
                 $sfSample['StartLoop'] = $reader->getUI32LE();
                 $sfSample['EndLoop'] = $reader->getUI32LE();
                 $sfSample['SampleRate'] = $reader->getUI32LE();
                 $sfSample['OriginalPitch'] = $reader->getUI8();
                 $sfSample['PitchCorrection'] = $reader->getSI8();
                 $sfSample['SampleLink'] = $reader->getUI16LE();
                 $sfSample['SampleType'] = $reader->getUI16LE();
                 $detailData[] = $sfSample;
             }
             break;
         default:
             return;
             // nothing to do
             break;
     }
     $this->detail = $detailData;
 }