のぞき約 ? 名
プロフィール

がったマン
リンク集
<< 2012年05月 >>
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
カテゴリアーカイブ
月別アーカイブ
最新記事
最新コメント
最新トラックバック
2010年10月23日
frimo3+AS3.0開発環境の構築

先日frimo3+AS3.0の環境が作れないと質問があり、一応コメントで環境構築のやり方を回答したのですが記事で残しておこうと思います。


自分はこれでうまく動いた。
というだけであって



何の保証もしないしできないし!



ちなみにうちのレンタルチャットで使っている超本格的なFlashアプリ「メディアプレーヤー」もfrimo3で作っており、かなりオススメだと思ってます。



 frimo3+AS3.0開発環境の構築に必要と思われる項目はこの3つ。

1.FlexSDKのダウンロード
2.FlexSDKのパス設定
3.発行設定

これらについて、それぞれ少し細かく説明します。

1.FlexSDKのダウンロード

FlexSDKのダウンロードページで表示される表の一番上「3.5a 」(Buildは3.5.0.12683)を対象としてダウンロードします。
種類は3つありますが、「Adobe Flex SDK」(表の一番左側の122MBのやつ)をダウンロード。
ダウンロードしたファイルは適当な場所に解凍して下さい。
ここでは「C:\flex_sdk_3.5.0.12683」の下に解凍したものとします。
(「C:\flex_sdk_3.5.0.12683\lib」となるようなディレクトリ構成で解凍します。)

2.FlexSDKのパス設定

frimo3の画面から「ツール」→「オプション」で表示された画面で「アクションスクリプト」タブを選択。
「ActionScript3.0設定」をクリック。
「FlexSDKパス」に1番で解凍したパス「C:\flex_sdk_3.5.0.12683」を入力。
【注意】ソースパス、ライブラリパス、外部ライブラリパスは何も設定しなくて構いません。

3.発行設定

これは開発対象のプロジェクト(ファイル)毎に設定して下さい。
たとえば、ダウンロードして解答したスロットのプロジェクト「sample_slot.sqf」に設定する場合、これを開いた後に行って下さい。

frimo3の画面から「ファイル」→「発行設定」で表示された画面で
「バージョン」に「FlashPlayer9」を設定。
「アクションスクリプトバージョン」に「ActionScript3.0」を設定。
必要に応じてサンプルレートやビットレートを設定。
(以前紹介したスロットはデフォルトのままで作りましたが、音質を良くしたい場合は設定を変えて下さい。)

以上となり、この設定が正しくできていれば、「sample_slot.sqf」をダウンロードし、解答して開くとそのままコンパイルが成功する・・・はず。




(´・ε・`)ムー



久々に更新してみたらなんだか超絶クソ真面目な記事になってしまいやがりました(*´д`)=з


2010年07月05日
FF5 「ビッグブリッジの死闘」をギターで弾いてみた
先日、ローランド MUSIC CREATOR 5 Audio Recording Pack
というソフトを購入し、ようやく我が家にもギターをパソコンに繋げる環境ができました!

ということで、早速パソコンに繋いでギターを録音してみました。
音楽作成ソフト自体、初の購入なんですがコレ、なかなか面白いっす(≧▽≦)

とりあえず作った曲はFinal Fantasy5の名曲と言われるビッグブリッジの死闘超難関なやつ)です。

ドラム・ベース・キーボードはMUSIC CREATOR5で超適当に打ち込み、それに合わせてギターを録音してます。

ほとんど耳コピでテクニック的にもちょっと無理が・・・(´・ε・`)ムー

趣味でコピーバンドをやっている程度なんで、こんなもんですね。途中までしかやってないし。




これ、うちのチャットに組み込んでいるスロット(へぇゲットモードの確変中)のバックミュージックにするつもりだったりι(´Д`υ)アツィー

マイクを繋げてカラオケ状態にもできそうなんで今度は歌を録音してみようか(ムフフ

2010年05月21日
flash+AS3.0でスロットを作ってみた1


ども、こんばんはー。

ちょー久々の更新です。

もう更新やめたんじゃないかと思っている人もいるでしょう。
チャットのメンテが忙しくて単に暇がなかっただけです。

先日、はじめてFlashアプリケーションを作ってみたので、その紹介を。
作ったアプリケーションは「スロット」。

うちのチャットシステムに搭載しています!

このスロットについて、サンプルとして最低限の動作のみを行うプログラムを紹介したいと思います。

今回は技術的な情報の掲載なんで、ちょっとだけくそ真面目にいきたいと思います!

Flash作成ソフトとして、「frimo3」というソフトを購入して作っています。
このソフトは安い上に高機能で、かなり本格的なFlashアプリが作れるんでおすすめです。

今回紹介するプログラムも、frimo3前提なのでfrimo3を持ってない人が見ても意味ないかもしれません。
こんなの作ってみたいな。という方は購入して下さい。(商品紹介は少し下にあります。)

frimo3はActionScript3.0(以下AS3.0)にも対応していますが、デフォルトではAS2.0として動作するので、AS3.0でプログラムを作るには少し設定が必要です。

(AS2.0とAS3.0ではかなり仕様が変わっており、相当便利になっているので、今後Flashアプリを作るならAS3.0で作るのがいいと思います。あとAS2.0では対応しないメソッド等が多数あります。)

AS3.0にするための設定方法は、付属のガイドブックに記載があるので、買うならガイドブック付きの方をお勧めします。

●AHS frimo 3 通常版 (ガイドブックなし)





●AHS frimo 3 ガイドブック付き





そんでは、サンプルスロットの紹介。
画像部分はfrimo3で取り込んで、スロットの動作はAS3.0のプログラムで行います。
(Flash+AS3.0って呼ぶのかな?)
ここでは、画像取り込みとかは製品の基本操作になるので、プログラムの内容を紹介します。










スロットのレバーをクリックして、3つのボタンをクリックしてみてください。
スロットの回転が始まって止まりますね! しかも音楽も流れますね! しかもボタンの右にあるスライダーを動かすと音量が変わりますね!

以下にソースコードを載せますが、細かくコメントを入れているのでここでの説明はなしにします。
初心者が作ったべったべたなソースなんで、プログラム経験のある人であれば、大抵の人は理解できると思います。
サウンドを鳴らしたり、音量を変えるロジックも入れているんで、興味のある人は参考にどうぞ。

一つポイント:
数字の回転について・・・本当は回転させてるんじゃなくて、単に上から下に移動させてるだけだったりします。これを念頭に置けばわかりやすくなるかも。

次回に続く

2010年05月21日
flash+AS3.0でスロットを作ってみた2
AS3.0のソースコード・前半(緑文字はコメント)
import flash.events.*;		/* マウスイベント等の各種イベントを扱うのに必要 */
import flash.media.*; /* 音楽を再生するのに必要 */
import flash.net.URLRequest; /* URL指定で音楽ファイルを読み込むために必要 */
import flash.geom.Rectangle; /* 音量コントロールでマウスドラッグによる制御をするために必要 */

var CenterX = new Array();
CenterX[0] = 45; /* 左数字のX座標 */
CenterX[1] = 80; /* 中数字のX座標 */
CenterX[2] = 115; /* 右数字のX座標 */

var CenterY:int = 45; /* 数字の中心Y座標(7の初期位置であり、ストップボタンを押した時に止まる位置でもある) */
var Far:int = 22; /* 隣り合う数字と数字の上下の距離 */
var Frame:int = 11; /* 1フレームで移動する距離(回転速度になる。これは上のFarを割り切れる数字にしないと止まらなくなる) */
var StartFlg:Boolean = false; /* スロット開始レバーが引かれたかどうか判断するフラグ(true:引かれた「プレイ中」、false:引かれてない「未プレイ」) */

/* 左・中・右の停止ボタンがそれぞれ押されたかどうか判断するフラグ(true:押された、false:押されてない) */
var StopFlg = new Array();
StopFlg[0] = StopFlg[1] = StopFlg[2] = false;

/* 左・中・右の数字がそれぞれ停止完了しているかどうか判断するフラグ(true:停止完了、false:停止未完) */
var StopCmp = new Array();
StopCmp[0] = StopCmp[1] = StopCmp[2] = false;

var VolumeLeft:int = 118; /* 音量スライダーの左端X座標 */
var VolumeY:int = 93; /* 音量スライダーのY座標 */
var VolumeLange:int = 26; /* 音量スライダーの幅 */
var Volume:Number = 0.5; /* 音量(初期値を入れておく。音量は0.0〜1.0の小数) */
var Ret = new Array(); /* 止まって確定した数字を保持する配列 */

/* 音量制御のためのオブジェクトを作成 */
var VolumeCtrl:SoundTransform = new SoundTransform();

/* スロット開始レバーの効果音設定(URLは使いたい音源ファイル(mp3のみ再生できます)のアドレスにして下さい) */
var LeverSoundChannel:SoundChannel;
var LeverSoundURL = new URLRequest("http://www.netriver.jp/chatriver/slot_sound/chikidonga.mp3");
var LeverSound:Sound = new Sound(LeverSoundURL);

/* スロット停止ボタンの効果音設定(URLは使いたい音源ファイル(mp3のみ再生できます)のアドレスにして下さい) */
var BtnSoundChannel:SoundChannel;
var BtnSoundURL = new URLRequest("http://www.netriver.jp/chatriver/slot_sound/bsyun.mp3");
var BtnSound:Sound = new Sound(BtnSoundURL);

/* スロット回転中のミュージック設定(URLは使いたい音源ファイル(mp3のみ再生できます)のアドレスにして下さい) */
var PlaySoundChannel:SoundChannel;
var PlaySoundURL = new URLRequest("http://www.netriver.jp/chatriver/slot_sound/loop03.mp3");
var PlaySound:Sound = new Sound(PlaySoundURL);
/* 一瞬再生して、オブジェクトを作っておく */
PlaySoundChannel = PlaySound.play(0,1);
PlaySoundChannel.stop();

var num = new Array(); /* 数字オブジェクトを格納する配列(2次元配列・1次元目の定義) */

/* 数字の左・中・右で3回ループ */
for ( var n:int = 0; n <= 2; n++ )
{
num[n] = new Array(); /* 数字オブジェクトを格納する配列(2次元配列・2次元目の定義) */

/* 数字の数ループ(0〜9) */
for( var i:int = 0; i <= 9; i++ )
{
/* 左側数字 */
if( n == 0 ) {
/* 予めfrimo3で全数字の画像を取り込み、それら全てに対して「シンボルに変換」を適用し、ムービークリップに変換しておく。 */
/* シンボルに変換したインスタンス名を「num10」〜「num19」としておき、ここで扱いやすいようにnumという配列に格納する。 */
if( i == 0 ) { num[n][i] = num10; }
else if( i == 1 ) { num[n][i] = num11; }
else if( i == 2 ) { num[n][i] = num12; }
else if( i == 3 ) { num[n][i] = num13; }
else if( i == 4 ) { num[n][i] = num14; }
else if( i == 5 ) { num[n][i] = num15; }
else if( i == 6 ) { num[n][i] = num16; }
else if( i == 7 ) { num[n][i] = num17; }
else if( i == 8 ) { num[n][i] = num18; }
else if( i == 9 ) { num[n][i] = num19; }

/* 中の数字 */
} else if( n == 1 ) {
/* 予めfrimo3で全数字の画像を取り込み、それら全てに対して「シンボルに変換」を適用し、ムービークリップに変換しておく。 */
/* シンボルに変換したインスタンス名を「num10」〜「num19」としておき、ここで扱いやすいようにnumという配列に格納する。 */
if( i == 0 ) { num[n][i] = num20; }
else if( i == 1 ) { num[n][i] = num21; }
else if( i == 2 ) { num[n][i] = num22; }
else if( i == 3 ) { num[n][i] = num23; }
else if( i == 4 ) { num[n][i] = num24; }
else if( i == 5 ) { num[n][i] = num25; }
else if( i == 6 ) { num[n][i] = num26; }
else if( i == 7 ) { num[n][i] = num27; }
else if( i == 8 ) { num[n][i] = num28; }
else if( i == 9 ) { num[n][i] = num29; }

/* 右側数字 */
} else if( n == 2 ) {
/* 予めfrimo3で全数字の画像を取り込み、それら全てに対して「シンボルに変換」を適用し、ムービークリップに変換しておく。 */
/* シンボルに変換したインスタンス名を「num10」〜「num19」としておき、ここで扱いやすいようにnumという配列に格納する。 */
if( i == 0 ) { num[n][i] = num30; }
else if( i == 1 ) { num[n][i] = num31; }
else if( i == 2 ) { num[n][i] = num32; }
else if( i == 3 ) { num[n][i] = num33; }
else if( i == 4 ) { num[n][i] = num34; }
else if( i == 5 ) { num[n][i] = num35; }
else if( i == 6 ) { num[n][i] = num36; }
else if( i == 7 ) { num[n][i] = num37; }
else if( i == 8 ) { num[n][i] = num38; }
else if( i == 9 ) { num[n][i] = num39; }
}
}

/* ここで、各数字インスタンスのX座標・Y座標の初期値を設定する */

var now_pos:int = CenterY + ( Far * 7 ); /* 現在のY座標(0の初期Y座標になる「7を初期値にしたいため、0はY軸中心座標より数字7個分下に配置」) */

/* 各数字ループ */
for( i = 0; i <= 9; i++ ) {
num[n][i].x = CenterX[n]; /* 数字インスタンスのX座標を設定する(ここで実際の配置が行われる。X座標は固定で、今後は動かさない) */
num[n][i].y = now_pos; /* 数字インスタンスのY座標を設定する(ここで実際の配置が行われる) */
now_pos -= Far; /* 現在のY座標を、数字と数字の間隔だけ上にずらす */
}

/* 全ての数字の配置は、以下のようなイメージになる */
/* 9 9 9 */
/* 8 8 8 */
/* 7 7 7 ← ここが縦(Y座標)の中心に配置されるようにしている */
/* 6 6 6 */
/* 5 5 5 */
/* 4 4 4 */
/* 3 3 3 */
/* 2 2 2 */
/* 1 1 1 */
/* 0 0 0 */

}

/* イベントリスナー登録(これをやっておくと、すぐ下に定義してあるNumberRolling関数が実行され続けるようです) */
stage.addEventListener(Event.ENTER_FRAME, NumberRolling);

/* 数字を回転させる関数(本当は上から下に移動してるだけ。ある程度下に行ったら上に戻してまた下に移動させる。この関数は常に実行され続ける) */
function NumberRolling(event:Event):void {
if( StartFlg == false ){ return; } /* スロット開始レバーが引かれていなければ処理しないでリターン */

/* スロット開始レバーが引かれていれば、以下で回転処理をする。 */
/* 左・中・右の数字ループ */

for( n = 0; n <= 2; n++ ) {

/* ストップボタンが押されていなければ、回転させる。 */
if( StopFlg[n] == false ) {

/* 数字ループしてそれぞれを1フレーム分下にずらす */
for( i = 0; i <= 9; i++ ) {
num[n][i].y += Frame;

/* ずらした後、数字8個分下まで行ってしまったら、数字2個分上に再配置する。 */
if( num[n][i].y == CenterY + ( Far * 8 ) ) {
num[n][i].y = CenterY - ( Far * 2 );
}
}

/* ストップボタンが押されていて、停止が完了していない時は以下で停止処理をする。 */
} else if( StopCmp[n] == false ) {

StopCmp[n] = true; /* 停止完了状態にする */

/* ストップ処理関数を呼び、その戻り値でどの数字が止まったかを保持。 */
/* (チャットではこの数字をJavaScriptに渡して結果をHTMLに反映しているが、ここではJavaScriptと連携) */

/* (しないので、Ret[n]に保持する必要はない。) */
Ret[n] = Stop(n);

/* 左・中・右の全ての数字が止まったら */
if( StopCmp[0] == true && StopCmp[1] == true && StopCmp[2] == true ) {
StartFlg = false; /* スロット開始レバーが押されていない状態にする(再プレイ可能にする) */
PlaySoundChannel.stop();/* プレイ中のミュージックを止める */
/* チャットではここでJavaScriptに3つの数字を渡す */

}
}
}
}



次回に続く

2010年05月21日
flash+AS3.0でスロットを作ってみた3
AS3.0のソースコード・後半(緑文字はコメント)
/* ここは各オブジェクトに対してマウスがクリックされた時の動作(呼び出す関数)を設定する */
start_btn.addEventListener(MouseEvent.MOUSE_DOWN, StartBtn); /* スロット開始レバーが引かれたらStartBtn関数を呼ぶ設定 */
stop1.addEventListener(MouseEvent.MOUSE_DOWN, Stop1); /* ストップボタン(左)が押されたらStop1関数を呼ぶ設定 */
stop2.addEventListener(MouseEvent.MOUSE_DOWN, Stop2); /* ストップボタン(中)が押されたらStop2関数を呼ぶ設定 */
stop3.addEventListener(MouseEvent.MOUSE_DOWN, Stop3); /* ストップボタン(右)が押されたらStop3関数を呼ぶ設定 */
volume_ctl.addEventListener(MouseEvent.MOUSE_DOWN, VolumeChange1); /* 音量スライダーがクリックされたらVolumeChange1を呼ぶ設定 */
volume_pos1.addEventListener(MouseEvent.MOUSE_DOWN, VolumeChange2); /* ボリューポインタがクリックされたらVolumeChange2を呼ぶ設定 */

/* スロット開始レバーが引かれた時に呼び出される関数 */
function StartBtn(event:MouseEvent):void {
if( StartFlg == true ){ return; } /* 既に引かれている場合(プレイ中)は処理しないでリターンする */
VolumeCtrl.volume = Volume; /* 効果音・プレイミュージックの音量をコントロールオブジェクトに設定 */
LeverSoundChannel = LeverSound.play(0,1); /* スロット開始レバーの効果音を再生 */
LeverSoundChannel.soundTransform = VolumeCtrl; /* スロット開始レバー効果音の音量を設定 */
PlaySoundChannel = PlaySound.play(0,99); /* プレイミュージックを再生 */
PlaySoundChannel.soundTransform = VolumeCtrl; /* プレイミュージックの音量を設定 */
StopFlg[0] = StopFlg[1] = StopFlg[2] = false; /* 停止ボタンフラグを初期化する(各ボタンが押されていない状態にする) */
StopCmp[0] = StopCmp[1] = StopCmp[2] = false; /* 停止完了フラグを初期化する(各数字が停止完了していない状態にする) */
StartFlg = true; /* スロット開始レバーが引かれた状態(プレイ中)にする */
}

/* ストップボタン(左)が押された時に呼び出される関数 */
function Stop1(event:MouseEvent):void {
if( StartFlg == false ){ return; } /* 未プレイ状態の時は処理しないでリターンする */
if( StopFlg[0] == true ){ return; } /* 既押されていた場合は処理しないでリターンする */
VolumeCtrl.volume = Volume; /* 効果音の音量をコントロールオブジェクトに設定 */
BtnSoundChannel = BtnSound.play(0,1); /* 停止ボタンの効果音を再生 */
BtnSoundChannel.soundTransform = VolumeCtrl; /* 停止ボタン効果音の音量を設定 */
StopFlg[0] = true; /* ストップボタン(左)が押された状態にする */
}

/* ストップボタン(中)が押された時に呼び出される関数 */
function Stop2(event:MouseEvent):void {
if( StartFlg == false ){ return; } /* 未プレイ状態の時は処理しないでリターンする */
if( StopFlg[1] == true ){ return; } /* 既押されていた場合は処理しないでリターンする */
VolumeCtrl.volume = Volume; /* 効果音の音量をコントロールオブジェクトに設定 */
BtnSoundChannel = BtnSound.play(0,1); /* 停止ボタンの効果音を再生 */
BtnSoundChannel.soundTransform = VolumeCtrl; /* 停止ボタン効果音の音量を設定 */
StopFlg[1] = true; /* ストップボタン(中)が押された状態にする */
}

/* ストップボタン(右)が押された時に呼び出される関数 */
function Stop3(event:MouseEvent):void {
if( StartFlg == false ){ return; } /* 未プレイ状態の時は処理しないでリターンする */
if( StopFlg[2] == true ){ return; } /* 既押されていた場合は処理しないでリターンする */
VolumeCtrl.volume = Volume; /* 効果音の音量をコントロールオブジェクトに設定 */
BtnSoundChannel = BtnSound.play(0,1); /* 停止ボタンの効果音を再生 */
BtnSoundChannel.soundTransform = VolumeCtrl; /* 停止ボタン効果音の音量を設定 */
StopFlg[2] = true; /* ストップボタン(右)が押された状態にする */
}

/* ストップ処理関数 */
/* 実際はストップボタンが押されたタイミングで回転は止まるが、微妙な位置で止まっている場合に */
/* 微調整してぴったり真ん中で止めるための関数 */
/* 引数の「n」は0〜2(左・中・右)のどれか。指定された列の数字を微調整停止させる */

function Stop( n:int ):int {
var ret:int = 100; /* 戻り値(回転している数字の最大値より大きい数字を適当に設定) */

/* 無限ループ */
while(1) {

/* 数字0〜9ループ */
for( i = 0; i <= 9; i++ ) {
num[n][i].y += Frame;

/* 数字8個分下にずれたら、数字2個分上に最配置 */
if( num[n][i].y == CenterY + ( Far * 8 ) ) {
num[n][i].y = CenterY - ( Far * 2 );
}
/* この数字が丁度真ん中に止まっていたら、戻り値にその数字を入れる(これで無限ループを抜ける) */
/* ここではすぐループを抜けずに、次回実行のために後ろの数字の位置を全部下にずらしておく(9まで全部ループさせる) */

if( num[n][i].y == CenterY ) {
ret = i;
}
}

/* 上のループで戻り値に9以下の数字が入ったら、無限ループを抜ける */
if( ret <= 9 ) {
break;
}
}
return( ret );
}

/* 音量スライダーがクリックされた時に呼び出される関数 */
function VolumeChange1(event:MouseEvent):void {
volume_pos1.x = stage.mouseX; /* 音量ポインタの位置をマウスの位置に設定 */
Volume = ( volume_pos1.x - VolumeLeft ) / VolumeLange; /* 音量ポインタの位置により、音量を設定(0.0〜1.0の間の小数で設定する) */
VolumeCtrl.volume = Volume; /* コントロールオブジェクトの音量に設定 */
PlaySoundChannel.soundTransform = VolumeCtrl; /* プレイミュージックのみリアルタイムに音量を設定する */

/* 音量ポインタのドラッグを開始*/
/* Rectangleの引数は、ポインタ位置の制御(ポインタの左端、ポインタの上端、ポインタ左右の長さ、ポインタ上下の長さ) */

volume_pos1.startDrag(false, new Rectangle(VolumeLeft, VolumeY, VolumeLange, 0));

stage.addEventListener(MouseEvent.MOUSE_UP, xMouseUp); /* マウスアップ時にxMouseUp関数が呼ばれるように設定 */
volume_pos1.addEventListener(MouseEvent.MOUSE_MOVE, xMouseMove);/* マウス移動時にxMouseMove関数が呼ばれるように設定 */
}

/* 音量ポインタがクリックされた時に呼び出される関数 */
function VolumeChange2(event:MouseEvent):void {
/* 音量ポインタのドラッグを開始*/
/* Rectangleの引数は、ポインタ位置の制御(ポインタの左端、ポインタの上端、ポインタ左右の長さ、ポインタ上下の長さ) */

volume_pos1.startDrag(false, new Rectangle(VolumeLeft, VolumeY, VolumeLange, 0));

stage.addEventListener(MouseEvent.MOUSE_UP, xMouseUp); /* マウスアップ時にxMouseUp関数が呼ばれるように設定 */
volume_pos1.addEventListener(MouseEvent.MOUSE_MOVE, xMouseMove);/* マウス移動時にxMouseMove関数が呼ばれるように設定 */
}

/* 音量スライダーもしくはポインタでマウスアップされた時に呼び出される関数 */
function xMouseUp(evt:MouseEvent):void {
volume_pos1.stopDrag(); /* 音量ポインタのドラッグを停止 */
stage.removeEventListener(MouseEvent.MOUSE_UP, xMouseUp); /* マウスアップ時のイベントリスナーを解除*/
volume_pos1.removeEventListener(MouseEvent.MOUSE_MOVE, xMouseMove);/* マウス移動時のイベントリスナーを解除*/
}

/* 音量スライダーもしくはポインタでマウスが移動された時に呼び出される関数 */
function xMouseMove(evt:MouseEvent):void {
Volume = ( volume_pos1.x - VolumeLeft ) / VolumeLange; /* 音量ポインタの位置により、音量を設定(0.0〜1.0の間の小数で設定する) */
VolumeCtrl.volume = Volume; /* コントロールオブジェクトの音量に設定 */
PlaySoundChannel.soundTransform = VolumeCtrl; /* プレイミュージックのみリアルタイムに音量を設定する */
}



次回に続く

2010年05月21日
flash+AS3.0でスロットを作ってみた4


AS3.0だと、最初に「package」とか「class」とか定義しないといけないんですが、frimo3だとコンパイル時に勝手に入れてくれるので楽です。
逆にこれらの定義を入れるとエラーになってコンパイルできません。

ソースコードだけじゃこのスロットは作れません。
frimo3形式のソースファイルはここ。

    sample_slot.lzh

ダウンロード後、解凍して、frimo3で開いて下さい。

開いたらそのままSWFファイルを作成することで、スロットのオブジェクトが作れます。
作ったSWFファイルをアップロードして、タグをブログやHTMLに貼り付けることで、ようやくページ上で実行できるようになります。

ブログやHTMLに貼り付けるには、以下のようにタグを入れればOKです。
このタグの中にある”アップロードしたSWFファイルのURL”の部分(2箇所ある)を、実際にアップロードしたSWFファイルのURLに書き換えて下さい。



最後に
  このプログラムは、自由に使って頂いて結構です。
  ただし、使う場合は音をなくすか、音源を変えて下さい。(フリーの音源サイトからお借りているものなので)
  自分なりにいじって拡張させてもいいです。

2010年02月16日
チャットメンテ、とりあえず完



以前書いた通り、チャットが重いのはきっとネットワークのせいだろうと踏んでいましたが、いろいろと調べていく中で、原因のうちの1つであろう問題がわかりました!


サーバー上で「netstat」コマンドを実行してみると、チャットサーバーが使っているポート番号で、「TIME_WAIT」状態になっているものが数えきれんほどわんさか出てきて









なんじゃこりゃー!










そりゃー重たくなるわ。。。(汗)



ちなみに「TIME_WAIT」は、回線が切断された後、一定時間の待ち状態になっている回線のこと。
切断後、数十秒〜数分程度残るようです。



うちのチャット、キーを叩いただけで入室者全員に対して回線の接続、切断が発生するので、これが全チャットルームで数十人〜数百人とかなったら、もう、、、とてつもない量の「TIME_WAIT」状態の回線ができあがっちゃいますね!



一応、「TIME_WAIT」が多いとどーなるのかぐぐってみたところ、大量に接続、切断を繰り返す場合は「TIME_WAIT」状態の回線が膨大になり、レスポンス低下に繋がる可能性はある。とのこと。



というわけで、ポートを500個空け、チャットサーバーを500個に増やし、ユーザ毎に負荷分散してみました!






半専用な






チャットルームですね!



これでチャットが軽くなるかどうかは、



















わかりません(爆)















今後の夜間帯、週末の状態を見てみましょう(汗)



しかし、、、今回の修正はかなり大変でしたね〜














ぶっちゃけ














疲れました


ι(´Д`υ)







2010年02月02日
ホームページリニューアル


最近更新をサボってましたが、昨日、うちの




ホームページ




をリニューアルしました。

突然雰囲気が変わって





アレレ??





と思った方もいるんじゃないかと思います。















今更ですが















最近CSSを少し勉強するようになったおかげで、今までのへなちょこなホームページのデザインが少しはマシになったんじゃないかと思います。





















そんなことより






















チャットが重すぎる


のを何とかしろ!










というユーザーさんが多いとは思いますが、そっちはそっちで今頑張ってます(汗)






前の記事に書いた通り、多分ネットワークのせいだとうとは思っていますが、プログラムの改造でできる限りの対策をしてみます。


それでもだめなら、今の家より通信速度の早い所にサーバーを引越そうかなーと思ってます。







あと実はこっそり裏でカウンターを作り続けていたのですが、ホームページのカウンター、マウスを当てると統計グラフが出るようになってます。

このページの左上にも同じカウンターあるけど。

コレ、とりあえず今の段階で2〜3日後くらいにレンタル開始します。

今の段階でもそこそこ機能はありますが、今後いろいろ拡張していきます。

なんか欲しい機能とかあれば言ってみてください。




だからそんなことより





















チャットが重す


(以下略







2010年01月23日
自宅サーバー


サーバーの移行が終わり、チャットもバージョンアップし、最近いろいろと忙しい 暇人 ですι(´Д`υ)


バージョンアップ内容は このへん ね〜。


とまあ、いろいろと順調だと思われていたんですが、今日、またまた重たい状況がやってきたようです(汗)


サーバーはCPU利用率もほぼ0%で安定稼動しているんですが、これはきっと















自宅サーバー












の宿命でしょう(笑)


うちはフレッツ光、マンションタイプで、ネット回線は遅くない方だと思うんですが、やっぱり外部に公開するには心もとないようです。


ネット回線周りとなると、サーバーを別の場所に設置して、そこに 太く 高速 な回線を引いてあげないといけないんで、収入のない今はとてもじゃないけど










無理ですヽ(`Д´)ノ












なのでみなさん











あきらめましょう

(。・∀・)y─








そういえばこないだ話題に出した、ストリーミングライブを中継しながらチャットを楽しめる くろうさんのサイト で、リレーライブをやるという話が上がり、 カラオケも可 ということで









じゃぁ俺も







と思ったんですが、PCで流す音楽をライブ中継できなかった(する方法がわからなかった)んで







あきらめました

(ノ◇≦。)







なんか最近あきらめてばかりなわたくしですが、今回のチャットのバージョンアップでも、実は 各効果音のボリュームを調整できるようにしよう 等と思い、苦労してボリューム調整用スライダーを組み込んでみました。

で、チャットで使っている効果音は、早く快適に 再生させるため SWF というファイルを再生するFlashオブジェクトを使っているんですが、よくよく調べてみると、このFlashオブジェクト、ボリューム調整のパラメータが















ありませんでした














というわけで、効果音のボリューム調整も
















あきらめました

2010年01月19日
サーバー移行






いらっしゃいませ







サーバーの部品が全部届き、組み立て、OSインストール、環境構築まで一通り終わりました(^◇^)v










ところが・・・









実は今まで使っていたOSが、組み立てたサーバーに対応してなかったので、 最新バージョン の OS に変わりました。








そしてなんと!








最新バージョンのOSは、システムの日本語文字コードが EUC-JP から UTF-8 に

















変わってしまっていました


・・・(泣)













レンタル用のホームページ、掲示板、チャット、カウンターのプログラムを全部 UTF-8 に書き換えないといけないのね(´;ω;`)









プログラムだけじゃなくって!!










移行する時にはユーザーのデータを全て UTF-8 に変えて移行しないといけないじゃないか(T▽T)



でも一応、プログラム類の UTF-8 化は終わったんで、明日の朝〜昼くらいには 移行完了 です!



移行する時、一時的に繋がらなくなったり、しばらくチャットも使えなくなるけんども
















なんも通知しないで

やっちゃいます(爆)












あ、でも、システムの日本語コードが UTF-8 になったんで、チャットにて、アップロードファイルの日本語の互換性が高まります。



っていうか、完全日本語対応



できてるんじゃね?!!



でも、「.mp4」と「.flv」を再生するフラッシュプレーヤーはもともと日本語に対応してないんで、それだけは日本語ファイルがアップロードできても再生できませんが(´・ω・)y─┛






あと、サーバー性能が格段に良くなったので、 へぇボタン を どんだけ 連打してもへっちゃらでした(。・∀・)y─







CPU使用率








1%未満









>> 次へ