前回はHSPでBASS.dllを呼び出し再生するときに
mp3だけモノラル再生になってしまう問題を質問しました。
そのときは引数が64bitになっていることを考慮してint,intで代用しましたが…
今度はBASS_FX.dllを使ってエフェクトをつけようとした時にエラーが出てきました。
現在はリバーブ(エコー)をつけようと思っています。
そこで、BASS_FXで定義されているリバーブ用の構造体を見た結果、
となっています。
typedef struct { float fDryMix; float fWetMix; float fFeedback; float fDelay; BOOL bStereo; int lChannel; } BASS_BFX_ECHO4;
HSPでは実数型はdoubleしか扱えないので、次のようにしてやってみたのですが
としたとき、
buf=param(1) buf2=BASS_ChannelSetFX(buf,BASS_BFX_ECHO4,0) buf_a(0)=(tofloat(0.999)<<16)|(tofloat(0.999) buf_a(1)=(tofloat(0.7)<<16)|(tofloat(0.5)) buf_a(2)=-1 BASS_FXSetParameters buf2,buf_a ※exint(s1,p1)はs1で記述された文字列を数値式に見立てて演算、p1が1なら実数それ以外なら整数で返す関数 ※param(x)はコンマで区切られたパラメータのような文字列データ、param(1)はhStreamそのまま、param(2〜5)まではそれぞれ数値データが入ってます ※tofloat(x)はhttp://sprocket.babyblue.jp/html/hsp_koneta3.htmを参照のこと
BASS_FXSetParameters buf2,buf_a
を実行した時点でシステムエラーが発生します。
これを
BASS_FXSetParameters buf,buf_a
に変えると、FXのハンドルでは無いためエラーになるのですが
HSPのエラーにはならず、その命令が実行されず処理が続行されます。
…となると問題はbuf_aの構造体になると思うのですが、
1ビットだけ余分なBOOLとか
tofloatでやっつけた実数値とかいろいろ問題がありそうです…。
どのように解決したら良いのでしょう?
もしくは、これはできないのでしょうか…?
ご教授のほどよろしくお願いします。