<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hi-farm blog &#187; dynamic sound generation</title>
	<atom:link href="http://blog.hi-farm.net/tag/dynamic-sound-generation/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hi-farm.net</link>
	<description>ActionScript 3.0 , AIR , FLEXからCocoa, OpenGL</description>
	<lastBuildDate>Sun, 05 Sep 2010 20:05:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Spark 勉強会 #5で話して来ました。</title>
		<link>http://blog.hi-farm.net/2008/11/29/spark-%e5%8b%89%e5%bc%b7%e4%bc%9a-5%e3%81%a7%e8%a9%b1%e3%81%97%e3%81%a6%e6%9d%a5%e3%81%be%e3%81%97%e3%81%9f%e3%80%82/</link>
		<comments>http://blog.hi-farm.net/2008/11/29/spark-%e5%8b%89%e5%bc%b7%e4%bc%9a-5%e3%81%a7%e8%a9%b1%e3%81%97%e3%81%a6%e6%9d%a5%e3%81%be%e3%81%97%e3%81%9f%e3%80%82/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 14:45:41 +0000</pubDate>
		<dc:creator>hi-farm.net</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Actionscript3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[astro]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[dynamic sound generation]]></category>
		<category><![CDATA[effect]]></category>
		<category><![CDATA[fourier transform]]></category>

		<guid isPermaLink="false">http://blog.hi-farm.net/?p=84</guid>
		<description><![CDATA[本当にものすごく久々の投稿になってしまいました。
先日、11/26に行われた、Spark勉強会で、Dynamic Sound Generationの発表をしてきたので、その資料をアップします。
（※再生には音楽ファイルを [...]]]></description>
			<content:encoded><![CDATA[<p>本当にものすごく久々の投稿になってしまいました。</p>
<p>先日、11/26に行われた、Spark勉強会で、Dynamic Sound Generationの発表をしてきたので、その資料をアップします。</p>
<p>（※再生には音楽ファイルを必要なので、各自用意して下さい。）</p>
<p><a title="ソース一式" href="http://www.hi-farm.net/works/spark5/SoundGeneration_spark.zip" target="_blank">ソース一式</a></p>
<p><a title="発表スライド" href="http://www.hi-farm.net/works/spark5/presentation.pdf" target="_blank">PDF</a></p>
<p>「フーリエ変換を使わない、エフェクトのかけかた」というタイトル通り、信号処理には本来フーリエ変換は欠かせないものですが、フーリエ変換の話しになると一気に敷居が高くなる（というか自分が今勉強している状態なので、この様な発表になりました。</p>
<p> </p>
<p>ただ、やはりフーリエ変換を使えていない＆勉強途中での発表になってしまったので、波形が途切れてしまっているところがあるようで、ぷつぷつと途切れる音が結構聴こえてしまいます。。。</p>
<p>あくまでご参考程度にしていただければと思います。</p>
<p> </p>
<p> </p>
<p>［ファイル構成について］</p>
<p> </p>
<p>SoundGeneration.mxml：ラジオボタンやスライダーがついているView + 実際に音を鳴らすファイル</p>
<p>model/SoundObj.as：Dynamic Sound Generationを使って音楽を再生したり、エフェクトをかけたりするスクリプトを記述しているファイル。</p>
<p> </p>
<p>SoundObj.asに関しては、mxmlでも使いやすいように、IMXMLObjectインターフェイスを実装しています。</p>
<p> </p>
<p>［SoundObj.asの仕組み］</p>
<p>_currentEffectというプロパティを切り替えて、どのエフェクトをかけるのかを選択します。</p>
<p> </p>
<p>extractメソッドを呼び出すたびに、bufferプロパティにデータを蓄えています。</p>
<p>これを使って、ディレイや逆再生を実現しています。</p>
<p> </p>
<p>なお、逆再生に関しては、こちらが大変参考になります。</p>
<div>次は、フーリエ変換からめてしっかりとエフェクトをかけられるようになりたいなあ。</div>
<div>フーリエ変換とエフェクトの掛け方を勉強できる機会があれば、是非参加したいです。</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.hi-farm.net/2008/11/29/spark-%e5%8b%89%e5%bc%b7%e4%bc%9a-5%e3%81%a7%e8%a9%b1%e3%81%97%e3%81%a6%e6%9d%a5%e3%81%be%e3%81%97%e3%81%9f%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[astro Dynamic Sound Generation] マウスで音程を変えるサンプル</title>
		<link>http://blog.hi-farm.net/2008/06/25/astro-dynamic-sound-generation-%e3%83%9e%e3%82%a6%e3%82%b9%e3%81%a7%e9%9f%b3%e7%a8%8b%e3%82%92%e5%a4%89%e3%81%88%e3%82%8b%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab/</link>
		<comments>http://blog.hi-farm.net/2008/06/25/astro-dynamic-sound-generation-%e3%83%9e%e3%82%a6%e3%82%b9%e3%81%a7%e9%9f%b3%e7%a8%8b%e3%82%92%e5%a4%89%e3%81%88%e3%82%8b%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 00:11:25 +0000</pubDate>
		<dc:creator>hi-farm.net</dc:creator>
				<category><![CDATA[Actionscript3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[astro]]></category>
		<category><![CDATA[dynamic sound generation]]></category>

		<guid isPermaLink="false">http://blog.hi-farm.net/?p=75</guid>
		<description><![CDATA[またまたDynamic Sound Generationです。
これは、mouseXの値をもとに、音程を変えるというサンプルです。
ちなみに、音のもとになるのはぜんかいのと同じ矩形波を使っています。
ソースは後ほど。
サ [...]]]></description>
			<content:encoded><![CDATA[<p>またまたDynamic Sound Generationです。</p>
<p>これは、mouseXの値をもとに、音程を変えるというサンプルです。</p>
<p>ちなみに、音のもとになるのはぜんかいのと同じ矩形波を使っています。</p>
<p>ソースは後ほど。</p>
<p><a href="http://www.hi-farm.net/astro/sound.swf" target="_blank">サンプル（音が鳴り、そしてボリューム等の調整はできないです）。</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hi-farm.net/2008/06/25/astro-dynamic-sound-generation-%e3%83%9e%e3%82%a6%e3%82%b9%e3%81%a7%e9%9f%b3%e7%a8%8b%e3%82%92%e5%a4%89%e3%81%88%e3%82%8b%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[astro Dynamic Sound Genration] 矩形波で遊んでみた。</title>
		<link>http://blog.hi-farm.net/2008/06/23/astro-dynamic-sound-genration-%e7%9f%a9%e5%bd%a2%e6%b3%a2%e3%81%a7%e9%81%8a%e3%82%93%e3%81%a7%e3%81%bf%e3%81%9f%e3%80%82/</link>
		<comments>http://blog.hi-farm.net/2008/06/23/astro-dynamic-sound-genration-%e7%9f%a9%e5%bd%a2%e6%b3%a2%e3%81%a7%e9%81%8a%e3%82%93%e3%81%a7%e3%81%bf%e3%81%9f%e3%80%82/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 18:25:10 +0000</pubDate>
		<dc:creator>hi-farm.net</dc:creator>
				<category><![CDATA[Actionscript3]]></category>
		<category><![CDATA[astro]]></category>
		<category><![CDATA[未分類]]></category>
		<category><![CDATA[dynamic sound generation]]></category>

		<guid isPermaLink="false">http://blog.hi-farm.net/?p=74</guid>
		<description><![CDATA[今回は色々とサンプルをつくってみながら書いてみます。
波形には色々とあるようですが、今回は、矩形波をいじってみました。
基本的なのは、これ。
ちなみに、512ってのはおまじないと思って下さい。
※サンプルFlash（音が [...]]]></description>
			<content:encoded><![CDATA[<p>今回は色々とサンプルをつくってみながら書いてみます。</p>
<p>波形には色々とあるようですが、今回は、矩形波をいじってみました。</p>
<p>基本的なのは、これ。</p>
<p>ちなみに、512ってのはおまじないと思って下さい。</p>
<p><a href="http://www.hi-farm.net/astro/delim1.swf" target="_blank">※サンプルFlash（音がなります。しかも制御できません。）</a></p>
<p><img style="vertical-align: middle; margin-top: 5px; margin-bottom: 5px;" src="http://www.hi-farm.net/astro/rect1.gif" alt="基本的な矩形波" width="295" height="145" /></p>
<p> </p>
<p>で、矩形の周期を半分にすると、こうなります。</p>
<p><a href="http://www.hi-farm.net/astro/delim2.swf" target="_blank">※サンプルFlash（こちらも音がなります。もちろん制御はできないです。）</a></p>
<p><img style="vertical-align: middle; margin-top: 5px; margin-bottom: 5px;" src="http://www.hi-farm.net/astro/rect2.gif" alt="半分周期の矩形波" width="295" height="145" /></p>
<p> </p>
<p>二つを聴き比べると、二つ目（周期が短い方）が音が高いですよね。</p>
<p>どうやら、周期が短いほど音が高くなる、という仕組みらしいです。</p>
<p> </p>
<p>と、いうことは、この周期を徐々に短くしていくと、どうなるんでしょう？</p>
<p><a href="http://www.hi-farm.net/astro/movedelim.swf" target="_blank">※サンプルFlash（音がなり、制御不能。今までと同様ですね。）</a></p>
<h3>一応、「徐々に音が高く」なりましたよね？</h3>
<p> </p>
<p>うんうん。</p>
<p>ということは、これらをうにょうにょすると、宇宙っぽくできるかな？Perfumeっぽい音が出せるかな？○タヤスタカ的な音をasだけで出す事ができるのかな？</p>
<p> </p>
<p>次は他のタイプの波形をいじってみようと思います。</p>
<p> </p>
<p>あ、それぞれのサンプルASも.txtとしてリンク貼っておくのでよかったらいじって下さいね。（ごめんなさい。コメントつけれてないです）</p>
<ol>
<li><a title="普通の矩形波" href="http://www.hi-farm.net/astro/delim1.txt" target="_blank">サンプル１（普通の矩形波）</a></li>
<li><a title="半分周期の矩形波" href="http://www.hi-farm.net/astro/delim2.txt" target="_blank">サンプル２（半分の矩形波）</a></li>
<li><a title="矩形波の周期が短くなる" href="http://www.hi-farm.net/astro/movedelim.txt" target="_blank">サンプル３（周期を動かしたやつ）</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.hi-farm.net/2008/06/23/astro-dynamic-sound-genration-%e7%9f%a9%e5%bd%a2%e6%b3%a2%e3%81%a7%e9%81%8a%e3%82%93%e3%81%a7%e3%81%bf%e3%81%9f%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[flash astro]Dynamic Sound Generation 2.</title>
		<link>http://blog.hi-farm.net/2008/06/13/flash-astrodynamic-sound-generation-2/</link>
		<comments>http://blog.hi-farm.net/2008/06/13/flash-astrodynamic-sound-generation-2/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 18:23:46 +0000</pubDate>
		<dc:creator>hi-farm.net</dc:creator>
				<category><![CDATA[Actionscript3]]></category>
		<category><![CDATA[astro]]></category>
		<category><![CDATA[actionscript3]]></category>
		<category><![CDATA[dynamic sound generation]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[sound]]></category>

		<guid isPermaLink="false">http://blog.hi-farm.net/?p=73</guid>
		<description><![CDATA[またまたですが、Flash Player10 astroのDynamic Sound Generationです。
ボタンを押すと、音が流れます。
パルス波の長さを時間で変えています。
注意：音を止める方法がないので、音を消したい場合はリロードして下さい。

 
これがasだけでできるってのが素晴らしい！！
今、個人的にはこの辺の機能が楽しいなあ。
 
コードはこんなです。
main.as
&#60;code&#62;
package
{
 
 import flash.net.*;
 import flash.display.*;
 import flash.media.*;
 import flash.events.*;
 
 [SWF(backgroundColor="0xeeeeee", frameRate="50", stageHeight="200")]
 public class main extends Sprite
 {
 private var snd:Sound;
 private var square:Sprite;
 private var sh:Number = 200;
 
 private var btn1:Sprite;
 private var btn2:Sprite;
 private var btn3:Sprite;
 private var btn4:Sprite;
 private var btn5:Sprite;
 private var btn6:Sprite;
 
 [...]]]></description>
			<content:encoded><![CDATA[<p>またまたですが、Flash Player10 astroのDynamic Sound Generationです。</p>
<p>ボタンを押すと、音が流れます。</p>
<p>パルス波の長さを時間で変えています。</p>
<p><span style="color: #ff0000;"><strong>注意：音を止める方法がないので、音を消したい場合はリロードして下さい。</strong></span></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="200" height="100" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.hi-farm.net/astro/dynamicsound2.swf" /><embed type="application/x-shockwave-flash" width="200" height="100" src="http://www.hi-farm.net/astro/dynamicsound2.swf"></embed></object></p>
<p> </p>
<p>これがasだけでできるってのが素晴らしい！！</p>
<p>今、個人的にはこの辺の機能が楽しいなあ。</p>
<p> </p>
<p>コードはこんなです。</p>
<p>main.as</p>
<p>&lt;code&gt;</p>
<div>package</div>
<div>{</div>
<div><span> </span></div>
<div><span> </span>import flash.net.*;</div>
<div><span> </span>import flash.display.*;</div>
<div><span> </span>import flash.media.*;</div>
<div><span> </span>import flash.events.*;</div>
<div><span> </span></div>
<div><span> </span>[SWF(backgroundColor="0xeeeeee", frameRate="50", stageHeight="200")]</div>
<div><span> </span>public class main extends Sprite</div>
<div><span> </span>{</div>
<div><span> </span>private var snd:Sound;</div>
<div><span> </span>private var square:Sprite;</div>
<div><span> </span>private var sh:Number = 200;</div>
<div><span> </span></div>
<div><span> </span>private var btn1:Sprite;</div>
<div><span> </span>private var btn2:Sprite;</div>
<div><span> </span>private var btn3:Sprite;</div>
<div><span> </span>private var btn4:Sprite;</div>
<div><span> </span>private var btn5:Sprite;</div>
<div><span> </span>private var btn6:Sprite;</div>
<div><span> </span></div>
<div><span> </span>public function main()</div>
<div><span> </span>{</div>
<div><span> </span>initBtn();</div>
<div><span> </span>}</div>
<div><span> </span>private function initBtn():void</div>
<div><span> </span>{</div>
<div><span> </span>btn = new Sprite();</div>
<div><span> </span></div>
<div><span> </span>drawBtn(btn);</div>
<div><span> </span>btn.buttonMode = true;</div>
<div><span> </span>addChild(btn);</div>
<div><span> </span>btn.width = btn.height = 20;</div>
<div><span> </span>btn.x = 0;</div>
<div><span> </span>btn.y = 0;</div>
<div><span> </span>btn.addEventListener(MouseEvent.CLICK, click1);</div>
<div><span> </span>}</div>
<div><span> </span>private function drawBtn(sp:Sprite):void</div>
<div><span> </span>{</div>
<div><span> </span>sp.graphics.beginFill(0xff0000,1);</div>
<div><span> </span>sp.graphics.drawRect(0, 0, 20, 20);</div>
<div><span> </span>sp.graphics.endFill();</div>
<div><span> </span>}</div>
<div><span> </span>private function click1(e:MouseEvent):void</div>
<div><span> </span>{</div>
<div><span> </span>init();</div>
<div><span> </span>doSamplesCallbackHandler(1);</div>
<div><span> </span>}</div>
<div><span> </span>private function init():void</div>
<div><span> </span>{</div>
<div><span> </span>snd = new Sound();</div>
<div><span> </span>if( snd.hasEventListener(&#8221;samplesCallback&#8221;))<span> </span>snd.removeEventListener(&#8221;samplesCallback&#8221;, samplesCallbackHandler);</div>
<div><span> </span>snd.addEventListener(&#8221;samplesCallback&#8221;, samplesCallbackHandler);</div>
<div><span> </span>snd.play();</div>
<div><span> </span>}</div>
<div><span> </span></div>
<div><span> </span>private function samplesCallbackHandler(e:SamplesCallbackEvent):void</div>
<div><span> </span>{</div>
<div><span> </span>doSamplesCallbackHandler(1);</div>
<div><span> </span>}</div>
<div><span> </span>private var rate:Number = 44100;</div>
<div><span> </span>private var freq:Number = 440;</div>
<div><span> </span>private var phase:Number = 0;</div>
<div><span> </span>private var count:Number = 1;</div>
<div><span> </span></div>
<div><span> </span>/**</div>
<div><span> </span> * generate wave data.</div>
<div><span> </span> */</div>
<div><span> </span>private function doSamplesCallbackHandler(type:int):void</div>
<div><span> </span>{</div>
<div><span> </span>//Voice.beep1();</div>
<div><span> </span>var freq:Number = 220;</div>
<div><span> </span>for( var i:uint=0; i &lt; 512; i++ )</div>
<div><span> </span>{</div>
<div><span> </span></div>
<div><span> </span>phase += freq/(rate);</div>
<div><span> </span></div>
<div><span> </span>var arrange:Number = 1;</div>
<div><span> </span>var a:Number = 1;</div>
<div><span> </span>if( i%2==0 )<span> </span>a = 1;</div>
<div><span> </span>arrange = a*count;</div>
<div><span> </span>var phaseAngle:Number = phase * arrange;</div>
<div><span> </span>var sample:Number = Math.sin(phaseAngle);</div>
<div><span> </span></div>
<div><span> </span>//ここで波形をつくってます。</div>
<div><span> </span>sample = beep1(i);</div>
<div><span> </span></div>
<div><span> </span>//左右チャンネルともに同じ波形。</div>
<div><span> </span>snd.samplesCallbackData.writeFloat(sample);</div>
<div><span> </span>snd.samplesCallbackData.writeFloat(sample);</div>
<div><span> </span>}</div>
<div><span> </span>delim++;</div>
<div><span> </span>if( delim &gt; 256 )<span> </span>delim = 0;</div>
<div><span> </span>}</div>
<div><span> </span></div>
<div><span> </span>private var delim:Number = 0;</div>
<div><span> </span>/**</div>
<div><span> </span> * generate beep1</div>
<div><span> </span> * @param i:uint wave counter.</div>
<div><span> </span> * @return Number</div>
<div><span> </span> */</div>
<div><span> </span>private function beep1(i:uint):Number</div>
<div><span> </span>{</div>
<div><span> </span>var res:Number =0;</div>
<div><span> </span>//delim++;</div>
<div><span> </span>//if( delim &gt; 256 )<span> </span>delim = 0;</div>
<div><span> </span></div>
<div><span> </span>//if( i &lt; 256 )<span> </span>res = 50;</div>
<div><span> </span>//else<span> </span>res = 0;</div>
<div><span> </span>if( i &lt; delim ) res = 50;</div>
<div><span> </span>else<span> </span>res = 0;</div>
<div><span> </span>return res;</div>
<div><span> </span>}</div>
<div><span> </span>}</div>
<div>}</div>
<p>&lt;/code&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hi-farm.net/2008/06/13/flash-astrodynamic-sound-generation-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
