comparison Aug_19th.html @ 2:69de65730c71

add Aug_19th.html
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Tue, 19 Aug 2014 15:44:58 +0900
parents Aug_05th.html@9e3e3ea0c4a3
children b798246629dd
comparison
equal deleted inserted replaced
1:9e3e3ea0c4a3 2:69de65730c71
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
5 <title>22st,July</title>
6
7 <!--
8 Notes on CSS media types used:
9
10 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
11 2) screen -> outline mode (display all slides-at-once on screen)
12 3) print -> print (and print preview)
13
14 Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key
15
16 Questions, comments?
17 - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow
18 -->
19
20 <!-- styles -->
21 <style media="screen,projection">
22
23 html,
24 body,
25 .presentation { margin: 0; padding: 0; }
26
27 .slide { display: none;
28 position: absolute;
29 top: 0; left: 0;
30 margin: 0;
31 border: none;
32 padding: 2% 4% 0% 4%; /* css note: order is => top right bottom left */
33 -moz-box-sizing: border-box;
34 -webkit-box-sizing: border-box;
35 box-sizing: border-box;
36 width: 100%; height: 100%; /* css note: lets use border-box; no need to add padding+border to get to 100% */
37 overflow-x: hidden; overflow-y: auto;
38 z-index: 2;
39 }
40
41 .slide.current { display: block; } /* only display current slide in projection mode */
42
43 .slide .stepcurrent { color: black; }
44 .slide .step { color: silver; } /* or hide next steps e.g. .step { visibility: hidden; } */
45
46 .slide {
47 /*
48 background-image: -webkit-linear-gradient(top, blue, aqua, blue, aqua);
49 background-image: -moz-linear-gradient(top, blue, aqua, blue, aqua);
50 */
51 }
52 </style>
53
54 <style media="screen">
55 .slide { border-top: 1px solid #888; }
56 .slide:first-child { border: none; }
57 </style>
58
59 <style media="print">
60 .slide { page-break-inside: avoid; }
61 .slide h1 { page-break-after: avoid; }
62 .slide ul { page-break-inside: avoid; }
63 </style>
64
65
66 <!-- add js lib (jquery) -->
67 <script src="js/jquery-1.7.min.js"></script>
68
69 <!-- S6 JS -->
70 <script src="js/jquery.slideshow.js"></script>
71 <script src="js/jquery.slideshow.counter.js"></script>
72 <script src="js/jquery.slideshow.controls.js"></script>
73 <script>
74 $(document).ready( function() {
75 Slideshow.init();
76
77 // Example 2: Start Off in Outline Mode
78 // Slideshow.init( { mode: 'outline' } );
79
80 // Example 3: Use Custom Transition
81 // Slideshow.transition = transitionScrollUp;
82 // Slideshow.init();
83
84 // Example 4: Start Off in Autoplay Mode with Custom Transition
85 // Slideshow.transition = transitionScrollUp;
86 // Slideshow.init( { mode: 'autoplay' } );
87 } );
88 </script>
89
90 </head>
91 <body>
92
93
94 <div class="presentation">
95
96 <div class='slide cover'>
97 <table width="90%" height="90%" border="0" align="center">
98 <tr>
99 <td><div align="center">
100 <h1>マルチコアソフトウェアシンセサイザー(仮)</h1>
101 </div>
102 </td>
103 </tr>
104 <tr>
105 <td><div align="right">
106 <name>Masataka Kohagura 22th June,2014</name>
107 </div></td>
108 </tr>
109 </tr>
110 </table>
111 </div>
112
113
114 <div id="cover">
115 <h1>研究目的</h1>
116 <p>
117 コンピュータ上で作曲を行うときは、ハードウェアシンセサイザーの音を録音するのではなく、ソフトウェアシンセサイザー(以下ソフトシンセ)で収録することが主流となっている。
118 </p>
119 <p>
120 ソフトシンセのマルチコア化は進んでいる。しかし、現状としてはマルチコアで駆動しているわけではなく、1つのコアだけに負荷がかかるものが多い。
121 </p>
122 <p>
123 作曲をする上ではソフトシンセを複数立ち上げることが基本となっている。
124 また、オシレーターの複数使用や Filter による波形編集を重ねると計算量が大きくなっていくため、ソフトシンセ単体の動作を軽量化する必要がある。<br>
125 </p>
126 <p>
127 また、実用的なシンセサイザーは入力に対するレスポンスが必須となるので、計算量が多くなっても入力から出力までの遅延を抑える必要がある。
128 </p>
129 <p>
130 (軽量化しながら音を良くしたいが、抽象的すぎて評価する点がみつけづらい)<br>
131 音がいいって何??<br>
132 評価どうするの??
133 </p>
134 </div>
135
136
137 <div id="cover">
138 <h1>今週までの作業</h1>
139 <ul>
140 <li>
141 Cerium にて SDL_audio.h を使用して音を出せるようにした。(単音出力)
142 </li>
143 <li>
144 三角波、矩形波の実装
145 </li>
146 <li>
147 MIDI コントローラーからの入力を受け付ける(途中)
148 </li>
149 </ul>
150 </div>
151
152 <div id="cover">
153 <h1>SDL</h1>
154 <ul>
155 <li>
156 SDL : Simple DirectMedia Layer<br>
157 マルチメディア関係のソフトウェアを開発するための、グラフィックやサウンド等の API を提供するライブラリ。
158 </li>
159 <li>
160 Windows, Mac OS X, Linux, iOS, Android をサポート
161 </li>
162 <li>
163 C,C++<br>
164 C#,Python もいけるみたい??
165 </li>
166 </ul>
167 </div>
168
169 <div id="cover">
170 <h1>SDL_audio.h(1/3)</h1>
171 <ul>
172 <li>
173 SDL に含まれている、オーディオ回りのライブラリ
174 </li>
175 <li>
176 オーディオ情報(音量、ステレオ、sampling rateなど)を SDL_AudioSpec(構造体)として持っている。
177 </li>
178 <pre>
179 <code>
180 typedef struct SDL_AudioSpec {
181 int freq; /** DSP frequency -- samples per second */
182 Uint16 format; /** Audio data format */
183 Uint8 channels; /** Number of channels: 1 mono, 2 stereo */
184 Uint8 silence; /** Audio buffer silence value (calculated) */
185 Uint16 samples; /** Audio buffer size in samples (power of 2) */
186 Uint16 padding; /** Necessary for some compile environments */
187 Uint32 size; /** Audio buffer size in bytes (calculated) */
188 void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len);
189 void *userdata;
190 } SDL_AudioSpec;
191 </code>
192 </ul>
193 </pre>
194 </div>
195
196 <div id="cover">
197 <h1>SDL_audio.h(2/3)</h1>
198 <ul>
199 <li>
200 SDL_AudioSpec を SDL_OpenAudio(SDL_AudioSpec *desired, SDL_AudioSpec *obtained);という関数に渡すことによって、音が再生される。
201 </li>
202 <pre>
203 <code>
204 SDL_AudioSpec Desired;
205 SDL_AudioSpec Obtained;
206
207 int main(int argc, char *argv[])
208 {
209 printf("Freq:%f\n",Frequency);
210 Desired.freq= 44100; /* Sampling rate: 44100Hz */
211 Desired.format= AUDIO_S16LSB; /* 16-bit signed audio */
212 Desired.channels= 1; /* Mono */
213 Desired.samples= 8192; /* Buffer size: 8K = 0.37 sec. */
214 Desired.callback= callback;
215 Desired.userdata= NULL;
216
217 SDL_OpenAudio(&Desired, &Obtained);
218 SDL_PauseAudio(0);
219 SDL_Delay(200);
220 SDL_Quit();
221 return 0;
222 }
223 </code>
224 </ul>
225 </pre>
226 </div>
227
228 <div id="cover">
229 <h1>SDL_audio.h(3/3)</h1>
230 <ul>
231 <li>
232 SDL_AudioSpecにSDLCALL 関数が含まれている。ここで、音の波形を生成しておき、 SDL_OpenAudioにて音を再生する。
233 </li>
234 <pre>
235 <code>
236 void callback(void *userdata,Uint8 *stream,int len){
237
238 AudioDataPtr au = (AudioData*)userdata;
239
240 char *waveform_name = au->waveform_name;
241 double frequency = au->frequency;
242 int volume = au->volume;
243 static unsigned int step = 0;
244 Uint16 *frames = (Uint16 *) stream;
245 int framesize = len / 2;
246
247 if(strcmp(waveform_name, "tri")){
248
249 for (int i = 0; i < framesize ; i++, step++){
250 frames[i] = tri(step * frequency / Obtained.freq) * volume ;
251 }
252
253 }else if(strcmp(waveform_name, "sqr")){
254
255 for (int i = 0; i < framesize ; i++, step++){
256 frames[i] = square(step * frequency / Obtained.freq) * volume ;
257 }
258
259 }
260 }
261 </code>
262 </ul>
263 </pre>
264 </div>
265
266
267 <div id="cover">
268 <h1>三角波、矩形波の生成</h1>
269
270 <ul>
271 <li>矩形波</li>
272 <pre>
273 <code>
274 double square(double t){
275 double decimal_part = t - abs(t);
276 return decimal_part < 0.5 ? 1 : -1;
277 }
278 </code>
279 </pre>
280
281 <li>三角波</li>
282 <pre>
283 <code>
284 double tri(double t){
285
286 double decimal_part = t - abs(t);
287
288 if(abs(t) % 2 != 0){
289 return decimal_part < 0.5 ? decimal_part : 1 - decimal_part;
290 }else{
291 return decimal_part < 0.5 ? -decimal_part : 1 - decimal_part;
292 }
293 }
294 </code>
295 </ul>
296 </pre>
297 </div>
298
299
300
301 <div id="cover">
302 <h1>いましていること</h1>
303 <ul>
304 <li>
305 MIDI I/O は PortMidi を使用して実装中である。
306 </li>
307 <li>
308 Multi Platform 対応、
309 Windows (MME)、
310 Mac (CoreMIDI)、
311 Linux (ALSA)
312 </li>
313 </ul>
314 </pre>
315 </div>
316
317 </div> <!-- presentation -->
318 </body>
319 </html>