質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

2029閲覧

C# リソースファイル(wav)をDirectX.AudioVideoPlaybackで再生したい。

maru-omochi

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/03/02 08:04

前提・実現したいこと

C#初心者です。
Visual Studio 2019 C#にてWindowsFormアプリを作っています。

実現したいこと
・リソースファイルのwavファイルを再生させたい。
・ただし同時に別のwavファイルが再生される可能性があるためDirectX.AudioVideoPlaybackを用いたい。
・第三者にアプリを使ってほしいのでパスの指定ではなく、IOの Properties.Resources.Sound1のように組み込みで使えるようなものにしたい。

困っていること
・通常Audio@"C:wavのパス")としなければいけないと思うのですが、このパスを指定してしまうと第三者のPCではパスがもちろん変わってしまうのでエラーが起きて落ちてしまいます。
なのでリソースファイルにしてそれを参照させたかったのですがやり方がわかりません。
同時に音が流れる可能性もあるため、DirectX.AudioVideoPlaybackを用いたかったのですが、@C:...のようなパスを指定する方法以外のやり方がわかりません。

###エラー文
・'System.IO.UnmanagedMemoryStream'を'Microsoft.DirectX.AudioVideoPlayback.Audio'に暗黙的に変換できません。

試したこと

・そもそもDirectXにはこだわりがないので他のプレーヤーで代替しようと思ったのですができなかった。
・ var click = new Audio(Properties.Resources.Sound1);
のように定義しようとしてみたがうまくいかなかった。
なので現在はSoundPlayer playerClick = new SoundPlayer(Sound1);
のようにして同時再生はできないもののとりあえず単発再生はできるという状態にしてあります。

ネットでいろいろ情報を探してみたのですが、検索方法が悪いのか該当記事を見つけることができませんでした。

わかりにくい説明で申し訳ございません。もし可能で、かつお手隙の方ご教授いただけると嬉しいです。

もし情報に不足があってわからないといった場合はご指摘いただければわかる範囲で補足いたします。

初心者のためまだまだプログラミングのことがわかっておらずご迷惑おかけする形になっているかもしれませんが何卒よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/03/02 08:30

リソースファイル中の*.wavファイルをいったん別のファイル、テンポラリファイルとして出力して、new Audio(ファイル名)とすれば良いのではないでしょうか。そういう話では無くて、でしょうか。
maru-omochi

2020/03/02 08:39

dodox86様 早速のご回答ありがとうございます。 お恥ずかしい話なのですがまずそういう方法があるということすら知らなかったのと、ではそれをやった場合に私が行いたいことに対してなにか不都合が生じるのかというのもわからない状態でして、一旦テンポラリファイルとして出力する方法から調べて試してみようと思います。ありがとうございます。
guest

回答3

0

NAudioというOSSでしたら、Stream経由でオーディオファイルが読めますので、
リソースのものでも読めたと思います。

参考:(リンク先のものはMP3ですがWAVでも大体一緒です)
https://stackoverflow.com/questions/18295309/c-sharp-play-mp3-file-using-naudio-from-resource

投稿2020/03/02 08:54

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maru-omochi

2020/03/02 08:59

takabosoftさん回答ありがとうございます。 先にいただいた方の方法で解決はしたのですが、こちらもまた知らない方法で勉強になります。 皆さんほんとに素早い回答ありがとうございます。感動してます。
guest

0

ベストアンサー

色々な方法があると思いますが、パッと思いついた解決策を書いておきます。


まず、使用したいwavファイルをexeファイルと同じフォルダに入れてください

ソースコードの先頭にusingを追加
(すでにある場合はそのままでいいです)

C#

1using System.IO;

ファイルの読み込み処理の前にexeファイルのあるフォルダへのパスを取得する

C#

1string executeDirectoryPath = Path.Combine(Application.ExecutablePath, "../");

ファイルを読み込みます
(wavファイル名のところは適宜書き換えてください)

C#

1var click = new Audio(Path.Combine(executeDirectoryPath, "Audio.wav"));

投稿2020/03/02 08:49

編集2020/03/02 08:59
kawa0x0A

総合スコア271

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maru-omochi

2020/03/02 08:58

回答ありがとうございます。 無事解決いたしました。 私みたいな初心者がこういった場で質問することに抵抗があったのですが、こんなにも早くたくさんの方から回答いただけるとは思いませんでした。 はじめから飛び込めばよかったと少し後悔していると同時にこういった機会をいただけたこと大変感謝しております。 ありがとうございました。
guest

0

ぱっと思いつくのはこの位です。

1.一度ファイルに書き出してから再生する。

2.実行ファイルとwavファイルを一緒に配布する。
こんな感じで指定Assembly.GetEntryAssembly().Location + "\hoge.wav"

3.WPF、Unity、など同時再生できるフレームワークを使う。

2が一番簡単かな?

投稿2020/03/02 08:44

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maru-omochi

2020/03/02 09:01

hihijijiさん回答いただきありがとうございます。 おかげさまで無事解決することができました。 みなさんほんとに素早い回答ありがとうございます。 私もいずれ皆様のように誰かを助けられるようになりたいと思いました。 またなにかあった時ぜひご教授いただけるとありがたいです。 精進してまいります。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問