teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

回答をヒントに解決したので詳細を残します。

2018/12/17 12:49

投稿

nabesi
nabesi

スコア13

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,141 @@
1
1
  自分用にWindowsフォームアプリケーションでデスクトップの英単語帳を作成しようと思っており、その中に音声の再生をする機能を付けたいと思っています。
2
2
 
3
3
  音声をひとつひとつ作成したりダウンロードするのは無理なので下のような↓ 英単語サイトの音をそのまま再生できるのか、またその方法を教えて頂きたいです。使用言語はC#です。よろしくお願いします。
4
- ![![イメージ説明](fe99c78740cfbbed01f390d58496e3d0.jpeg)](e730113ec9069ec66029fedc72abbd46.jpeg)
4
+ ![![イメージ説明](fe99c78740cfbbed01f390d58496e3d0.jpeg)](e730113ec9069ec66029fedc72abbd46.jpeg)
5
+
6
+
7
+
8
+
9
+ **回答をヒントに解決したので詳細を残します。**
10
+ ボタンをクリックするとサウンドが再生されるようにしました。MP3ファイルとwaveファイルを再生させる2種類の方法です。現時点では連続再生させるとエラーが出ていますが、そのまま書いています。
11
+
12
+ waveファイルを再生させる場合のスクリプトと回答以外に参考としたサイト↓
13
+ [方法:Windowsフォーム内でサウンドを非同期的に読み込む](https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/controls/how-to-load-a-sound-asynchronously-within-a-windows-form)
14
+ ```C#
15
+ using System;
16
+ using System.Collections.Generic;
17
+ using System.ComponentModel;
18
+ using System.Data;
19
+ using System.Drawing;
20
+ using System.Linq;
21
+ using System.Media;
22
+ using System.Text;
23
+ using System.Threading.Tasks;
24
+ using System.Windows.Forms;
25
+ using System.Net;
26
+ using System.IO;
27
+
28
+ namespace WordBook
29
+ {
30
+
31
+ public partial class Home : Form
32
+ {
33
+ public Home()
34
+ {
35
+ InitializeComponent();
36
+ this.Player.LoadCompleted += new AsyncCompletedEventHandler(Player_LoadCompleted);
37
+ }
38
+
39
+ SoundPlayer Player = new SoundPlayer();
40
+ //ボタンクリックでサウンド実行
41
+ private void button2_Click(object sender, EventArgs e)
42
+ {
43
+ this.LoadAsyncSound();
44
+ }
45
+ //サウンドの取得と読み込み
46
+ public void LoadAsyncSound()
47
+ {
48
+ try
49
+ {
50
+ //音源先のURLを指定(右クリックして「リンクのアドレスをコピー」)
51
+ this.Player.SoundLocation = "https://maoudamashii.jokersounds.com/music/se/wav/se_maoudamashii_chime14.wav";
52
+ this.Player.LoadAsync();
53
+ }
54
+ catch (Exception ex)
55
+ {
56
+ MessageBox.Show(ex.Message, "Error loading sound");
57
+ }
58
+ }
59
+ // サウンドの再生
60
+ void Player_LoadCompleted(object sender, AsyncCompletedEventArgs e)
61
+ {
62
+ if (Player.IsLoadCompleted)
63
+ {
64
+ try
65
+ {
66
+ this.Player.Play();
67
+ }
68
+ catch (Exception ex)
69
+ {
70
+ MessageBox.Show(ex.Message, "Error playing sound");
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
76
+ ```
77
+
78
+
79
+ Mp3ファイルは上記方法で再生ができなかったので、下記方法で再生する↓
80
+ [MIDI,MP3などの音楽ファイルを再生する](http://dobon.net/vb/dotnet/programing/playmidifile.html#section2)
81
+
82
+ ```C#
83
+ using System;
84
+ using System.Collections.Generic;
85
+ using System.ComponentModel;
86
+ using System.Data;
87
+ using System.Drawing;
88
+ using System.Linq;
89
+ using System.Media;
90
+ using System.Text;
91
+ using System.Threading.Tasks;
92
+ using System.Windows.Forms;
93
+ using System.Net;
94
+ using System.IO;
95
+
96
+ namespace WordBook
97
+ {
98
+
99
+ public partial class Home : Form
100
+ {
101
+ [System.Runtime.InteropServices.DllImport("winmm.dll",
102
+ CharSet = System.Runtime.InteropServices.CharSet.Auto)]
103
+ private static extern int mciSendString(string command,
104
+ System.Text.StringBuilder buffer, int bufferSize, IntPtr hwndCallback);
105
+
106
+ private string aliasName = "MediaFile";
107
+
108
+ public Home()
109
+ {
110
+ InitializeComponent();
111
+ }
112
+
113
+ //再生ボタン
114
+ private void button2_Click(object sender, EventArgs e)
115
+ {
116
+ //再生するファイル名  ここに音源のUrlをいれる
117
+ string fileName = "http://www.talkenglish.com/audio871/AudioTE1/E01/sentence/E001S1.mp3";
118
+
119
+ string cmd;
120
+ //ファイルを開く
121
+ cmd = "open \"" + fileName + "\" alias " + aliasName;
122
+ if (mciSendString(cmd, null, 0, IntPtr.Zero) != 0)
123
+ return;
124
+ //再生する
125
+ cmd = "play " + aliasName;
126
+ mciSendString(cmd, null, 0, IntPtr.Zero);
127
+ }
128
+ //停止ボタン
129
+ private void button3_Click(object sender, EventArgs e)
130
+ {
131
+ string cmd;
132
+ //停止する
133
+ cmd = "stop " + aliasName;
134
+ mciSendString(cmd, null, 0, IntPtr.Zero);
135
+ //閉じる
136
+ cmd = "close " + aliasName;
137
+ mciSendString(cmd, null, 0, IntPtr.Zero);
138
+ }
139
+ }
140
+ }
141
+ ```