質問編集履歴
2
修正したソースコードを記載
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
ソースコードを詳しく記載しました。
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
|
-
|
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
|
|