今日の呟き

時代遅れ?

アバター
V30
記事: 21
登録日時: 10年前
住所: 岡山県

時代遅れ?

投稿記事 by V30 » 7年前

久々の日記です。

スマホアプリやUWPがトレンドの中、C++習得のために時代遅れ感のあるWindows
デスクトップアプリをコツコツとコーディングしています。

DS8.h
► スポイラーを表示
DS8.cpp
► スポイラーを表示
コードは、自分仕様の設定で初期化するDirectSound8オブジェクト作成関数群です。
ライブラリの部品なので、インクルードヘッダが足りなくてこのままでは動かないかも知れません。
特別間違ったコードは書いていないと思いますが、ご指摘があればありがたいです。

既存の構造体があるかも知れませんが、DSDEVICEINSTANCE構造体はサウンドデバイス列挙用に
作りました。
moduleは変数名としてNGワードっぽいですね。VSコンパイラは問題なく動くので、ずっと気付
かずに今まで生きてきました。これからも気づかないフリはダメかな?

関数は、2段ずつ同じような内容の物が並んでいます。ComPtrを返すものは最近付け加えました。
その際、元々COMの QueryInterface メソッドや ComPtr::As メソッド等で書いていた
内容を operator= ではなく、より直接的な ComPtr::Swap に変更しました。
AsもSwapも実質変わらない気がしますが、2関数の内容の整合性を保ちたいと思いました。

今気が付きましたが、波形データロード関数は、引数lengthの上限をチェックしていませんね。
呼び出し側でlengthの値を間違える事はないハズですが、堅牢ではありませんね。
バッファサイズをMaxにして判定すれば良いだけですね。
IDirectSoundBuffer8::Lockメソッドが上手く処理してくれるなら、このまま放置OKなのかな?
あと、unique_ptr型の他に、配列サイズの取得が明瞭な vector型などでもOKな
気がします。
そういやfstreamからはunique_ptr型変数を作って間接的に波形データを転送しています
が、直接転送もできそうな気がしてきました。まだまだ勉強不足だなぁ。。。

それにしても、実際はサウンドプレイヤークラスを作って同様の関数をメンバ宣言しているから、
このファイル達、実質不要の産物ですわ。
でも、DirectSound8利用クラス作成時のコピペ用に取っておきます。

また何か思い付いたら書きます。

コメントはまだありません。