Nagarei / DxLibEx

DXライブラリC++化プロジェクト
Boost Software License 1.0
31 stars 3 forks source link

Sound c dev #53

Open yumetodo opened 8 years ago

yumetodo commented 8 years ago

サウンド系クラスを作る

42

yumetodo commented 8 years ago

なんでUDL見つからないってなるんだろう、VSだと。Clang with Microsoft CodeGenだと通るんだけどなぁ

1>------ ビルド開始: プロジェクト:sound_play, 構成:Debug Win32 ------
1>  main.cpp
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(6): error C3688: リテラル サフィックス '_dB' が無効です。リテラル演算子またはリテラル演算子テンプレート 'operator ""_dB' が見つかりません
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(6): error C2789: 'rate': const で修飾された型のオブジェクトは初期化する必要があります
1>  c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(6): note: 'rate' の宣言を確認してください
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(7): error C3688: リテラル サフィックス '_myrioB' が無効です。リテラル演算子またはリテラル演算子テンプレート 'operator ""_myrioB' が見つかりません
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(7): error C2789: 'rate2': const で修飾された型のオブジェクトは初期化する必要があります
1>  c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(7): note: 'rate2' の宣言を確認してください
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(8): error C3536: 'rate': 初期化前に使用することはできません
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(8): error C2672: 'dxle::sound_units::bel_cast': 一致するオーバーロードされた関数が見つかりませんでした。
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(8): error C2784: 'To dxle::sound_units::bel_cast(const dxle::sound_units::bel_c<T,Period,nullptr> &)': テンプレート 引数を 'const dxle::sound_units::bel_c<T,Period,nullptr> &' に対して 'int' から減少できませんでした
1>  c:\users\yumetodo\documents\git\dxlibex\dxlibex\basic_types\bel.hpp(24): note: 'dxle::sound_units::bel_cast' の宣言を確認してください
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(8): error C2789: 'rate3': const で修飾された型のオブジェクトは初期化する必要があります
1>  c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(8): note: 'rate3' の宣言を確認してください
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
yumetodo commented 8 years ago

どうやらIntelliSenseは__cpp_user_defined_literalsは定義されていると見なすが、コンパイラ先生は知らんと申しているようで。

ええい。

yumetodo commented 8 years ago
1>------ ビルド開始: プロジェクト:sound_play, 構成:Debug x64 ------
1>  main.cpp
1>d:\user\documents\git\dxlibex\dxlibex\helper.h(138): error C2440: 'reinterpret_cast': 'int' から 'int' に変換できません。
1>  d:\user\documents\git\dxlibex\dxlibex\helper.h(138): note: 変換は有効な標準変換で、暗黙的にまたは static_cast、C スタイル キャストまたは関数スタイルのキャストによって行われます。
1>  d:\user\documents\git\dxlibex\dxlibex\helper.h(188): note: コンパイル対象のクラス テンプレート インスタンス化 'dxle::impl::Unique_HandledObject_Bace<Child,is_dxlib_handle,HandleType,invalid_handle_value>' のリファレンスを確認してください
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

なんじゃそれ。こんなバグが有るとは・・・。 https://connect.microsoft.com/VisualStudio/feedback/details/2692140 バグレポ投げました。

さてどうしよう。

yumetodo commented 8 years ago
1>------ ビルド開始: プロジェクト:sound_play, 構成:Debug x64 ------
1>  main.cpp
1>d:\user\documents\git\dxlibex\dxlibex\helper.h(181): error C2440: 'static_cast': 'dxle::impl::Unique_HandledObject_Bace<Child,true,int,-1> *const ' から 'dxle::win32api::file_handle *' に変換できません。
1>          with
1>          [
1>              Child=dxle::win32api::file_handle
1>          ]
1>  d:\user\documents\git\dxlibex\dxlibex\helper.h(181): note: 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>  d:\user\documents\git\dxlibex\dxlibex\helper.h(179): note: クラス テンプレート のメンバー関数 'dxle::impl::Unique_HandledObject_Bace<Child,true,int,-1>::~Unique_HandledObject_Bace(void) noexcept' のコンパイル中
1>          with
1>          [
1>              Child=dxle::win32api::file_handle
1>          ]
1>  d:\user\documents\git\dxlibex\dxlibex\win32api_wrap\file_system\file_system.hpp(121): note: コンパイル対象のクラス テンプレート インスタンス化 'dxle::impl::Unique_HandledObject_Bace<Child,true,int,-1>' のリファレンスを確認してください
1>          with
1>          [
1>              Child=dxle::win32api::file_handle
1>          ]
1>d:\user\documents\git\dxlibex\dxlibex\helper.h(181): error C2227: '->delete_this' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

@Nagarei すみません、これなにが原因か分かりますか?ちょっとお手上げで・・・。

Nagarei commented 8 years ago

@yumetodo デバッグの前に。filesystem系ですが、DXArchiveが考慮されていないように思います。(もっと早く確認すれば良かったです。申し訳ない。)

yumetodo commented 8 years ago

あ~、んなのもあったなぁ・・・。

で、DxLibのヘッダーやらソースやら覗きましたが、かなり厄介だな・・・。というのはまともにDXA扱う関数がほとんど公開されていない。ライセンス的に作者さんに公開をお願いするか一からコード書くかしないといけない。後者の場合はDxLibExの利用にコンパイルが必要になる。

とりあえず今回の場合はLoadSoundMem/LoadBGMの呼び分け、つまり内部でのDX_SOUNDDATATYPE_MEMNOPRESS/DX_SOUNDDATATYPE_MEMPRESS/DX_SOUNDDATATYPE_FILEの場合分けの自動判別だから、DXAのパスが指定された時は例外が飛んで、catchされてsound_data_type::bigになるだけだからまあそれでいいかなと思います。速度的にはDXAの場合内部的にどのフラグに行こうと、データはメモリー上にあるので大差ないはずですし。

しっかし、DXAかぁ・・・。あんなもん何がいいんだか・・・。その気になれば誰でも中身入れ替えられるんだから、圧縮解凍する分重くなるだけでは?と思ってしまう。共通鍵暗号化機能もあるけど鍵を毎回SSL通信で落としてくるとかしないとその気になれば割れるし・・・(そうすればメモリーダンプとかいう死ぬほど面倒な作業をしないと割れないからやっと意味があるものになる)。

yumetodo commented 8 years ago

ん?どういうことだ?Clang with Microsoft CodeGenはこの件に関してなにも言ってこないぞ・・・

yumetodo commented 8 years ago

static_assertの結果がコンパイルエラーのメッセージと矛盾しているんですがこれは一体

'dxle::impl::Unique_HandledObject_Bace<Child,true,int,-1> const ' から 'dxle::win32api::file_handle ' に変換できません。

このconstどっから来た

yumetodo commented 8 years ago

あああ、もう怒った。全然コンパイル通らないし。 http://qiita.com/yumetodo/items/3513677a4b8942763886 p0052r2のscopre_exist実装してやる!

まあ https://groups.google.com/a/isocpp.org/forum/#!msg/std-proposals/b74TFYOWRB8/A5Qo5fpKBAAJ でも上がっているように登録する関数がエラーの時の処理が書けないというなんかアレな仕様だけどどうせ今でも戻り値なんて見てないし。

yumetodo commented 8 years ago

ToDo

yumetodo commented 7 years ago

うーん、テストコード書くのに夢中でこれみたいなコア機能の実装が遅々として進まない・・・。 とりあえずconflictは解消しておくか・・・

yumetodo commented 7 years ago

conflictは解消したけど、DXAどうしよう・・・。ちょっとAPIとにらめっこする必要があるな・・・。

yumetodo commented 7 years ago

http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4005 なるほど、サウンドのフェード処理か・・・

yumetodo commented 7 years ago

std::wcin/ std::wcoutをUTF-8としてバイパスする目的で書いたstreambuf https://github.com/yumetodo/utf8_streambuf を実装した経験がある今ならDxLibのFileAPIのラップが書けるかもしれない・・・

yumetodo commented 7 years ago

GetVolumeSoundMemについて http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4195