<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ひにけにXNA : オーディオ</title><link>http://blogs.msdn.com/ito/archive/tags/_AA30FC30C730A330AA30_/default.aspx</link><description>Tags: オーディオ</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>XACT3の新機能</title><link>http://blogs.msdn.com/ito/archive/2009/07/10/xact3.aspx</link><pubDate>Sat, 11 Jul 2009 05:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9829259</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ito/comments/9829259.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9829259</wfw:commentRss><description>&lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;XACTプロジェクトファイル、XAPファイルのアップデート&lt;/h3&gt;  &lt;p&gt;XNA Game Studio 3.1ではXACTのバージョンが3へと更新されました。XNA Game Studio 3.0で作ったプロジェクトをそのままコンパイルするときには問題ありませんが、3.1へアップグレードし、そのプロジェクト内にXACT2で作ったXAPファイルが含まれている場合、コンパイル時に以下のエラーメッセージが表示されます。&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/xact3_105AF/image_3.png" width="668" height="139" mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/xact3_105AF/image_3.png" /&gt; &lt;/p&gt;  &lt;p&gt;XACT2で作られたXAPファイルは&lt;strong&gt;XACT3&lt;/strong&gt;ツール上で読み込み、保存することでXACT3用のXAPファイルへと更新できます。XACT3ツールはスタートメニュー/XNA Game Studio 3.1/Tools/Microsoft Cross-Platform Audio Creation Tool 3 (XACT3)を選択することで起動できます。&lt;/p&gt;  &lt;p&gt;XACT3ツール上でXACT2で作られたXAPファイルを読み込むと、以下のメッセージが表示されます。意味的には「このプロジェクトファイルのバージョンは古いけど、保存すると更新するよん、でも更新すると古いツールでは読めなくなるから注意してね」といった感じです。&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/xact3_105AF/image_6.png" width="524" height="284" mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/xact3_105AF/image_6.png" /&gt; &lt;/p&gt;  &lt;p&gt;OKボタンを押した後に、File/Save Projectでプロジェクトを保存します。&lt;/p&gt;  &lt;h3&gt;XACT3の新機能&lt;/h3&gt;  &lt;p&gt;XACT3では以下の二つの機能が追加されました。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;xWMAの追加 &lt;/li&gt;    &lt;li&gt;トラック単位のフィルターコントロール&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;xWMAは&lt;a href="http://ja.wikipedia.org/wiki/Windows_Media_Audio" target="_blank" mce_href="http://ja.wikipedia.org/wiki/Windows_Media_Audio"&gt;WMA&lt;/a&gt;から派生したエンコード方式でXMAエンコード方式よりも更に良い圧縮率を実現できるエンコード方式です。ただし、XMAエンコード方式よりCPU負荷が高いので、BGMや台詞といった音声データを再生するのに向いています。CPU負荷が高くなりますが、Xbox 360上ではゲームのメインスレッド以外のコアでデコーディングするので、ゲーム速度への影響がないのも魅力的です。また、XMAはXbox 360上でしか使えませんが、xWMAはXbox 360、Windowsの両方で使用することができるので、両プラットフォームで音声データが同等のサイズになります。&lt;/p&gt;  &lt;p&gt;以下はそれぞれの方式で圧縮したサイズの例です。&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="134"&gt;圧縮方式&lt;/td&gt;        &lt;td valign="top" width="135"&gt;サイズ&lt;/td&gt;        &lt;td valign="top" width="129"&gt;圧縮率&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="134"&gt;PCM(オリジナル)&lt;/td&gt;        &lt;td valign="top" width="135"&gt;15.0MB&lt;/td&gt;        &lt;td valign="top" width="129"&gt;100%&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="134"&gt;ADPCM&lt;/td&gt;        &lt;td valign="top" width="135"&gt;4.1MB&lt;/td&gt;        &lt;td valign="top" width="129"&gt;27%&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="134"&gt;XMA&lt;/td&gt;        &lt;td valign="top" width="135"&gt;1.33MB&lt;/td&gt;        &lt;td valign="top" width="129"&gt;8.9%&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="134"&gt;xWMA&lt;/td&gt;        &lt;td valign="top" width="135"&gt;1.02MB&lt;/td&gt;        &lt;td valign="top" width="129"&gt;6.8%&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;xWMAの使い方は&lt;a href="http://blogs.msdn.com/ito/archive/2007/05/29/xact-tips.aspx" target="_blank" mce_href="http://blogs.msdn.com/ito/archive/2007/05/29/xact-tips.aspx"&gt;以前紹介した圧縮方式の指定の仕方&lt;/a&gt;と一緒です。XACT2ではPCM/ADCPM/XMAの三種類しか指定できなかったのが、XACT3では以下のようにxWMAが追加されたので、Compression Presetsのプロパティで形式を選択し、WaveBankで選択したWaveプロパティでプリセットを設定します。&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/xact3_105AF/image10.png" width="274" height="437" mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/xact3_105AF/image_thumb_2.png" /&gt;&lt;/p&gt;  &lt;p&gt;注意点としてはxWMA形式はストリーミング用のWave Bank内のWaveのみにしか適用できません。インメモリ形式のWave Bankで使用すると実行時にWave Bank初期化に失敗し、例外が発生します。&lt;/p&gt;  &lt;p&gt;トラック単位のフィルター処理は、Sound Bank内のSoundを選択したときに右上に表示されるトラックに対してフィルター効果を追加できるようになりました。例えば室内コンサート会場の外にいたり、水中に潜っている場合、聞こえてくるのはオリジナル音の低音部のみなのでLow Passフィルターを使うこで同じ効果を表現できます。また、イヤホンで音楽を聴いている人のそばにいるときに聞こえるのは元の音楽の高音部分なのでHigh Passフィルターを設定するといったことができます。&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/xact3_105AF/image_thumb_3.png" width="181" height="236" mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/xact3_105AF/image_thumb_3.png" /&gt;&lt;/p&gt;  &lt;p&gt;これらのパラメーターはRPC(Real-time Parameter Control)で設定できるので、ゲームの状況によってダイナミックに変化させることができます。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9829259" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/XACT/default.aspx">XACT</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.1/default.aspx">XNA 3.1</category><category domain="http://blogs.msdn.com/ito/archive/tags/_AA30FC30C730A330AA30_/default.aspx">オーディオ</category></item><item><title>XNA Game Studio 3.1のSoundEffect変更点</title><link>http://blogs.msdn.com/ito/archive/2009/06/30/soundeffect-3-1.aspx</link><pubDate>Wed, 01 Jul 2009 02:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9810143</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ito/comments/9810143.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9810143</wfw:commentRss><description>&lt;H3&gt;XNA Game Studio 3.1のSoundEffect&lt;/H3&gt;
&lt;P&gt;ゲームで使用する効果音を簡単に再生するためにXNA Game Studio 3.0で導入されたSoundEffect機能がありますが、この機能は以下の二つのシナリオを実現するようにデザインされました。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;簡易再生(Fire &amp;amp; forget)&lt;/STRONG&gt;: プログラムは単にPlayメソッドを呼ぶだけ。後は効果音が鳴り終わった後に自動的にメモリ開放処理をしてくれる機能&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;生成と設定(Create &amp;amp; configure):&lt;/STRONG&gt; 効果音を鳴らしている間に、音量、再生ピッチ、パンなどのさまざまなパラメーターを自由に設定できる機能。細かい設定ができる代わりに、プログラム側で再生中のインスタンスの保持、管理をする必要がある&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;この二つのシナリオを実現する為に、XNA GS 3.0では&lt;STRONG&gt;SoundEffect.Play&lt;/STRONG&gt;、&lt;STRONG&gt;SoundEffect.Play3D&lt;/STRONG&gt;メソッドは&lt;STRONG&gt;SoundEffectInstance&lt;/STRONG&gt;オブジェクトを返すようになっていました。再生中に設定を変更したい場合は、このインスタンスに対して処理をします。簡易再生させたい場合はインスタンスを保持しないでおきます。この場合、次にガーベージコレクション(GC)が発生した時に再生が終了したインスタンスを破棄するようになっていました。&lt;/P&gt;
&lt;P&gt;この方法には以下の二つの問題がありました。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Play/Play3Dメソッドには、プログラムが簡易再生をしたいのか、細かい設定をしたいのかを知る術がないので常にSoundEffectInstanceを生成していました。これは簡易再生をしている場合に常に不必要なメモリ確保が起きていることになります。&lt;/LI&gt;
&lt;LI&gt;確保されたSoundEffectInstanceはGCが発生された時に再生が終了しているインスタンスを自動的に破棄されるようになっています。GCがいつ発生するかはゲームがどのようにメモリを確保するかによって左右されます。GCの不必要な発生はゲームのパフォーマンスに影響するので、極力GC発生を抑えるようにプログラミングするのが望ましいのですが、GC発生数が少ないと、SoundEffectinstanceを開放する機会が減るのことになるので、最終的には同時再生できる効果音の上限に達してしまいます。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;XNA GS 3.1では、この二つのシナリオを明確に分けることで、この問題を解決しました。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;SoundEffect.Playメソッドは簡易再生専用のメソッドとなり、SoundEffectInstanceではなく、bool値を返すようになりました。このbool値は単純に再生が成功したかを示します。これで不必要なメモリ確保がなくなりました。また、このメソッドを使った場合はループ再生ができないようになっています。&lt;/LI&gt;
&lt;LI&gt;生成と設定のシナリオ用に&lt;STRONG&gt;SoundEffect.CreateInstance&lt;/STRONG&gt;メソッドが追加されました。このメソッドはSoundEffectInstanceを返すので、このオブジェクトを介して音量、ピッチ、パンなどを設定することができます。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;SoundEffect.Play3Dメソッドは無くなりました。3Dサウンドを再生する場合は、SoundEffect.CreateInsntaceメソッドを使い、&lt;STRONG&gt;SoundEffectInstance.Apply3D&lt;/STRONG&gt;メソッドを使用します。3Dサウンドは簡易再生することができません。&lt;/P&gt;
&lt;P&gt;また、XNA GS 3.0では再生数が上限に達したときに更に効果音を再生しようとするとInstancedPlayLimitException例外が発生しました。XNA GS 3.1でもCreateInstanceメソッドを使った場合には同じように例外が発生しますが、簡易再生の場合は例外を発生せずに単にbool値を返すようになっています。ですから、簡易再生時にいちいちtry～catchブロックを書く必要がなくなりました。&lt;/P&gt;
&lt;P&gt;原文: &lt;BR&gt;&lt;A title=http://blogs.msdn.com/shawnhar/archive/2009/06/12/soundeffect-changes-in-xna-game-studio-3-1.aspx href="http://blogs.msdn.com/shawnhar/archive/2009/06/12/soundeffect-changes-in-xna-game-studio-3-1.aspx" mce_href="http://blogs.msdn.com/shawnhar/archive/2009/06/12/soundeffect-changes-in-xna-game-studio-3-1.aspx"&gt;http://blogs.msdn.com/shawnhar/archive/2009/06/12/soundeffect-changes-in-xna-game-studio-3-1.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9810143" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+_D530EC30FC30E030EF30FC30AF30_/default.aspx">XNA フレームワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.1/default.aspx">XNA 3.1</category><category domain="http://blogs.msdn.com/ito/archive/tags/_AA30FC30C730A330AA30_/default.aspx">オーディオ</category></item></channel></rss>