投稿日 | 17/10/07-15:29 |
---|---|
投稿者 | 陸 |
参照先 | https://riku22.net/ |
こんにちは、お世話になります。
「bass.dll」というDLLを使って、素材リストからメモリにファイルを読み込んで、ファイルを再生できないかと考えています。
それで、下記のようなソースを書いたんですが、うまく動かないようです。
BASSのエラーコードを取得したところ、41が返ってきてるので、読み込んだデータがおかしいのかもしれないんですが、どうしたらいいかわかりません。
何か対処法があれば、教えていただけないでしょうか。
以下、長くなりますが、ソースです。
--------------------
「C:\Windows\media\tada.wav」を素材として利用する
バスを0で初期化する
ストリーム番号は、「tada.wav」でメモリから読み込み
ストリーム番号を表示
[ストリーム番号]をストリーム再生
3秒待つ
[ストリーム番号]を開放
バスを開放する
終了
バスを[ハンドル]で初期化する手順:真偽値
バスは、ネイティブ関数(ファイル名「bass.dll」,関数名「BASS_Init」)を作る
バスの戻り値型は、真偽値
バスの引数型一覧は、{整数, 整数, 整数, 整数, 整数}
バスを{-1, 44100, 0, [ハンドル], 0}で呼び出して結果とする
結果を返す
終わり
[ファイル名]で〈【ストリームフラグ】として〉メモリから読み込みの手順:整数
もしストリームフラグが無なら
ストリームフラグは、0
もし終わり
ストリームは、ネイティブ関数(ファイル名「bass.dll」,関数名「BASS_StreamCreateFile」)を作る
ストリームの戻り値型は、整数
ストリームの引数型一覧は、{真偽値, 文字列, 長整数, 長整数, 「System.UInt32」}
音声内容は、素材リストから「tada.wav」を文字列として取得したもの
ファイルサイズは、音声内容のバイト数
audio=ネイティブ参照(型文字列, 内容[音声内容])を作る
ストリームを{○, audio, 0, [ファイルサイズ], [ストリームフラグ]}で呼び出してストリーム番号とする
エラーコード取得
ストリーム番号を返す
終わり
[ストリーム番号]を〈【ストリーム再生フラグ】で〉ストリーム再生の手順:整数
もしストリーム再生フラグが無なら
ストリーム再生フラグは、○
もし終わり
ストリームは、ネイティブ関数(ファイル名「bass.dll」,関数名「BASS_ChannelPlay」)を作る
ストリームの戻り値型は、整数
ストリームの引数型一覧は、{整数, 真偽値}
ストリームを{[ストリーム番号], [ストリーム再生フラグ]}で呼び出して結果とする
結果を返す
終わり
[ストリーム番号]を開放の手順:真偽値
ストリームは、ネイティブ関数(ファイル名「bass.dll」,関数名「BASS_StreamFree」)を作る
ストリームの戻り値型は、真偽値
ストリームの引数型一覧は、{整数}
ストリームを{ストリーム番号}で呼び出して結果とする
結果を返す
終わり
バスを開放する手順:真偽値
ストリームは、ネイティブ関数(ファイル名「bass.dll」,関数名「BASS_Free」)を作る
ストリームの戻り値型は、真偽値
ストリームの引数型一覧は、{}
ストリームを{}で呼び出して結果とする
結果を返す
終わり
エラーコード取得の手順:整数
ストリームは、ネイティブ関数(ファイル名「bass.dll」,関数名「BASS_ErrorGetCode」)を作る
ストリームの戻り値型は、整数
ストリームの引数型一覧は、{}
ストリームを{}で呼び出してエラーコードとする
エラーコードを表示
エラーコードを返す
終わり
--------------------
以上、よろしくお願いいたします。
投稿日 | 18/01/25-13:25 |
---|---|
投稿者 | ゆうと |
参照先 |
こんにちは ゆうとです。
お返事遅くなりました。
バイナリデータについては、バイナリデータ型のオブジェクトを
ネイティブ関数の「呼び出す」手順の引数にそのまま指定してください。
自動的に、バイナリデータの内容をネイティブ関数用のメモリ領域へコピーして
そのポインタが関数に渡されるようになっています。
添付されていたプログラムでは、まず「素材リストからバイナリ配列として取得」するようにします。(文字列では文字コードの変換が行われるために内容が破損します)
また引数一覧のデータ型には文字列ではなくバイナリデータ型を指定します。それに伴って「バイト数」手順ではなく「長さ」設定項目に変えています。
バイナリデータを引数に指定すると、自動的にポインタが渡されますので、「ネイティブ参照」は必要ありません。(ネイティブ参照を使うと、ポインタのポインタになってしまいます)
修正したプログラムを添付します。最新版1.5.881でお試しください。
--------------------
[ファイル名]で〈【ストリームフラグ】として〉メモリから読み込みの手順:整数
もしストリームフラグが無なら
ストリームフラグは、0
もし終わり
ストリームは、ネイティブ関数(ファイル名「bass.dll」,関数名「BASS_StreamCreateFile」)を作る
ストリームの戻り値型は、整数
ストリームの引数型一覧は、{真偽値, バイナリデータ, 長整数, 長整数, 「System.UInt32」}
音声内容は、素材リストから「tada.wav」をバイナリ配列として取得したもの
ファイルサイズは、音声内容の長さ
//audio=ネイティブ参照(型バイナリデータ, 値[音声内容])を作る
ストリームを{○, 音声内容, 0, ファイルサイズ, ストリームフラグ}で呼び出してストリーム番号とする
エラーコード取得
ストリーム番号を返す
終わり
--------------------
投稿日 | 18/01/27-16:11 |
---|---|
投稿者 | 陸 |
参照先 | https://riku22.net/ |
こんにちは、お世話になります。
対応ありがとうございました。
うまく動きました。
今後ともよろしくお願いいたします。
- WebForum -