ばぐだし

XNAとかで面白いもの作る。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スターウォーズOPジェネレータ

とある理由で、スターウォーズOPをパロったものを作ることに。

Ulead VideoStudioを持っているので、これで頑張って作ります。
文字列を変形してスクロールってのができない様なので、ちと工夫。
まず通常のスタッフロールのような動画を縦になが~く作る。
その動画を改めて合成し、変形を施す。

・・・なんてことをやっていたのですが、Youtubeでお手本を探していたら、

こんなんを発見。すげー。

それで作り方参考にしようと思って「東方ウォーズ」でググったらニコニコ動画にうp主コメントが。
曰く「スターウォーズOPジェネレータを拾ったから早速作ってみたんだよ! ■URLは ttp://alienryderflex.com/crawl/ だよ!」
じぇ・・・じぇねれーた・・・



俺の苦労はどこへ。



まー早めに見つけられてよかったよかった。
家にMac無いので明日研究室のマカーに試してもらおうと思います。
スポンサーサイト

WAVEファイルの読み込み

WAVEファイルをFFTなどを使って解析してみたかったので、
その過程でできたWAVEファイルの読み込みクラスを公開します。

言語はC#です。ご自由にお使いください。
動作保証はしませんよ。



class WaveReader : IDisposable
{
private struct Format
{
public Int32 ByteSize;
public Int16 ID;
public Int16 ChannelNum;
public Int32 SamplingRate;
public Int32 BytePerSec;
public Int16 BlockSize;
public Int16 BitPerSample;
//public Int16 ExSize;
//public byte[] ExData;
}

private struct WaveHeader
{
public string RIFF;
public Int32 FileSize;
public string Wave;
public Format Fmt;
public Int32 DataByteSize;
}

private FileStream _fileStream;
byte[] _buffer;
private int _bufferSize = 2048;

private WaveHeader _waveHeader;

private const int BYTE_SIZE = 1;
private const int WORD_SIZE = 2 * BYTE_SIZE;
private const int DWORD_SIZE = 4 * BYTE_SIZE;
private const int WORDTAG_NUM = 4;

private const int RIFF_OFFSET = 0;
private const int RIFF_BYTESIZE = 8;
private const int WAVE_OFFSET = RIFF_BYTESIZE;
private const int WAVE_BYTESIZE = 4;

private const string WAVETAG_FMT = "fmt ";
private const string WAVETAG_FACT = "fact";
private const string WAVETAG_DATA = "data";
private const string WAVETAG_LIST = "LIST";

public WaveReader()
{
_waveHeader = new WaveHeader();
}

public void Dispose()
{
}

public int BufferSize
{
get { return _bufferSize; }
set { _bufferSize = value; }
}

public int MaxByteSize
{
get { return _waveHeader.DataByteSize; }
}

public int BytePerSec
{
get { return _waveHeader.Fmt.BytePerSec; }
}

public byte[] ByteBuffer
{
get { return _buffer; }
}

public char[] CharBuffer
{
get
{
char[] ret = new char[_buffer.Length];
for (int i = 0; i < ret.Length; i++)
{
ret[i] = (char)_buffer[i];
}
return ret;
}
}

public string StringBuffer
{
get
{
char[] ret = new char[_buffer.Length];
for (int i = 0; i < ret.Length; i++)
{
ret[i] = (char)_buffer[i];
}
return new string(ret);
}
}

public void ReadFile(string fileName)
{
//リソース読み込み
_fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);

ReadHeader();
}

public void ReadBuffer(int index)
{
_buffer = new byte[_bufferSize];
_fileStream.Read(_buffer, 0, _bufferSize);
}

private void ReadHeader(){
byte[] subBuffer;
int offset;

subBuffer = new byte[RIFF_BYTESIZE];
_fileStream.Read(subBuffer, 0, RIFF_BYTESIZE);
offset = 0;
_waveHeader.RIFF = new string(ByteToChar(subBuffer), 0, DWORD_SIZE); offset += DWORD_SIZE;
_waveHeader.FileSize = BitConverter.ToInt32(subBuffer, offset);

subBuffer = new byte[WAVE_BYTESIZE];
_fileStream.Read(subBuffer, 0, WAVE_BYTESIZE);
_waveHeader.Wave = new string(ByteToChar(subBuffer), 0, DWORD_SIZE);

for (int i = 0; i < WORDTAG_NUM; i++)
{
bool breakFlag = false;
string str;
subBuffer = new byte[DWORD_SIZE];
_fileStream.Read(subBuffer, 0, DWORD_SIZE);
str = new string(ByteToChar(subBuffer), 0, DWORD_SIZE);

switch (str)
{
case WAVETAG_FMT:
subBuffer = new byte[DWORD_SIZE];
_fileStream.Read(subBuffer, 0, DWORD_SIZE);
_waveHeader.Fmt.ByteSize = BitConverter.ToInt32(subBuffer, 0);

subBuffer = new byte[_waveHeader.Fmt.ByteSize];
_fileStream.Read(subBuffer, 0, _waveHeader.Fmt.ByteSize);
offset = 0;
_waveHeader.Fmt.ID = BitConverter.ToInt16(subBuffer, offset); offset += WORD_SIZE;
_waveHeader.Fmt.ChannelNum = BitConverter.ToInt16(subBuffer, offset); offset += WORD_SIZE;
_waveHeader.Fmt.SamplingRate = BitConverter.ToInt32(subBuffer, offset); offset += DWORD_SIZE;
_waveHeader.Fmt.BytePerSec = BitConverter.ToInt32(subBuffer, offset); offset += DWORD_SIZE;
_waveHeader.Fmt.BlockSize = BitConverter.ToInt16(subBuffer, offset); offset += WORD_SIZE;
_waveHeader.Fmt.BitPerSample = BitConverter.ToInt16(subBuffer, offset); offset += WORD_SIZE;
break;
case WAVETAG_DATA:
subBuffer = new byte[DWORD_SIZE];
_fileStream.Read(subBuffer, 0, DWORD_SIZE);
_waveHeader.DataByteSize = BitConverter.ToInt32(subBuffer, 0);
breakFlag = true;
break;
default:
breakFlag = true;
break;
}

if (breakFlag) break;

}

}

private char[] ByteToChar(byte[] buffer)
{
char[] ret = new char[buffer.Length];
for (int i = 0; i < buffer.Length; i++)
{
ret[i] = (char)buffer[i];
}
return ret;
}
}

Google AJAX Feed API

スクリーンセーバ作ったら満足して更新が滞ってしまいましたorz

この前Google AJAX Feed APIってのを見つけたのでメモ代わりに記しておきます。

Google AJAX Feed API を使うとブログやホームページにRSSを表示することができます。
別のサイトのRSSも表示できてしまうところがポイントです。

私はコレを使ってホームページのトップに、Google AJAX Feed API を用いてブログのRSSを貼り付けました。
CSSを使って表示形式を自由に変えられるのでHPに合ったレイアウトを自分で作成することができます。
サンプルの時点で結構満足のいくものになっているので、サンプルのCSSに手を加えるなどしてコーディングするとよいと思います。

Home

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。