トップ «前の日(06-26) 最新 次の日(06-28)» 追記

SewiGの日記

2004|01|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|

2005-06-27 [月]

[Music][Video] Lia 1st Concert Lia's Cafe 'Prologue' at Shibuya O-East

さすがLiaさん、生でもハイクオリティの歌声を披露してくれました。まだ、ライブ慣れしてない感じですが、これからもがんばってほしいと思います。バンドアレンジされた楽曲もまた斬新で聴いてて面白いです。

ところで、DVD版はカットされすぎだと思うのですが。

本日のツッコミ(全1件) [ツッコミを入れる]

Icuhjbru [A kissaten is in on administrative leave with pay.There ar..]


2006-06-27 [火]

[C#][Programming] C#でサウンド(5)

DirectSoundを使う

C#でDirectXを利用する場合はDirectX9が前提になります。しかし、DirectXなら複数のサウンドも勝手にミックスしてくれたりしますし、もし描画にDirect3Dを使ってるならぜひあわせて使うといいでしょう。

まず、初期化。

Microsoft.DirectX.DirectSound.Deviceがデバイスのオブジェクトです。この辺はDirect3Dなんかと設計が統一されているので分かりやすいですね。それから、SecondaryBuffer。SetCooperativeLevelは強調レベルという優先度みたいな設定があるのですが、なぜか、引数にSystem.Windows.Forms.Controlを要求してきます。new Form()でも与えれば良さそうだけど、ここは真面目に親フォームを指定しておきましょう。SecondaryBufferがあるのだからPrimaryBufferも当然あるのですが、PrimaryBufferは意識する必要がありません。SecondaryBufferに書き込んだデータがしかるべきタイミングでPrimaryBufferに書き込まれこれが再生されます。

using Microsoft.DirectX.DirectSound;

Device device;
SecondaryBuffer buffer;

device = new Device();
device.SetCooperativeLevel(owner, CooperativeLevel.Normal);
BufferDescription desc = new BufferDescription();
buffer = new SecondaryBuffer(filename, desc, device);

なんか、SecondaryBufferのコンストラクタにファイル名を書き込むあたりに抽象度の高さを感じざるを得ませんが変更しないオーディオを再生させるだけならこれでもOK。もちろんメモリをオーディオの大きさだけ消費します。

再生は

buffer.Play(0, BufferPlayFlags.Default);

ループ再生なら

buffer.Play(0, BufferPlayFlags.Looping);

停止は

buffer.Stop();

ただし、停止後の再生箇所は停止位置からとなるので、もし最初から再生したければ、再生位置を変更します。

buffer.SetCurrentPosition(0);

使い終わったら解放します。解放するのはSecondaryBufferとDeviceの両方です。

まとめると以下のようになります。

using System;
using System.Windows.Forms;
using Microsoft.DirectX.DirectSound;

namespace Sample {
	public class DSPlay {
		private Device device;
		private SecondaryBuffer buffer;

		public DSPlay(Control owner, string filename) {
			device = new Device();

			device.SetCooperativeLevel(owner, CooperativeLevel.Normal);
			BufferDescription desc = new BufferDescription();
			buffer = new SecondaryBuffer(filename, desc, device);
		}

		public void close() {
			if (buffer != null) {
				buffer.Stop();
				buffer.SetCurrentPosition(0);
				buffer.Dispose();
			}
			if (device != null) {
				device.Dispose();
			}
		}

		public void play() {
			buffer.Play(0, BufferPlayFlags.Default);
			// buffer.Play(0, BufferPlayFlags.Looping);
		}

		public void stop() {
			buffer.Stop();
		}
	}
}
本日のツッコミ(全3件) [ツッコミを入れる]

replica cartier?anello [I’ve deleted all of my partial albums before adding the en..]

collier cartier imitation love [In your dreams mate! Talk about what I say, not about me. ..]

anello luna pomellato falso [I would like to thanks for the efforts you have contribute..]


2007-06-27 [水]

[Other] 研究室の新メンバー

今日はM1がうちの研究室に本配属として6人やってきました。全員男だけど… いや、性別は関係ないけどなんとなく、ね。研究をバリバリやってくれる方であればいいわけで。

で、新メンバーが揃ったところで自己紹介。そして、7月6日に新歓。さっそく新歓で使う部屋の予約を幹事が取るわけだが、予定表をみると…

利用予定時刻:30時まで 

ΣΣ(゜д゜lll) 明朝6時!? いや、寝るって普通。ゼミ終わってからの飲みでしょ。死にますよ。


Copyright © 2004-2008 SewiG All rights reserved.