<?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; 数学</title>
	<atom:link href="http://blog.hi-farm.net/category/%e6%95%b0%e5%ad%a6/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>Mac OS X Leopard環境でscilabのplaysndっぽい関数を作る。</title>
		<link>http://blog.hi-farm.net/2008/12/18/mac-os-x-leopard%e7%92%b0%e5%a2%83%e3%81%a7scilab%e3%81%aeplaysnd%e3%81%a3%e3%81%bd%e3%81%84%e9%96%a2%e6%95%b0%e3%82%92%e4%bd%9c%e3%82%8b%e3%80%82/</link>
		<comments>http://blog.hi-farm.net/2008/12/18/mac-os-x-leopard%e7%92%b0%e5%a2%83%e3%81%a7scilab%e3%81%aeplaysnd%e3%81%a3%e3%81%bd%e3%81%84%e9%96%a2%e6%95%b0%e3%82%92%e4%bd%9c%e3%82%8b%e3%80%82/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 19:47:59 +0000</pubDate>
		<dc:creator>hi-farm.net</dc:creator>
				<category><![CDATA[audio]]></category>
		<category><![CDATA[scilab]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[scilab mac playsnd]]></category>

		<guid isPermaLink="false">http://blog.hi-farm.net/?p=91</guid>
		<description><![CDATA[今回は前回のpostに引き続きscilabについて。
scilabには、コマンドラインからサウンドをならす関数である、playsndが最初から定義されていて、変数でサイン波とかを用意してplaysndに突っ込むと音がなる [...]]]></description>
			<content:encoded><![CDATA[<p>今回は前回のpostに引き続きscilabについて。</p>
<p>scilabには、コマンドラインからサウンドをならす関数である、playsndが最初から定義されていて、変数でサイン波とかを用意してplaysndに突っ込むと音がなる、という仕組みなのですが、Macの場合はなぜだかそのままでは使う事ができません。</p>
<p>本当は、<a href="http://science6.2ch.net/test/read.cgi/kikai/1068735555/108n-" target="_blank">http://science6.2ch.net/test/read.cgi/kikai/1068735555/108n-</a></p>
<p>に書いているようにすればplaysndを使えるようになるらしいのですが、僕の環境ではできなかったので、代わりに自分でplaysnd関数もどきを定義しよう、と考えました。その手順からテストするまでを記述します。</p>
<p>当然、Macであることを前提とします。</p>
<p> </p>
<p>1 playsnd.sciを開く。</p>
<p>playsnd.sciはscilab.appを右クリック（Control+クリック）し、「パッケージの内容を表示」を選択、その後、「Contents/Resources/macros/sound/playsnd.sci」と進み、ファイルをテキストエディタか何かで開く。</p>
<p> </p>
<p>すると、どうやらplaysndは</p>
<p> </p>
<ol>
<li>&#8220;TMPDIR/_playsnd_.wav&#8221;というファイルを生成</li>
<li>PlaySound関数で直ぐに再生</li>
</ol>
<div>ということを行って音を再生する機能を実現している、とわかります。</div>
<div>次に色々とif文の記述がありますが、どこがMacに関係するのかを調べましょう。</div>
<p> </p>
<p>しばらく眺めると、12行目あたりからが怪しい、とわかります。（理由は、12行目のelseに対応するif文に、&#8221;MSDOS&#8221;と書いているから、12行目以降はWindows以外を指しているんだろうな、と検討をつける事ができます。だってMac OS XってBSDベースでしょ。）</p>
<p>ここを見ると、「/dev/audio」と書かれているところがあります。</p>
<p><img class="aligncenter size-medium wp-image-92" title="devicon" src="http://blog.hi-farm.net/wp-content/uploads/2008/12/devicon.jpg" alt="" width="138" height="139" /></p>
<p>が、まずこの階層は、デフォルトではないと思いますし、なんか別のアイコンが表示されていて、/devを作るのは難しいと思うので、ここでは、/audiodevというフォルダを作り、そこにオーディオファイルを作成します。</p>
<p> </p>
<p>次に、なぜか僕の環境ではwavファイルを扱うsavewave, rwaveなどが使えなかったので、前回のポストでも使った、.auファイルを生成してならすことにします。</p>
<p>.auファイルの書き出しに関しては、まさに前回のauwriteを使うのですが、では再生はどうすれば良いでしょうか。</p>
<p> </p>
<p>幸いにもシェルぽく使えるunix関数があるので、コマンドラインで音を鳴らせるプログラムと.auファイルを指定する、という方針にします。</p>
<p> </p>
<h3>コマンドラインからオーディオファイルを鳴らすプログラムを探す</h3>
<p style="text-align: center;"><a href="http://blog.hi-farm.net/wp-content/uploads/2008/12/afplay.tiff"><img class="size-medium wp-image-93 aligncenter" title="afplay" src="http://blog.hi-farm.net/wp-content/uploads/2008/12/afplay.tiff" alt="" width="183" height="178" /></a></p>
<p>ここではコマンドラインからオーディオファイルを鳴らすプログラムとしては、afplayをつかう事にします。</p>
<p>afplayに関しては、<a href="http://www.sonasphere.com/blog/?p=40" target="_blank">ここ</a>が詳しいです。（こちらはOctaveでの例ですね。）</p>
<p>で、afplayにパスを通します。（.bash_profileとかをいじって下さいね。）</p>
<p> </p>
<p>これでコマンドラインからオーディオファイルを鳴らす事ができるようになりましたので、あとは独自に定義したplaysoundという関数を作成します。</p>
<p> </p>
<h3>playsndライクな関数、playsoundを作成する</h3>
<p> </p>
<p>それでは、playsound関数を作成しましょう。</p>
<p>といっても、<span style="color: #ff0000;"><strong>playsnd関数をちょこっといじるだけ</strong></span>です。</p>
<p> </p>
<p> </p>
<ol>
<li>Macintosh HD直下に、scilabというフォルダを作成します。</li>
<li>1.で作成したフォルダに、&#8221;playsound.sci&#8221;というファイルを作成します。</li>
<li>2.で作成したファイルに下記のように記述し、保存します。</li>
</ol>
<div>
<div>function []=<strong><span style="color: #ff0000;"><em>playsound</em></span></strong>(y,rate,bits,aplay)</div>
<div>// play signal y at sample rate rate </div>
<div>// bits is unused </div>
<div>  [lhs,rhs]=argn(0);</div>
<div>  if rhs &lt;= 3 aplay=&#8217;aplay&#8217;; end </div>
<div>  if rhs &lt;= 2 bits=16; end </div>
<div>  if rhs &lt;= 1 rate=22050; end </div>
<div>  if MSDOS  then</div>
<div>    savewave(TMPDIR+&#8217;/_playsnd_.wav&#8217;,y,rate);</div>
<div>    PlaySound(TMPDIR+&#8217;/_playsnd_.wav&#8217;);      </div>
<div>    return </div>
<div>  else</div>
<div>    if aplay&lt;&gt;&#8217;<span style="color: #ff0000;"><strong><em>/audiodev</em></strong></span>&#8216; then </div>
<div>      // should send aplay to PlaySound </div>
<div><span style="color: #ff0000;"><em><strong>      auwrite(y, rate, &#8216;/audiodev/_playsnd_.au&#8217;);</strong></em></span></div>
<div><span style="color: #ff0000;"><em><strong>      unix(&#8217;afplay /audiodev/_playsnd_.au&#8217;);</strong></em></span></div>
<div>    else</div>
<div>      [fp,www] = mopen(&#8217;<span style="color: #ff0000;"><em><strong>/devaudio</strong></em></span>&#8216;,&#8217;wb&#8217;,0);</div>
<div>      if www&lt;0 then </div>
<div><span> </span>fp = -1;</div>
<div>      end</div>
<div>      if fp==(-1) then</div>
<div><span> </span>disp(&#8217;Audio capabilities not available&#8217;);</div>
<div><span> </span>return</div>
<div>      end</div>
<div>      mput(lin2mu(y),&#8217;uc&#8217;,fp);</div>
<div>      mclose(fp);</div>
<div>    end</div>
<div>  end</div>
<div>endfunction</div>
</div>
<div>これで/audiodevというところに_playsnd_.auというファイルを作成し、それを再生するという関数playsoundを作成できました。</div>
<h3>実際にplaysound関数を使ってみる</h3>
<div>それでは実際に使ってみましょう。</div>
<div>1. まず、なんでもいいのでscilabからファイルを開く。</div>
<div>2. 下記の内容を記述する。</div>
<div>
<div> //&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; test playsound function</div>
<div> <em>getf(&#8217;/scilab/playsound.sci&#8217;);<span style="white-space:pre"> </span>// 1</em></div>
<div> sfrq = 22050;</div>
<div> while(1)</div>
<div>    state = input(&#8217;play sound?&#8217;);</div>
<div>    if state == [] then break end;</div>
<div>    frq = 440;</div>
<div>    T = 1/sfrq;</div>
<div>    tmax = 3;</div>
<div>    tnum = tmax*sfrq;</div>
<div>    </div>
<div>    k = 0: 1: tnum;</div>
<div>    ys = cos(2 * %pi * frq * k * T);</div>
<div>    ymax = max(abs(ys));</div>
<div>    ys = ys/ymax;</div>
<div>    <em>playsound(ys);<span style="white-space:pre"> </span>// 2</em></div>
<div>   end</div>
</div>
<div>3. Executeから実行する。</div>
<div>すると</div>
<div>play Sound?&#8211;&gt;</div>
<div>となるので、何かしら1でも何でもいいので入力し、enterを押します。</div>
<div>すると、440Hzで3秒間音がなると思います。</div>
<div>実際に使う時のポイントとしては、</div>
<div>getf関数で先ほど作ったファイルの参照を入れる事くらいでしょうか。</div>
<div>やっとこれからサンプルを触りながら波形の勉強ができる！！やった！</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.hi-farm.net/2008/12/18/mac-os-x-leopard%e7%92%b0%e5%a2%83%e3%81%a7scilab%e3%81%aeplaysnd%e3%81%a3%e3%81%bd%e3%81%84%e9%96%a2%e6%95%b0%e3%82%92%e4%bd%9c%e3%82%8b%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>唐突にMac版のScilabでのオーディオ書き出し。</title>
		<link>http://blog.hi-farm.net/2008/12/16/%e5%94%90%e7%aa%81%e3%81%abmac%e7%89%88%e3%81%aescilab%e3%81%a7%e3%81%ae%e3%82%aa%e3%83%bc%e3%83%87%e3%82%a3%e3%82%aa%e6%9b%b8%e3%81%8d%e5%87%ba%e3%81%97%e3%80%82/</link>
		<comments>http://blog.hi-farm.net/2008/12/16/%e5%94%90%e7%aa%81%e3%81%abmac%e7%89%88%e3%81%aescilab%e3%81%a7%e3%81%ae%e3%82%aa%e3%83%bc%e3%83%87%e3%82%a3%e3%82%aa%e6%9b%b8%e3%81%8d%e5%87%ba%e3%81%97%e3%80%82/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 04:30:47 +0000</pubDate>
		<dc:creator>hi-farm.net</dc:creator>
				<category><![CDATA[audio]]></category>
		<category><![CDATA[scilab]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[auwrite]]></category>
		<category><![CDATA[swave]]></category>

		<guid isPermaLink="false">http://blog.hi-farm.net/?p=87</guid>
		<description><![CDATA[scilabでのオーディオファイルの書き出しについて。
Windows環境では、wavが標準なので、swaveとか、rwaveなんてコマンドがあり、このコマンドに値を渡すとファイルの書き出しやら読み込みを行えています。
 [...]]]></description>
			<content:encoded><![CDATA[<p>scilabでのオーディオファイルの書き出しについて。</p>
<p>Windows環境では、wavが標準なので、swaveとか、rwaveなんてコマンドがあり、このコマンドに値を渡すとファイルの書き出しやら読み込みを行えています。</p>
<p>書き込みを例にとると：</p>
<p>swave(&#8217;ファイル名&#8217;, ［書き出す対象となる変数］, ［書き出す周波数］);</p>
<p>ですが、Macの場合に標準でついている関数は、.auファイルを読み書きするので、</p>
<p>auwrite(［書き出す対象となる変数］, ［書き出す周波数］, &#8216;ファイル名&#8217;);　　// 拡張子は当然、&#8221;.au&#8221;</p>
<p>となります。</p>
<p>引数の順番が違うのね。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hi-farm.net/2008/12/16/%e5%94%90%e7%aa%81%e3%81%abmac%e7%89%88%e3%81%aescilab%e3%81%a7%e3%81%ae%e3%82%aa%e3%83%bc%e3%83%87%e3%82%a3%e3%82%aa%e6%9b%b8%e3%81%8d%e5%87%ba%e3%81%97%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
