質問編集履歴

2

修正したソースコードを記載

2021/08/01 04:26

投稿

P0ngCh4ng
P0ngCh4ng

スコア1

test CHANGED
File without changes
test CHANGED
@@ -181,3 +181,35 @@
181
181
 
182
182
 
183
183
  Visual C++ 2019
184
+
185
+
186
+
187
+ ###解決後のソースコード
188
+
189
+ 原因は、回答していただいたお二方の回答を見ていただくとして、簡素ですが修正したコードを記載しておきます。
190
+
191
+ 同じように困っている方に助けになれば幸いです。
192
+
193
+
194
+
195
+ ```c
196
+
197
+ for (count = 0; count < data_len; count++ ) {
198
+
199
+ tmp = (unsigned char)(amplitude * sin(2 * PI * f0 * count / SRATE));
200
+
201
+ tmp = tmp + 128; //追加した1行
202
+
203
+ printf(" %x", tmp);
204
+
205
+ if (bWave != NULL) {
206
+
207
+ bWave[count] = tmp;
208
+
209
+ }
210
+
211
+ }
212
+
213
+
214
+
215
+ ```

1

ソースコードを詳しく記載しました。

2021/08/01 04:26

投稿

P0ngCh4ng
P0ngCh4ng

スコア1

test CHANGED
File without changes
test CHANGED
@@ -36,15 +36,55 @@
36
36
 
37
37
  ### 該当のソースコード
38
38
 
39
- 書籍の著作物るため、一部のみ記載します。変数については、初期化等は済んでいるものと思ってください。
39
+ 書籍に記載されている内容すが、WebページからDL出来るため、引用という形で記載します。
40
-
41
- 参考までに、サンプリングレートは44.1kHzです。
42
40
 
43
41
  ```c
44
42
 
43
+ #include "stdafx.h"
44
+
45
+ #include <stdio.h>
46
+
47
+ #include <windows.h>
48
+
49
+ #include <mmsystem.h>
50
+
51
+ #include <math.h>
52
+
53
+ #pragma comment( lib, "winmm.lib" )
54
+
55
+ #define SRATE 44100 // サンプリングレート 44.1kHz
56
+
57
+ #define PI 3.14159286 // π
45
58
 
46
59
 
60
+
61
+ int main()
62
+
63
+ {
64
+
65
+ // wave関係変数
66
+
67
+ static HWAVEOUT hWave;
68
+
69
+ static WAVEHDR whdr;
70
+
71
+ WAVEFORMATEX wfe;
72
+
73
+ static char *bWave;
74
+
75
+ unsigned int count = 0;
76
+
77
+ float b_time = 1.0; // 鳴らす時間(秒)の設定
78
+
79
+ float f0 = 440.0; // ラ(A4)440Hz
80
+
47
- float amplitude = 2.0;
81
+ int amplitude = 2; // 振幅
82
+
83
+ int data_len = (int)SRATE * b_time; // データの長さ
84
+
85
+ bWave = (char *)malloc(data_len); // 波形データのメモリ確保
86
+
87
+ char tmp;
48
88
 
49
89
  // 1秒分のデータを配列に設定する
50
90
 
@@ -64,9 +104,61 @@
64
104
 
65
105
 
66
106
 
107
+ wfe.wFormatTag = WAVE_FORMAT_PCM;
108
+
109
+ wfe.nChannels = 1;
110
+
111
+ wfe.nSamplesPerSec = SRATE;
112
+
113
+ wfe.nAvgBytesPerSec = SRATE;
114
+
115
+ wfe.wBitsPerSample = 8;
116
+
117
+ wfe.nBlockAlign = wfe.nChannels * wfe.wBitsPerSample / 8;
118
+
119
+
120
+
121
+ // デバイスのオープン
122
+
123
+ waveOutOpen(&hWave, WAVE_MAPPER, &wfe, 0, 0, CALLBACK_NULL);
124
+
125
+
126
+
127
+ whdr.lpData = bWave;
128
+
129
+ whdr.dwBufferLength = data_len;
130
+
131
+ whdr.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
132
+
133
+ whdr.dwLoops = 1;
134
+
135
+
136
+
137
+ // ヘッダーの準備
138
+
139
+ waveOutPrepareHeader(hWave, &whdr, sizeof(WAVEHDR));
140
+
141
+ // 波形データの書き出し(再生)
142
+
143
+ waveOutWrite(hWave, &whdr, sizeof(WAVEHDR));
144
+
145
+
146
+
147
+ printf("press any key !");
148
+
149
+ getchar(); // キー入力待ち
150
+
151
+ return 0;
152
+
153
+ }
154
+
155
+
156
+
157
+
158
+
67
159
  ```
68
160
 
69
-
161
+ [引用元](https://www.morikita.co.jp/books/mid/085441)
70
162
 
71
163
  ### 試したこと
72
164