Mercurial > hg > Members > masakoha > seminar
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> |