HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0509
syHSPでの構造体の取り扱いについて4解決


sy

リンク

2009/5/9(Sat) 15:53:07|NO.25066

HSPからFMOD(http://www.fmod.org/)という音楽ライブラリを使おうとして
思考錯誤しているものです。
DLLに渡す構造体についての質問です。

DLLのリバーブをかける関数に次のような構造体へのポインタを渡したいと思っています。

typedef struct { int Instance; int Environment; float EnvSize; float EnvDiffusion; int Room; int RoomHF; int RoomLF; float DecayTime; float DecayHFRatio; float DecayLFRatio; int Reflections; float ReflectionsDelay; float ReflectionsPan[3];   (以下略)
構造体のメンバは全部で27個、int, float, float [] のいずれかなので
HSPでは次のように書いてみました。
tofloat()はhttp://sprocket.babyblue.jp/html/hsp_koneta3.htm#tofloatを使っています。

dim zero, 3 : zero = tofloat(0.0f), tofloat(0.0f), tofloat(0.0f) dim myEffect, 27 myEffect(0) = 0, 3, tofloat(1.4f), tofloat(1.00f), -1000 myEffect(5) = -1200, 0, tofloat(1.49f), tofloat(0.54f), tofloat(1.0f) myEffect(10) = -370, tofloat(0.007f), varptr(zero), 1030, tofloat(0.011f) (以下略)
関数にはvarptr(myEffect)で渡してみたところ、DLLからの戻り値は正常終了です。
が、実際にCでこの関数を使ってみたときとは違って、HSPから渡すと雑音が混じる感じです。

何かがおかしいのですが私にはそれがわかりません。
どなたか何かお気づきの点はありませんか?

完全なソースは下記にアップしています。
http://cid-907bc41f33448098.skydrive.live.com/self.aspx/.Public/fmod-test.zip

長文失礼しました。



この記事に返信する


moa

リンク

2009/5/10(Sun) 00:35:58|NO.25086

ちょっと見ただけだが構造体のメンバの解釈に誤解があるみたい
>// 構造体の途中で出てくる{0.0f, 0.0f, 0.0f}用
>dim zero, 3
>zero = tofloat(0.0f), tofloat(0.0f), tofloat(0.0f)
>// エフェクト本体
>dim myEffect, 27
>略
>myEffect(10) = -370, tofloat(0.007f), varptr(zero), 1030, tofloat(0.011f)
varptrじゃなくて普通に並べる。
だから dim myEffect, 31 が正解。



sy

リンク

2009/5/10(Sun) 06:13:05|NO.25090

>varptrじゃなくて普通に並べる。
>だから dim myEffect, 31 が正解。
できました!
エラーも何も出なかったのでてっきりあれでいいんじゃないかと思っていました(笑

本当にありがとうございます。



sy

リンク

2009/5/10(Sun) 17:44:31|NO.25096

解決チェック忘れたので。



sy

リンク

2009/5/10(Sun) 17:45:57|NO.25097

解決チェックしても未解決のまま・・・
なぜ?



ONION software Copyright 1997-2023(c) All rights reserved.