chakokuのブログ(rev4)

テック・コミック・ごくまれにチャリ

DirectSoundで音を出す(C#)→かなり難航→SharpDXを使うと良さそうだ

いろいろやった結果の結論。。。

下記の動作環境で、、

  • OS:Windows10
  • VisualStudio 2015
  • C#

VisurlStudioの環境にNuGetを使ってSharpDX:DirectSoundパッケージを追加することで、
C#からSharpDX:DirectSoundを呼び出すことが可能となり、DirectSoundを用いることで、音を鳴らすことができた。

使ったサンプル:
https://github.com/sharpdx/SharpDX-Samples/blob/master/Desktop/DirectSound/PlaySound/Program.cs

NuGet解説
http://www.atmarkit.co.jp/fdotnet/chushin/nuget_01/nuget_01_01.html

VisualStudioへのSharpDXの組み込み方
(SharpDXを使ってDirectXで音声ファイルを再生するには?[ユニバーサルWindowsアプリ開発])
http://www.atmarkit.co.jp/ait/articles/1407/17/news113.html

SharpDX
http://sharpdx.org/



以下あまり参考にならないが苦戦の過程:

DirectSoundのシンプルなサンプルソースコンパイルすると、以下のクラスがないと怒られる

ググりキーワード:「Where is the DirectX SDK

最新状況としては、DirectXはいろんな変遷を経て何か別物に統合されているらしい。
が、、、それがよくわからないので、、古い情報だけど、
DirectX Software Development KitのサイトからDLして使ってみる。
Version:9.22.1284、 File Name:dxsdk_march2008.exe

こっちのほうが新しい
http://www.microsoft.com/en-us/download/details.aspx?id=6812
Version:9.29.1962、File Name:DXSDK_Jun10.exe

さらに別の手立てとして、
http://www.microsoft.com/ja-jp/download/details.aspx?id=35
DirectX エンド ユーザー ランタイム Web インストーラ

http://www.microsoft.com/en-us/download/details.aspx?id=10568
http://www.northbrain.org/book/DirectXSDK.html

DirecrSoundのC#サンプルソースがなんとかコンパイルできたものの、実行させると以下の例外が発生する。この情報から推測すると、ランタイムのバージョンが違ってるので使えないということのようだ。


*** 例外テキスト *** (エスケープさせるため全角にしています)
System.IO.FileLoadException: 混合モード アセンブリ
バージョン 'v1.1.4322' のランタイムに対して作成されており、
追加の構成情報がないと 4.0 ランタイムでは読み込めません。

http://stackoverflow.com/questions/26543653/directx-from-c-sharp
によると、、DirectXは統合されたが、統合先もいろんな変遷をたどっているようで、3rdパーティのDirectXラッパー?であるところの、SharpDXでどうですか?とかアドバイスが出ている。。

http://sharpdx.org/

SharpDX-SDK-2.6.3.exe を落としてインストールしてみる。。

https://github.com/sharpdx/SharpDX-Samples/blob/master/Desktop/DirectSound/PlaySound/Program.cs

DirectSoundはXAudio2に置き換わっている
https://msdn.microsoft.com/ja-jp/magazine/jj883962.aspx

http://www.atmarkit.co.jp/ait/articles/1407/17/news113.html
SharpDXを使ってDirectXで音声ファイルを再生するには?[ユニバーサルWindowsアプリ開発

いろいろ迷い道に入り込んだけど、、なんとかできそうに思うのは、、C#と、SharpDX.XAudio2の組み合わせで音を出すという方法。

http://d.hatena.ne.jp/setuna-kanata/20091220/1261327604
http://t01a.dtiblog.com/?i&no=144

https://msdn.microsoft.com/en-us/magazine/hh852599.aspx?f=255&MSPPError=-2147217396

https://github.com/sharpdx/SharpDX-Samples/blob/master/Desktop/XAudio2/PlaySound/Program.cs

https://github.com/sharpdx/SharpDX-Samples/blob/master/Desktop/XAudio2/PlayDynamicSound/Program.cs

XAudio2での実装を考えていたが、SharpDXを使うとDirectSoundが使えるようであり、DirectSoundの方が過去資料そろっているので、、SharpDX+DirectSoundで実装しようと思う。
https://github.com/sharpdx/SharpDX-Samples/blob/master/Desktop/DirectSound/PlaySound/Program.cs

レイテンシーをさらに減らすにはASIO SDKが良いらしい。
http://kana-soft.com/tech/sample_0004.htm


SolutionExplorerから、Manage NuGet for Package Solutionを選択、NuGetよりSharpDX.DirectSoundを検索して[install]押下
■参考URL
確度の高い情報源
https://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx
Where is the DirectX SDK?