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


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
1219
ハリサカDXライブラリ for HSP の音声再生について3解決


ハリサカ

リンク

2024/12/19(Thu) 20:54:21|NO.102742

こんにちは。 DxLib for HSP についての質問です。
図形、画像や、3D表示の部分は正常に動作しておりますが、
音声に関してのみ、単純に音声ファイルを読み込み、再生するということだけが
うまく行きません。

具体的にいうと
その場でロード、再生する
PlaySoundFile は正常に音を再生してくれますが。

LoadSoundMem で音声をロードし、
PlaySoundMem で再生しようとすると、音が鳴りません。
音声ハンドル番号も -1 ではないため、ロード自体はうまく行っている様子です。

DXLib C#版、DXLib for HSP 共に最新版を使用。過去バージョンもいくつか試しましたが同様です。

↓検証用の、問題の部分をのみの、各ファイルになります。よろしくお願いいたします
https://www.axfc.net/u/4086424



この記事に返信する


TOMATO

リンク

2024/12/19(Thu) 23:29:44|NO.102743

C#上の定義は以下になっており、


[DllImport("DxLib.dll", EntryPoint="dx_LoadSoundMem", CallingConvention=CallingConvention.StdCall)] extern static int dx_LoadSoundMem_x86( string FileName, int BufferNum, int UnionHandle); [DllImport("DxLib_x64.dll", EntryPoint="dx_LoadSoundMem", CallingConvention=CallingConvention.StdCall)] extern static int dx_LoadSoundMem_x64( string FileName, int BufferNum, int UnionHandle); public static int LoadSoundMem( string FileName) { if( System.IntPtr.Size == 4 ) { return dx_LoadSoundMem_x86( FileName , 3 , -1 ); } else { return dx_LoadSoundMem_x64( FileName , 3 , -1 ); } } public static int LoadSoundMem( string FileName, int BufferNum) { if( System.IntPtr.Size == 4 ) { return dx_LoadSoundMem_x86( FileName , BufferNum , -1 ); } else { return dx_LoadSoundMem_x64( FileName , BufferNum , -1 ); } } public static int LoadSoundMem( string FileName, int BufferNum, int UnionHandle) { if( System.IntPtr.Size == 4 ) { return dx_LoadSoundMem_x86( FileName , BufferNum , UnionHandle ); } else { return dx_LoadSoundMem_x64( FileName , BufferNum , UnionHandle ); } }

HSPから使用するには、

sndHnd = LoadSoundMem( "ファイルパス", 3, -1 )

と記述するのが正しいのかと思われます。
BufferNumとUnionHandleがなんやねん…って感じですが。



ハリサカ

リンク

2024/12/20(Fri) 19:15:03|NO.102745

TOMATOさん回答を下さり、ありがとうございました。

引数を書く必要があったのですね
c#定義部分も解決策も
正直自分にはスキル的に理解が及ばない部分ですが…

無事音は鳴りました。が、左キーを何度も押して再生すると、
急に鳴らなくなったりで、やはりまだ自分には敷居が高いようです。

今回の助言を受けた上で、またいろいろ試してみようと思います。
一度、解決チェックさせて頂きますね。 本当にありがとうございます。



ハリサカ

リンク

2024/12/22(Sun) 18:53:33|NO.102767

いろいろ試してみた結果、音声について解決しましたのでご報告させて頂きます。

音声ロード時には、TOMATOさんに教えてくださった通り、以下のようにし
( 3 は音声重ね合わせ最大数の様で、省略してしまうと 0 扱いになり鳴らなかったようです。 )

sndHnd = LoadSoundMem( "ファイルパス", 3, -1 )


さらに再生時に 第3引数を 省略せずに指定する事で、再生も、重ね合わせ再生もうまく行きました
DXマニュアルでは省略すると TRUE になるとあり、省略してしまっておりましたが、
デフォルト引数とかまで HSP側で勝手に機能していると思い込んでおりました。

PlaySoundMem sndHnd00, DX_PLAYTYPE_BACK, TRUE



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.102742への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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