comparison Sep16th.html @ 7:0db5a6582d52

fix
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Tue, 16 Sep 2014 19:05:55 +0900
parents 379b91b4f7b7
children
comparison
equal deleted inserted replaced
6:379b91b4f7b7 7:0db5a6582d52
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 <head> 3 <head>
4 <meta http-equiv="content-type" content="text/html;charset=utf-8"> 4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
5 <title>26th,August</title> 5 <title>seminar</title>
6 6
7 <!-- 7 <!--
8 Notes on CSS media types used: 8 Notes on CSS media types used:
9 9
10 1) projection -> slideshow mode (display one slide at-a-time; hide all others) 10 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
95 95
96 <div class='slide cover'> 96 <div class='slide cover'>
97 <table width="90%" height="90%" border="0" align="center"> 97 <table width="90%" height="90%" border="0" align="center">
98 <tr> 98 <tr>
99 <td><div align="center"> 99 <td><div align="center">
100 <h1>マルチコアソフトウェアシンセサイザー(仮)</h1> 100 <h1>Cerium による正規表現の実装</h1>
101 </div> 101 </div>
102 </td> 102 </td>
103 </tr> 103 </tr>
104 <tr> 104 <tr>
105 <td><div align="right"> 105 <td><div align="right">
106 <name>Masataka Kohagura 26th June,2014</name> 106 <name>Masataka Kohagura 16th September,2014</name>
107 </div></td> 107 </div></td>
108 </tr> 108 </tr>
109 </tr> 109 </tr>
110 </table> 110 </table>
111 </div> 111 </div>
112 112
113 113
114 <div id="cover"> 114 <div id="cover">
115 <h1>研究目的</h1> 115 <h1>研究目的</h1>
116 <p> 116 <ul>
117 コンピュータ上で作曲を行うときは、ハードウェアシンセサイザーの音を録音するのではなく、ソフトウェアシンセサイザー(以下ソフトシンセ)で収録することが主流となっている。 117 <li>
118 </p> 118 当研究室では並列プログラミングフレームワーク Cerium にてプログラミングを行っている。
119 <p> 119 </li>
120 ソフトシンセのマルチコア化は進んでいる。しかし、現状としてはマルチコアで駆動しているわけではなく、1つのコアだけに負荷がかかるものが多い。 120 <li>
121 </p> 121 Cerium で正規表現を実装して、既存の物よりも高速化する。
122 <p> 122 </li>
123 作曲をする上ではソフトシンセを複数立ち上げることが基本となっている。 123 <li>
124 また、オシレーターの複数使用や Filter による波形編集を重ねると計算量が大きくなっていくため、ソフトシンセ単体の動作を軽量化する必要がある。<br> 124 Cerium が並列処理にとって有用であることを証明する。
125 </p> 125 </li>
126 <p> 126 </ul>
127 また、実用的なシンセサイザーは入力に対するレスポンスが必須となるので、計算量が多くなっても入力から出力までの遅延を抑える必要がある。
128 </p>
129 <p>
130 (軽量化しながら音を良くしたいが、抽象的すぎて評価する点がみつけづらい)<br>
131 音がいいって何??<br>
132 評価どうするの??
133 </p>
134 </div> 127 </div>
135 128
136 <div id="cover"> 129 <div id="cover">
137 <h1>近況報告</h1> 130 <h1>これからやるべきこと</h1>
138 <ul> 131 <ul>
139 <li> 132 <li>
140 ゲームクリエイター就職大作戦に参加(-9/21) 133 様々な grep を調べる(実装、速度 etc...)
141 </li> 134 </li>
142 <li> 135 <li>
143 Unreal Engine 4 の書籍を Epic 社河崎さんから頂きました。 136 grep の実装
144 </li> 137 </li>
145 <li> 138 </ul>
146 Unreal Engine 4 の動作環境について色々調べてみた。
147 </li>
148 </ul>
149 </div> 139 </div>
150 140
151 <div id="cover"> 141 <div id="cover">
152 <h1>近況報告</h1> 142 <h1>様々な grep</h1>
153 <ul> 143 <ul>
154 <li> 144 <li>
155 ゲームクリエイター就職大作戦に参加(-9/21) 145 BSD grep (Mac OSX default)
156 </li> 146 </li>
157 <li> 147 <li>
158 Unreal Engine 4 の書籍を Epic 社河崎さんから頂きました。 148 GNU grep (ggrep)
159 </li> 149 </li>
160 <li> 150 </ul>
161 Unreal Engine 4 の動作環境について色々調べてみた。
162 </li>
163 </ul>
164 </div> 151 </div>
165 152
153
166 <div id="cover"> 154 <div id="cover">
167 <h1>今週までの作業</h1> 155 <h1>とりあえず</h1>
156 <ul>
157 <li>
158 a*b を実装する。
159 </li>
160 <li>
161 マッチングした行を結果として返す。
162 </li>
163 </ul>
164 </div>
165
166
167 <!--
168 <div id="cover">
169 <h1>prog</h1>
168 <ul> 170 <ul>
169 <li> 171 <li>
170 Cerium にて SDL_audio.h を使用して音を出せるようにした。(単音出力) 172
171 </li> 173 </li>
172 <li>
173 三角波、矩形波の実装
174 </li>
175 <li>
176 MIDI コントローラーからの入力を受け付ける(途中)
177 </li>
178 </ul>
179 </div>
180 174
181 <div id="cover">
182 <h1>SDL</h1>
183 <ul>
184 <li>
185 SDL : Simple DirectMedia Layer<br>
186 マルチメディア関係のソフトウェアを開発するための、グラフィックやサウンド等の API を提供するライブラリ。
187 </li>
188 <li>
189 Windows, Mac OS X, Linux, iOS, Android をサポート
190 </li>
191 <li>
192 C,C++<br>
193 C#,Python もいけるみたい??
194 </li>
195 </ul>
196 </div>
197
198 <div id="cover">
199 <h1>SDL_audio.h(1/3)</h1>
200 <ul>
201 <li>
202 SDL に含まれている、オーディオ回りのライブラリ
203 </li>
204 <li>
205 オーディオ情報(音量、ステレオ、sampling rateなど)を SDL_AudioSpec(構造体)として持っている。
206 </li>
207 <pre> 175 <pre>
208 <code> 176 <code>
209 typedef struct SDL_AudioSpec { 177 typedef struct SDL_AudioSpec {
210 int freq; /** DSP frequency -- samples per second */ 178 int freq; /** DSP frequency samples per second */
211 Uint16 format; /** Audio data format */ 179 Uint16 format; /** Audio data format */
212 Uint8 channels; /** Number of channels: 1 mono, 2 stereo */ 180 Uint8 channels; /** Number of channels: 1 mono, 2 stereo */
213 Uint8 silence; /** Audio buffer silence value (calculated) */ 181 Uint8 silence; /** Audio buffer silence value (calculated) */
214 Uint16 samples; /** Audio buffer size in samples (power of 2) */ 182 Uint16 samples; /** Audio buffer size in samples (power of 2) */
215 Uint16 padding; /** Necessary for some compile environments */ 183 Uint16 padding; /** Necessary for some compile environments */
218 void *userdata; 186 void *userdata;
219 } SDL_AudioSpec; 187 } SDL_AudioSpec;
220 </code> 188 </code>
221 </ul> 189 </ul>
222 </pre> 190 </pre>
191 <img src="./images/sqrWave.png" width="50%" height="">
223 </div> 192 </div>
224 193
225 <div id="cover"> 194 -->
226 <h1>SDL_audio.h(2/3)</h1>
227 <ul>
228 <li>
229 SDL_AudioSpec を SDL_OpenAudio(SDL_AudioSpec *desired, SDL_AudioSpec *obtained);という関数に渡すことによって、音が再生される。
230 </li>
231 <pre>
232 <code>
233 SDL_AudioSpec Desired;
234 SDL_AudioSpec Obtained;
235
236 int main(int argc, char *argv[])
237 {
238 printf("Freq:%f\n",Frequency);
239 Desired.freq= 44100; /* Sampling rate: 44100Hz */
240 Desired.format= AUDIO_S16LSB; /* 16-bit signed audio */
241 Desired.channels= 1; /* Mono */
242 Desired.samples= 8192; /* Buffer size: 8K = 0.37 sec. */
243 Desired.callback= callback;
244 Desired.userdata= NULL;
245
246 SDL_OpenAudio(&Desired, &Obtained);
247 SDL_PauseAudio(0);
248 SDL_Delay(200);
249 SDL_Quit();
250 return 0;
251 }
252 </code>
253 </ul>
254 </pre>
255 </div>
256
257 <div id="cover">
258 <h1>SDL_audio.h(3/3)</h1>
259 <ul>
260 <li>
261 SDL_AudioSpecにSDLCALL 関数が含まれている。ここで、音の波形を生成しておき、 SDL_OpenAudioにて音を再生する。
262 </li>
263 <pre>
264 <code>
265 void callback(void *userdata,Uint8 *stream,int len){
266
267 AudioDataPtr au = (AudioData*)userdata;
268
269 char *waveform_name = au->waveform_name;
270 double frequency = au->frequency;
271 int volume = au->volume;
272 static unsigned int step = 0;
273 Uint16 *frames = (Uint16 *) stream;
274 int framesize = len / 2;
275
276 if(strcmp(waveform_name, "tri")){
277
278 for (int i = 0; i < framesize ; i++, step++){
279 frames[i] = tri(step * frequency / Obtained.freq) * volume ;
280 }
281
282 }else if(strcmp(waveform_name, "sqr")){
283
284 for (int i = 0; i < framesize ; i++, step++){
285 frames[i] = square(step * frequency / Obtained.freq) * volume ;
286 }
287
288 }
289 }
290 </code>
291 </ul>
292 </pre>
293 </div>
294
295 <div id="cover">
296 <h1>波形の生成</h1>
297
298 <p>矩形波</p>
299 <pre>
300 <code>
301 double
302 square(double t){
303 double decimal_part = t - abs(t);
304 return decimal_part < 0.5 ? 1 : -1;
305 }
306 </code>
307 </pre>
308
309 <img src="./images/sqrWave.png" width="50%" height="">
310
311 </div>
312
313
314
315 <div id="cover">
316 <h1>波形の生成</h1>
317
318 <p>三角波</p>
319
320 <pre>
321 <code>
322 double
323 tri(double t){
324
325 double decimal_part = t - abs(t);
326
327 if(abs(t) % 2 != 0){
328 return decimal_part < 0.5 ? decimal_part : 1 - decimal_part;
329 }else{
330 return decimal_part < 0.5 ? -decimal_part : 1 - decimal_part;
331 }
332 }
333
334 </code>
335 </pre>
336
337 <img src="./images/triWave.png" width="50%" height="">
338
339 </div>
340
341
342
343 <div id="cover">
344 <h1>波形の生成</h1>
345
346 <p>のこぎり波</p>
347 <pre>
348 <code>
349 double
350 saw(double t)
351 {
352 double decimal_part = t - abs(t);
353 return decimal_part;
354 }
355 </code>
356 </pre>
357
358 <img src="./images/sawWave.png" width="50%" height="">
359 </div>
360
361
362
363 <div id="cover">
364 <h1>いましていること</h1>
365 <ul>
366 <li>
367 MIDI I/O は PortMidi を使用して実装中である。
368 </li>
369 <li>
370 Multi Platform 対応、
371 Windows (MME)、
372 Mac (CoreMIDI)、
373 Linux (ALSA)
374 </li>
375 </ul>
376 </pre>
377 </div>
378 195
379 </div> <!-- presentation --> 196 </div> <!-- presentation -->
380 </body> 197 </body>
381 </html> 198 </html>