• MP3のファイル構造やデコード方法の仕様書がみつからん。。ソースはあるんだけど。↓他力本願の方が速そうだな。。
    • WinAmpDSPプラグインDFX Audio Enhancerを以下でドライブさせればD.I.の96Kbpsな音楽をコマンドラインから高音質化できるかな?でも、 mp3 -> wav -> (DSP) -> wav -> mp3(128Kbps) ってなんか劣化しまくりそうだなぁ。。

;
; WINAMPDSPHSPで使ってみようモジュール。
; by 月影とも
;

#include "llmod.as"
#module "dsp"

;二重ロード防止
#deffunc dspClose onexit
if hDllDsp == 0 : return
ll_peek4 tmp, pDMod+24:ll_callfunc pDMod,1,tmp ;d->Quit(pDMod);
ll_libfree hDllDsp;
hDllDsp = 0;
return


;DSP/EFFECTプラグイン初期化
#deffunc dspLoad str,int
mref path,32 ;p1 = dllのファイル名
mref type,1 ;p2 = dsptype

mref bmscr,67:hWnd = bmscr.13;

dspClose
ll_libload hDllDsp, path

;DSPは1つのファイルに複数モジュールが組めるみたい?
;構造体の中身はWinampSDKのDSP.Hを参照
dllproc "winampDSPGetHeader2",prm,0,hDllDsp

pDHed = dllret@
;よって2段構え。
ll_peek4 tmp, pDHed+8:ll_callfunc type,1,tmp ;d->getModule();

pDMod = dllret@
if(pDMod == NULL){
dialog "インデックス:"+type+" にはDSPがありません",1,"えらー"
return
}

ll_poke4 hWnd, pDMod+4 ;HWND hMainWindow;
ll_poke4 hDllDsp, pDMod+8 ;HINSTANCE hDllInstance;
ll_peek4 tmp, pDMod+16 :ll_callfunc pDMod,1,tmp ;d->Init(pDMod);

return

;コンフィグ画面の表示
#deffunc dspConfig
ll_peek4 tmp, pDMod+12:ll_callfunc pDMod,1,tmp ;d->Config(pDMod);
return

;サンプル加工
#deffunc dspModify val,int,int,int,int
mref rawpcm,56 ;v1 = short int *samples, // ← PCMデータの入っている文字列型配列変数
mref length,1 ;n2 = int numsamples, // ←チャンネルあたりのサンプル数
mref bitrate,2 ;n3 = int bps, // ← ビットレート ex) 16bit / 8bit per smpl
mref channels,3 ;n4 = int nch, // ← チャンネル数 ex) Mono:1 Stereo:2 たくさん:n
mref freq,4 ;n5 = int srate // ← サンプリングレート ex) 44100 とか。
mref ret,64 ;戻り値 = 変換後のPCMデータサイズ

prm.0 = pDMod
getptr prm.1, rawpcm
prm.2 = length
prm.3 = bitrate
prm.4 = channels
prm.5 = freq

ll_peek4 tmp, pDMod+20:ll_callfunc prm,6,tmp
;d->ModifySamples(
; struct winampDSPModule *this_mod, // ← pDMod を渡す
; short int *samples, // ← PCMデータのポインタ
; int numsamples, // ←チャンネルあたりのサンプル数
; int bps, // ← ビットレート ex) 16bit / 8bit
; int nch, // ← チャンネル数 ex) Mono:1 Stereo:2 たくさん:n
; nt srate // ← サンプリングレート ex) 44100 とか。
;);
ret = dllret@
return

#global

;///////////////////////////////////////////////////////////////////////////////
;////
;//// さんぷるすくりぷと。突貫で汚いけど許して
;////
;///////////////////////////////////////////////////////////////////////////////
#if 0 ;← 1 にすると走るょ

#define SMPLFILE windir+"\\media\\The Microsoft Sound.wav"
#const SMPLFREQ 22050
#const SMPLSEC 7
#const SMPLCH 1
#const SMPLBR 8

;DSPプラグインのロード
dspLoad "C:\\Program Files\\Winamp\\Plugins\\dsp_sps.dll",0
;s1 = ファイル名
;n2 = DSPインデクス(1つのdllに複数のDSPを含めることができるため)

;コンフィグ画面を表示
dspConfig

pos 10,10:objsize 128,:width 148,44
button "modify / play",*excute

;WAVEデバイスを用意しておいてみる
ll_libload hDllWINMM,"winmm.dll"
wfx= SMPLCH<<16|1,SMPLFREQ,SMPLFREQ*SMPLCH*SMPLBR/8,SMPLBR<<16|SMPLCH*SMPLBR/8,40
prm.0 = 0,-1,0,0,0,0
getptr prm.0,hwo
getptr prm.2,wfx
dllproc "waveOutOpen",prm,6,hDllWINMM

stop