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

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

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

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

Visual Studio

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

Q&A

解決済

1回答

992閲覧

Visual Studio C# Sound Playerに関するエラー

lleldigm

総合スコア59

C#

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

Visual Studio

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

0グッド

0クリップ

投稿2019/04/19 15:11

編集2019/04/19 15:16

概要

・Sound Playerを使ったコードでエラーが発生します。
・1周目は問題なく動きます。
・2周目はエラーが生じます。
・サウンドデータを別クラスからstatic参照した場合にのみ起こるようです。

→なぜ「2周目」かつ「staticを使った場合」のみエラーが発生するの分かりません!わかる方いらっしゃいました教えてほしいです><

コード

C#

1using System; 2using System.Windows.Forms; 3using System.Media; 4using System.IO; 5 6namespace WindowsFormsApp3 7{ 8 //サウンド情報を保持するクラス 9 public class Sound 10 { 11 public static Stream alarmA = WindowsFormsApp3.Properties.Resources.alarmA; 12 } 13 14 public partial class Form1 : Form 15 { 16 //コンストラクタ 17 public Form1() 18 { 19 InitializeComponent(); 20 } 21 22 //テスト回数カウンター 23 int count; 24 25 //実行時起動 26 private void Form1_Load(object sender, EventArgs e) 27 { 28 doTest();//1回目はエラーなし 29 doTest();//2回目はエラーあり 30 } 31 32 //テストメソッド 33 private void doTest() 34 { 35 count++;//カウンター更新 36 37 SoundPlayer soundNomal = new SoundPlayer(Sound.alarmA); 38 try 39 { 40 soundNomal.Play(); 41 soundNomal.Stop(); 42 Console.WriteLine(count + "周目:問題なし"); 43 } 44 catch(Exception e) 45 { 46 Console.WriteLine(count + "周目:エラー"); 47 Console.WriteLine(e.StackTrace); 48 } 49 } 50 } 51}

コンソール

1周目:問題なし
'WindowsFormsApp3.exe' (CLR v4.0.30319: WindowsFormsApp3.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。
2周目:エラー
場所 System.Media.SoundPlayer.ValidateSoundData(Byte[] data)
場所 System.Media.SoundPlayer.LoadAndPlay(Int32 flags)
場所 System.Media.SoundPlayer.Play()
場所 WindowsFormsApp3.Form1.doTest() 場所 d:\ユーザー\visual studio 2017\Projects\WindowsFormsApp3\WindowsFormsApp3\Form1.cs:行 40
プログラム '[8740] WindowsFormsApp3.exe' はコード 0 (0x0) で終了しました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初のPlayでStreamが最後まで読まれてPositionが最後になっているかと思います。
alarmAをstaticにした場合、その状態が保持され、破棄されない状態となっています。
そこで、再度Playを実行した時に読み込めるデータがない状態になっているのだと思います。
staticを付けない場合、newして新たにインスタンスを生成することになるので、毎回
新しいstreamとなります。

alarmAがシークできるのであれば、Positionを0に戻せばよいかと
シークできるかはCanSeekで取得してください

投稿2019/04/19 22:49

編集2019/04/19 22:58
YAmaGNZ

総合スコア10242

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

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

lleldigm

2019/04/20 23:47

回答ありがとうございます。StopをしてもStream.Potionが0に戻されるわけではなかったんですね!ありがとございます!とてもすっきりしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問