view 2014/Aug_05th.html @ 31:5789a3236295

add 0728
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Tue, 21 Jul 2015 19:58:36 +0900
parents ff03dd29fd52
children
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=utf-8"> 
  <title>22st,July</title>

<!-- 
   Notes on CSS media types used:
 
   1) projection -> slideshow mode (display one slide at-a-time; hide all others)
   2) screen     -> outline mode (display all slides-at-once on screen) 
   3) print      -> print (and print preview)
  
   Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key

   Questions, comments?
   - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow    
-->

<!-- styles  -->
<style media="screen,projection">

html,
body,
.presentation { margin: 0; padding: 0; }

.slide { display: none;
         position: absolute;
         top: 0; left: 0; 
         margin: 0;
         border: none;
         padding: 2% 4% 0% 4%;         /* css note: order is => top right bottom left  */
         -moz-box-sizing: border-box;
         -webkit-box-sizing: border-box;
         box-sizing: border-box;
         width: 100%; height: 100%;    /* css note: lets use border-box; no need to add padding+border to get to 100% */
         overflow-x: hidden; overflow-y: auto;
         z-index: 2;
       }

.slide.current { display: block; }  /* only display current slide in projection mode */

.slide .stepcurrent { color: black; }
.slide .step        { color: silver; } /* or hide next steps e.g. .step { visibility: hidden; } */

.slide {
/*
  background-image: -webkit-linear-gradient(top, blue, aqua, blue, aqua);
  background-image: -moz-linear-gradient(top, blue, aqua, blue, aqua);
*/
}
</style>

<style media="screen">
.slide             { border-top: 1px solid #888; }
.slide:first-child { border: none;  }
</style>

<style media="print">
.slide    { page-break-inside: avoid; }
.slide h1 { page-break-after:  avoid; }
.slide ul { page-break-inside: avoid; }
</style>


<!-- add js lib (jquery) -->
<script src="js/jquery-1.7.min.js"></script>

<!-- S6 JS -->
<script src="js/jquery.slideshow.js"></script>
<script src="js/jquery.slideshow.counter.js"></script>
<script src="js/jquery.slideshow.controls.js"></script>
<script>
  $(document).ready( function() {
    Slideshow.init();
    
    // Example 2: Start Off in Outline Mode
    // Slideshow.init( { mode: 'outline' } );
    
    // Example 3: Use Custom Transition
    // Slideshow.transition = transitionScrollUp;
    // Slideshow.init();

    // Example 4: Start Off in Autoplay Mode with Custom Transition
    // Slideshow.transition = transitionScrollUp;
    // Slideshow.init( { mode: 'autoplay' } );
  } );
</script>

</head>
<body>


<div class="presentation">

  <div class='slide cover'>
  <table width="90%" height="90%" border="0" align="center">
  <tr>
  <td><div align="center">
      <h1>マルチコアソフトウェアシンセサイザー(仮)</h1>
      </div>
  </td>
  </tr>
      <tr>
      <td><div align="right">
          <name>Masataka Kohagura 22th June,2014</name>
      </div></td>
      </tr>
  </tr>
  </table>
  </div>


  <div id="cover">
    <h1>研究目的</h1>
    <p>
    コンピュータ上で作曲を行うときは、ハードウェアシンセサイザーの音を録音するのではなく、ソフトウェアシンセサイザー(以下ソフトシンセ)で収録することが主流となっている。
    </p>
    <p>
    ソフトシンセのマルチコア化は進んでいる。しかし、現状としてはマルチコアで駆動しているわけではなく、1つのコアだけに負荷がかかるものが多い。
    </p>
    <p>
    作曲をする上ではソフトシンセを複数立ち上げることが基本となっている。
    また、オシレーターの複数使用や Filter による波形編集を重ねると計算量が大きくなっていくため、ソフトシンセ単体の動作を軽量化する必要がある。<br>
    </p>
    <p>
    また、実用的なシンセサイザーは入力に対するレスポンスが必須となるので、計算量が多くなっても入力から出力までの遅延を抑える必要がある。
    </p>
    <p>
    (軽量化しながら音を良くしたいが、抽象的すぎて評価する点がみつけづらい)<br>
    音がいいって何??<br>
    評価どうするの??
    </p>
  </div>


  <div id="cover">
    <h1>今週までの作業</h1>
    <ul>
    <li>
    Cerium にて SDL_audio.h を使用して音を出せるようにした。(単音出力)
    </li>
    <li>
    三角波、矩形波の実装
    </li>
    <li>
    MIDI コントローラーからの入力を受け付ける(途中)
    </li>
    </ul>
  </div>

  <div id="cover">
    <h1>SDL</h1>
    <ul>
    <li>
    SDL : Simple DirectMedia Layer<br>
    マルチメディア関係のソフトウェアを開発するための、グラフィックやサウンド等の API を提供するライブラリ。
    </li>
    <li>
    Windows,  Mac OS X, Linux, iOS, Android をサポート
    </li>
    <li>
    C,C++<br>
    C#,Python もいけるみたい??
    </li>
    </ul>
  </div>

  <div id="cover">
    <h1>SDL_audio.h(1/3)</h1>
    <ul>
    <li>
    SDL に含まれている、オーディオ回りのライブラリ
    </li>
    <li>
    オーディオ情報(音量、ステレオ、sampling rateなど)を SDL_AudioSpec(構造体)として持っている。
    </li>
    <pre>
    <code>
typedef struct SDL_AudioSpec {
    int freq;          /** DSP frequency -- samples per second */
    Uint16 format;     /** Audio data format */
    Uint8  channels;   /** Number of channels: 1 mono, 2 stereo */
    Uint8  silence;    /** Audio buffer silence value (calculated) */
    Uint16 samples;    /** Audio buffer size in samples (power of 2) */
    Uint16 padding;    /** Necessary for some compile environments */
    Uint32 size;       /** Audio buffer size in bytes (calculated) */
    void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len);
    void  *userdata;
} SDL_AudioSpec;
    </code>
    </ul>
</pre>
  </div>

  <div id="cover">
    <h1>SDL_audio.h(2/3)</h1>
    <ul>
    <li>
    SDL_AudioSpec を SDL_OpenAudio(SDL_AudioSpec *desired, SDL_AudioSpec *obtained);という関数に渡すことによって、音が再生される。
    </li>
    <pre>
    <code>
SDL_AudioSpec Desired;
SDL_AudioSpec Obtained;

int main(int argc, char *argv[])
{
    printf("Freq:%f\n",Frequency);
    Desired.freq= 44100; /* Sampling rate: 44100Hz */
    Desired.format= AUDIO_S16LSB; /* 16-bit signed audio */
    Desired.channels= 1; /* Mono */
    Desired.samples= 8192; /* Buffer size: 8K = 0.37 sec. */
    Desired.callback= callback;
    Desired.userdata= NULL;

    SDL_OpenAudio(&Desired, &Obtained);
    SDL_PauseAudio(0);
    SDL_Delay(200);
    SDL_Quit();
    return 0;
}
    </code>
    </ul>
</pre>
  </div>

  <div id="cover">
    <h1>SDL_audio.h(3/3)</h1>
    <ul>
    <li>
    SDL_AudioSpecにSDLCALL 関数が含まれている。ここで、音の波形を生成しておき、 SDL_OpenAudioにて音を再生する。
    </li>
    <pre>
    <code>
void callback(void *userdata,Uint8 *stream,int len){

    AudioDataPtr au = (AudioData*)userdata;

    char *waveform_name = au->waveform_name;
    double frequency = au->frequency;
    int volume = au->volume;
    static unsigned int step = 0;
    Uint16 *frames = (Uint16 *) stream;
    int framesize = len / 2;

    if(strcmp(waveform_name, "tri")){

        for (int i = 0; i < framesize ; i++, step++){
            frames[i] = tri(step * frequency / Obtained.freq) * volume ;
        }

    }else if(strcmp(waveform_name, "sqr")){

        for (int i = 0; i < framesize ; i++, step++){
            frames[i] = square(step * frequency / Obtained.freq) * volume ;
        }

    }
}
    </code>
    </ul>
</pre>
  </div>


  <div id="cover">
    <h1>三角波、矩形波の生成</h1>

    <ul>
    <li>矩形波</li>
    <pre>
    <code>
double square(double t){
    double decimal_part = t - abs(t);
    return decimal_part < 0.5 ? 1 : -1;
}
    </code>
</pre>

    <li>三角波</li>
    <pre>
    <code>
double tri(double t){

    double decimal_part = t - abs(t);

    if(abs(t) % 2 != 0){
        return decimal_part < 0.5 ? decimal_part : 1 - decimal_part;
    }else{
        return decimal_part < 0.5 ? -decimal_part : 1 - decimal_part;
    }
}
    </code>
    </ul>
</pre>
  </div>



  <div id="cover">
    <h1>いましていること</h1>
    <ul>
    <li>
        MIDI I/O は PortMidi を使用して実装中である。
    </li>
    <li>
        Multi Platform 対応、
        Windows (MME)、
        Mac (CoreMIDI)、
        Linux (ALSA)
    </li>
    </ul>
</pre>
  </div>

</div> <!-- presentation -->
</body>
</html>