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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0505
にゃんちゃんHSPからBASSライブラリを呼び出したときの挙動3解決


にゃんちゃん

リンク

2015/5/5(Tue) 14:49:00|NO.68998

こんにちは。
オーディオ再生ライブラリのBASSを使って音楽プレイヤーを製作中なのですが、BASS_ChannelSetPositionだけが動作しません。
ヘッダ部分は
#cfunc global bass_channelSetPosition "BASS_ChannelSetPosition" int, int, int
で、リファレンスに従ったパラメータを設定して呼び出しているのですが、BASSエラー37(Unavailable type)となってしまいます。
HSP2.6時代にこの関数がランタイムと競合していたような掲示板の過去ログを見ましたが、現在でもこの関数は使用できないのでしょうか?
HSP3以降でBASSの利用経験のある方がいらっしゃいましたら、状況をお知らせいただけると幸いです。よろしくおねがいします。

#uselib "bass.dll" #cfunc global bass_init "BASS_Init" int, int, int, int, int #cfunc global bass_streamCreateFile "BASS_StreamCreateFile" int, sptr, int, int, int #cfunc global bass_streamFree "BASS_StreamFree" int #cfunc global bass_channelPlay "BASS_ChannelPlay" int, int #cfunc global bass_channelPause "BASS_ChannelPause" int #cfunc global bass_ChannelSetAttribute "BASS_ChannelSetAttribute" int, int, float #cfunc global bass_channelIsActive "BASS_ChannelIsActive" int #cfunc global BASS_channelSetPosition "BASS_ChannelSetPosition" int, int, int #cfunc global bass_channelGetPosition "BASS_ChannelGetPosition" int, int #cfunc global bass_channelGetLength "BASS_ChannelGetLength" int, int #cfunc global bass_free "BASS_Free" #cfunc global bass_errorGetCode "BASS_ErrorGetCode" ret=bass_init(-1,44100,0,hwnd,0) filename="test.mp3" handle=bass_streamCreateFile(0,filename,0,0,0) ret=bass_channelSetPosition(handle,1000000,0) dialog ret dialog bass_errorGetCode() ret=bass_channelPlay(handle,0) stop *quit ret=bass_free end



この記事に返信する


にゃんちゃん

リンク

2015/5/5(Tue) 14:51:29|NO.68999

追記です。
友達に頼んでRubyを使って同じ処理をしてみたところ、正常にシークができました。ですので、HSPの問題か、私のヘッダの書き方の問題か、どちらかだと思います。



ぜろ

リンク

2015/5/5(Tue) 16:01:45|NO.69001

BASSと言うライブラリは初めて見るので、使い方は詳しく知らないのですが、
ダウンロードして見てみたところ
BASS_ChannelSetPositionの第2引数が QWORD となっていて、これがint64で定義されている
ようです。したがって、64bit分(HSPのint 2つ分)を第2引数で渡す必要があります。
なので、
#cfunc global BASS_channelSetPosition "BASS_ChannelSetPosition" int, int, int, int
このように定義し、とりあえず上位32bit部分を 0 として
res = bass_channelSetPosition(handle, poss, 0 , 0)
このように呼び出すと良さそうです。
ただし、長い音楽ファイルを再生する場合は上の第2引数と第3引数に渡す値を適宜計算する必要がありそうです。



にゃんちゃん

リンク

2015/5/5(Tue) 16:42:39|NO.69002

ご返信ありがとうございます。
int64、そのとおりでした。今のところは引数を増やすだけで実装できてますが、サンプル数の値が32ビットの範囲を超えてしまうと、ちょっとめんどくさいことになりそうですね。
まぁ、44.1khzだったとしても12時間以上のファイルじゃないかぎりそんなこと起こらないし、そうなったときはそうなったときで考えればいいので、今回は解決とさせていただきます。
ありがとうございました。



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