#include "llmod.as" ;午後のこ〜だDLL(http://member.nifty.ne.jp/~pen/) ;をHSPから使うモジュール Ver 0.1.1 ;llmodが必要です ;こんなガラクタを使う人は居ないだろうけど、 ;ソフトに組みこむ場合は、 ;http://member.nifty.ne.jp/~pen/free/windows/gogohelp/index.html ;ココの『諸注意』を熟読して下さい。 ;使い方 ; ; GOGO_load ; でDLLをロード(statが-1なら未インストール)。 ; ; GOGO_getVer val(数値型 16進), val(文字列型 Ver+日付) ; でVer情報を取得 ; ; GOGO_init ; でエンコーダを初期化して、 ; ; GOGO_setInputFile val(ファイル名) ; でPCMファイルを指定、 ; ; GOGO_setOutputFile val(ファイル名) ; でMP3ファイルを指定、 ; ; GOGO_setEncodeMode int(#define MC_ENCODEを参照) ; でエンコードモードを指定、 ; ; 設定終了後には必ず ; GOGO_detectConfig ; で設定を確定、 ; ; repeat ; GOGO_processFrame ; if stat=ME_EMPTYSTREAM { ;ストリームが最後に達したら ; break ; } else { ; if stat!0:dialog "エラーが出ました",1:err=1:break ; } ; loop ; ; GOGO_processFrameは1フレームのみのエンコードを行うので、 ; こんな風に、statがME_EMPTYSTREAMになるまでrepeatさせる。 ; ; もう一度他のファイルをエンコードする時は、 ; GOGO_close→GOGO_initで再初期化。 ; ; 終了する時は、 ; GOGO_close→GOGO_end。 ; DLLの開放は自動で行われるらしいから、 ; 自分で初期化したDLLワークエリアを片付けること。 ; ; 解説してない命令がありますが、 ; 適当に探してみて下さい。 #define ME_NOERR 0 ; return normally;正常終了 #define ME_EMPTYSTREAM 1 ; stream becomes empty;ストリームが最後に達した #define ME_HALTED 2 ; stopped by user;(ユーザーの手により)中断された #define ME_INTERNALERROR 10 ; internal error; 内部エラー #define ME_PARAMERROR 11 ; parameters error;設定でパラメーターエラー #define ME_NOFPU 12 ; no FPU;FPUを装着していない!! #define ME_INFILE_NOFOUND 13 ; can't open input file;入力ファイルを正しく開けない #define ME_OUTFILE_NOFOUND 14 ; can't open output file;出力ファイルを正しく開けない #define ME_FREQERROR 15 ; frequency is not good;入出力周波数が正しくない #define ME_BITRATEERROR 16 ; bitrate is not good;出力ビットレートが正しくない #define ME_WAVETYPE_ERR 17 ; WAV format is not good;ウェーブタイプが正しくない #define ME_CANNOT_SEEK 18 ; can't seek;正しくシーク出来ない #define ME_BITRATE_ERR 19 ; only for compatibility;ビットレート設定が正しくない #define ME_BADMODEORLAYER 20 ; mode/layer not good;モード・レイヤの設定異常 #define ME_NOMEMORY 21 ; fail to allocate memory;メモリアローケーション失敗 #define ME_CANNOT_SET_SCOPE 22 ; thread error;スレッド属性エラー(pthread only) #define ME_CANNOT_CREATE_THREAD 23 ; fail to create thear;スレッド生成エラー #define ME_WRITEERROR 24 ; lock of capacity of disk;記憶媒体の容量不足 #define MC_INPUTFILE 1 #define MC_INPDEV_FILE 0 ; input device is file;入力デバイスはファイル #define MC_INPDEV_STDIO 1 ; stdin;入力デバイスは標準入力 #define MC_INPDEV_USERFUNC 2 ; defined by user;入力デバイスはユーザー定義 #define MC_OUTPUTFILE 2 #define MC_OUTDEV_FILE 0 ; output device is file;出力デバイスはファイル #define MC_OUTDEV_STDOUT 1 ; stdout; 出力デバイスは標準出力 #define MC_OUTDEV_USERFUNC 2 ; defined by user;出力デバイスはユーザー定義 #define MC_OUTDEV_USERFUNC_WITHVBRTAG 3 ; defined by user;入力デバイスはユーザー定義/VBRタグ書き出し #define MC_ENCODEMODE 3 #define MC_MODE_MONO 0 ; mono;モノラル #define MC_MODE_STEREO 1 ; stereo;ステレオ #define MC_MODE_JOINT 2 ; joint-stereo;ジョイント #define MC_MODE_MSSTEREO 3 ; mid/side stereo;ミッドサイド #define MC_MODE_DUALCHANNEL 4 ; dual channel;デュアルチャネル #define MC_BITRATE 4 #define MC_INPFREQ 5 #define MC_OUTFREQ 6 #define MC_STARTOFFSET 7 #define MC_USEPSY 8 #define MC_USELPF16 9 #define MC_USEMMX 10 ; MMX #define MC_USE3DNOW 11 ; 3DNow! #define MC_USEKNI 12 ; SSE(KNI) #define MC_USEE3DNOW (13) ; Enhanced 3D Now! #define MC_USESPC1 14 ; special switch for debug #define MC_USESPC2 15 ; special switch for debug #define MC_ADDTAG 16 #define MC_EMPHASIS 17 #define MC_EMP_NONE 0 ; no empahsis;エンファシスなし(dflt) #define MC_EMP_5015MS 1 ; 50/15ms ;エンファシス50/15ms #define MC_EMP_CCITT 3 ; CCITT ;エンファシスCCITT #define MC_VBR 18 #define MC_CPU 19 #define MC_BYTE_SWAP 20 #define MC_8BIT_PCM 21 #define MC_MONO_PCM 22 #define MC_TOWNS_SND 23 #define MC_THREAD_PRIORITY 24 #define MC_READTHREAD_PRIORITY 25 #define MC_OUTPUT_FORMAT 26 #define MC_OUTPUT_NORMAL 0 ; mp3+TAG(see MC_ADDTAG) #define MC_OUTPUT_RIFF_WAVE 1 ; RIFF/WAVE #define MC_OUTPUT_RIFF_RMP 2 ; RIFF/RMP #define MC_RIFF_INFO 27 #define MC_VERIFY 28 #define MC_OUTPUTDIR 29 #define MC_VBRBITRATE 30 #define MC_ENHANCEDFILTER 31 ; para1 LPF1 (0-100) ; para2 LPF2 (0-100) #define MC_MSTHRESHOLD 32 #define MC_LANG 33 #define MG_INPUTFILE 1 ; name of input file ;入力ファイル名取得 #define MG_OUTPUTFILE 2 ; name of output file;出力ファイル名取得 #define MG_ENCODEMODE 3 ; type of encoding ;エンコードモード #define MG_BITRATE 4 ; bitrate ;ビットレート #define MG_INPFREQ 5 ; input frequency ;入力周波数 #define MG_OUTFREQ 6 ; output frequency ;出力周波数 #define MG_STARTOFFSET 7 ; offset of input PCM;スタートオフセット #define MG_USEPSY 8 ; psycho-acoustics ;心理解析を使用する/しない #define MG_USEMMX 9 ; MMX #define MG_USE3DNOW 10 ; 3DNow! #define MG_USEKNI 11 ; SSE(KNI) #define MG_USEE3DNOW 12 ; Enhanced 3DNow! #define MG_USESPC1 13 ; special switch for debug #define MG_USESPC2 14 ; special switch for debug #define MG_COUNT_FRAME 15 ; amount of frame #define MG_NUM_OF_SAMPLES 16 ; number of sample for 1 frame;1フレームあたりのサンプル数 #define MG_MPEG_VERSION 17 ; MPEG VERSION #define MG_READTHREAD_PRIORITY 18 ; thread priority to read for BeOS #module "gogohsp" #deffunc GOGO_load mref stt,64 ll_libload@ gogo,"gogo.dll" if gogo=0:stt=-1 return #deffunc GOGO_getVer val,val mref stt,64 mref vercode,16 mref verstr,25 getptr pm.0,vercode getptr pm.1,verstr dllproc "MPGE_getVersion",pm,2,gogo stt=dllret@ return #deffunc GOGO_init dllproc "MPGE_initializeWork",pm,0,gogo stt=dllret@ return #deffunc GOGO_setInputFile val mref inputfile,24 mref stt,64 pm.0=MC_INPUTFILE@ pm.1=MC_INPDEV_FILE@ getptr pm.2,inputfile dllproc "MPGE_setConfigure",pm,3,gogo stt=dllret@ return #deffunc GOGO_setOutputFile val mref outputfile,24 mref stt,64 pm.0=MC_OUTPUTFILE@ pm.1=MC_OUTDEV_FILE@ getptr pm.2,outputfile dllproc "MPGE_setConfigure",pm,3,gogo stt=dllret@ return #deffunc GOGO_setEncodeMode int mref encodemode,0 mref stt,64 pm.0=MC_ENCODEMODE@ pm.1=encodemode pm.2=0 dllproc "MPGE_setConfigure",pm,3,gogo stt=dllret@ return #deffunc GOGO_setBitRate int mref bitrate,0 mref stt,64 pm.0=MC_BITRATE@ pm.1=bitrate pm.2=0 dllproc "MPGE_setConfigure",pm,3,gogo stt=dllret@ return #deffunc GOGO_setInFreq int mref infreq,0 mref stt,64 pm.0=MC_INFREQ@ pm.1=infreq pm.2=0 dllproc "MPGE_setConfigure",pm,3,gogo stt=dllret@ return #deffunc GOGO_setOutFreq int mref outfreq,0 mref stt,64 pm.0=MC_OUTFREQ@ pm.1=outfreq pm.2=0 dllproc "MPGE_setConfigure",pm,3,gogo stt=dllret@ return #deffunc GOGO_setUsePsy int mref usepsy,0 mref stt,64 pm.0=MC_USEPSY@ pm.1=usepsy pm.2=0 dllproc "MPGE_setConfigure",pm,3,gogo stt=dllret@ return #deffunc GOGO_detectConfig mref stt,64 dllproc "MPGE_detectConfigure",pm,0,gogo stt=dllret@ return #deffunc GOGO_getFrame val mref frame,16 mref stt,64 pm.0=MG_COUNT_FRAME@ getptr pm.1,frame dllproc "MPGE_getConfigure",pm,2,gogo stt=dllret@ return #deffunc GOGO_processFrame dllproc "MPGE_processFrame",pm,0,gogo stt=dllret@ return #deffunc GOGO_close dllproc "MPGE_closeCoder",pm,0,gogo return #deffunc GOGO_end dllproc "MPGE_endCoder",pm,0,gogo return #global ;-------------------------サンプル GOGO_load:if stat=-1:dialog "GOGO.dllがありません",1:end dim ver_c,24 sdim ver_s,256 GOGO_getVer ver_c,ver_s ;なんかstr命令が挙動不審。オプションを26以上にすると意味不明な文字列を出す str ver_c, 25 int ver_c dialog ""+ver_s+"\nでエンコード処理を行います" GOGO_init:if stat!0:dialog "初期化に失敗しました",1:end dialog "wav",16,"サウンドファイル":if stat=0:goto *cleanup sdim infile,256 infile=refstr GOGO_setInputFile infile dialog "mp3",17,"サウンドファイル":if stat=0:goto *cleanup sdim outfile,256 outfile=refstr GOGO_setOutputFile outfile GOGO_detectConfig GOGO_getFrame frame:frame++ repeat GOGO_processFrame if stat=ME_EMPTYSTREAM : break : else { if stat!0:dialog "エラーが発生しました",1:goto *cleanup } title ""+cnt+"/"+frame loop dialog "エンコード処理が完了しました" *cleanup GOGO_close GOGO_end