美容師と打ち合わせしてきました。
たまにテレビや雑誌に出てる人らしい。まぁ美容院に行かない俺にはあんまり関係のない話ですが。
美容院のお作法について教えてもらい、それをどうITとからめるか議論しました。美容師は個人々々で活動してるようなもので、なかなか最適化は難しそうですね。既存の競合他社もいるようだし。
しかし美容院は1回1万円もするのか…床屋なら何回も行けるなぁ。
美容師と打ち合わせしてきました。
たまにテレビや雑誌に出てる人らしい。まぁ美容院に行かない俺にはあんまり関係のない話ですが。
美容院のお作法について教えてもらい、それをどうITとからめるか議論しました。美容師は個人々々で活動してるようなもので、なかなか最適化は難しそうですね。既存の競合他社もいるようだし。
しかし美容院は1回1万円もするのか…床屋なら何回も行けるなぁ。
今日は打ち合わせに行ってきました。今年初だね。
そこで打ち合わせ先の会長さんが「ウチのマンション空いてるから引っ越して来ないか」と言ってきました。マンションを幾つか所有してる人なんだよね。
俺が事務所の近くに引っ越せば、打ち合わせとか仕事依頼とか便利だ、といった腹なんだろうけど、俺的にはあんまりしがらみを増やしたくなんだよなぁ。
でもせっかく勧めてくれるので、とりあえず下見に行ってきました。部屋は9階で見晴らしは良いです。ただ室内は今住んでる所よりちょっと狭い。あとオール電化でガスコンロの代わりにIHクッキングヒーターになってました。IHだとコンビニの鍋焼きうどんが作れれないし、チャーハンも作れないなぁ。
それと事務所の近くだと、そこの社員のたまり場になる可能性もある。借りてる負い目で仕事が断りづらくもなりそうだ。そんな訳でやんわり断ってきました。まぁ敷金礼金不要ってのは魅力だったけどね。
今回の件は別として、今の所は結構長く住んでるから、そのうち引っ越すのも良いかも。
いつの間にやらサイト開設してから10年経ちました。思えば遠くへ来たもんだ。
10年でアクセスカウンタが9万しか行ってないけど、最近は検索エンジンで直接ページに飛んじゃうからなぁ。もうトップページに貼り付けるカウンタって意味ないのかもね。ちなみに現在のページビューは1日数千あったりします。いっそ全ページのアクセス数を拾ってみようかw
サイトデザインをほぼ今の形にしたのが4年前だから、いい加減リニューアルかな。ただ最近サイト作成の仕事に携わってないから、今時のサイト構成ってのがわからなかったり。
あとコンテンツを増やそうと検討中。昔は自作小説やお絵描き掲示板なんかも置いてあったんだよな(汗) まぁ既存の絵とかゲーム開発を充実させてってもいいんだけど。
最近は俺もブログやTwitterで事足りてしまってるけど、技術系のスキルを生かすためにはサイトが必要なはず。多分。そんな訳でなんか考えます。
龍が如く見参!
をクリアしました。プレイ時間は50時間ほどです。
以下ネタバレ
---
今作はいわゆる武蔵と小次郎のお話なんだけど、初っ端の隠密行動から裏切り、逃走劇など先の見えない展開でぐいぐい引き込まれたよ。まぁ祇園に来てからは今まで通りのお遣いシステムになったけどw
PS3になったお陰で、とにかくグラフィックが綺麗です。しかも360度見渡せます。人の顔は声を当ててる俳優の顔そのまんまだったりして、なかなかリアルです。ただ一般人が総じて不細工すぎる。わざとかなぁ。
本編とは関係ないサブイベントが大量にあるけど、前作までとは違い、HDDにインストールすればストレス無くプレイできるし、マップも細かく表示されるんでやり易かったです。しかもそれぞれのサブイベントもよく作り込んであって面白かったです。やり残したのもたくさんあるけどね。
アクションについては大量の技を習得したけど、あんまり使いこなしてなかったな。ついでに言うと武器が作れるんだけど、製法書が見づらくてあんまり作らなかったよ。
とにかく自由度が高いので、攻略法を見ないと完全制覇は無理かも…ミニゲームもほとんどやってないし。
ただ残念だったのはラスト。唐突に吉野太夫を身請けして夫婦となった武蔵は、吉野に何も言わずに遥を助けに巌流島に行ってしまう。
そこで因縁の佐々木小次郎を倒し、ついでに黒幕の南海坊天海も倒したけど、敵の軍勢が迫ってきたので幼女に「好きだー」と告白して敵陣に突っ込んで死亡。
なんか生き残ってた小次郎や真島さんが大坂夏の陣を挑みながら武蔵を思い出す、みたいなエンディングでした。なにこれバッドエンド?
そんな感じで、最後が俺的に残念でしたが、全体的に面白かったです。
次回は、そのうち龍が如く3をやる予定ですが、まずはコール オブ デューティ4やろうかな。
朝8:30くらいに会場に到着。今回は矢絣の風呂敷をテーブルに敷きました。後は簡単な説明の紙を立て掛け、作品を並べてディスプレイ完了。
カイロを2つも装備したのに会場内は物凄く寒く、また徹夜明けで眠かったので、なかなか過酷な感じでした(汗) まあ時間が経つにつれて暖かくはなったけどね。
今回は場所が良かったのか、結構人の流れが多い気がしたな。お陰で手に取ってくれる人や話しかけてくれる人もいつもより多かったよ。そういえば巫女装束の女性が「別に巫女なんて興味ないんだからねっ」と言ってウチの作品を買っていってくれましたw
会場でも説明しましたが今回のはまだ未完成品で、しかもバグが残ってます。ギリギリまで粘ったんだけどバグ取れなかったよ。そのうちちゃんと出来たらサイトに差分をアップします。
そんな訳で、来てくれた皆さんありがとうございました。
今日は秋葉原で飲みました。
秋葉原で飲むのは久しぶりな気がする。クジラ料理が幾つかあったので注文しようとしたら「くじらベーコンしかありません」って言われたよ。まぁ仕方ない。
飲みながらビジネスの話とかしたり。請け仕事は単価が下がる一方だから、やっぱり独立系のビジネス立ち上げなきゃなぁとかそんな。
今年の飲み会はこれで最後かなぁ。
今日は取引先の忘年会に参加しました。
飲み屋に行く途中メチャクチャ混んでました。休日前で忘年会シーズンだからなぁ。店の中も順番待ちの人達で溢れかえってたよ。みんな大変だ。
内容はコースメニューのすき焼きでした。すき焼きも久しぶりだなぁ。ただ残念ながら、人数の割に量は少なかった。
帰り。なんかホームで男に声を掛けられたよ。ほろ酔いなその男、雑談を交わしつつも「株に興味ない?」と聞いてくる。胡散臭ぇ(笑) でもいちおうメアド教えといたw どんな素性の男やら。
しかし帰りは終電だったんでこれまた混んでたよ。疲れた。
続きです。今回はWaveファイルを読み込んで解析する処理です。
mmioというマルチメディア入出力関数があるので、それを使って解析すればOKです。
前回のCAudioBaseクラスと今回のCAudioWaveクラスの上にCAudioクラスという緩衝材を入れてますが、ほとんどCAudioBaseと同じなので省略します。
これでようやく音が鳴るようになりました。次はまた当たり判定かなぁ。いい加減当たり判定もFIXしたいところ。
//----------------------------------------------------------------------------- // 生成 CAudioWave::CAudioWave() { m_pwfx=NULL; m_hmmio=NULL; m_pResourceBuffer=NULL; m_dwSize=0; } //----------------------------------------------------------------------------- // 解放 CAudioWave::~CAudioWave() { Close(); SAFE_DELETE_ARRAY(m_pwfx); } //----------------------------------------------------------------------------- // オープン HRESULT CAudioWave::Open(LPSTR strFileName, WAVEFORMATEX* pwfx) { HRESULT hr; if (strFileName==NULL) { return FALSE; } SAFE_DELETE_ARRAY(m_pwfx); // ファイルオープン m_hmmio=mmioOpen(strFileName, NULL, MMIO_ALLOCBUF | MMIO_READ); if (FAILED(hr=ReadMMIO())) { mmioClose(m_hmmio, 0); return FALSE; } if (FAILED(ResetFile())) { return FALSE; } // ファイルサイズ保持 m_dwSize=m_ck.cksize; return TRUE; } //----------------------------------------------------------------------------- // マルチメディア関数で読み込み HRESULT CAudioWave::ReadMMIO() { MMCKINFO ckIn; PCMWAVEFORMAT pcmWaveFormat; m_pwfx=NULL; if ((0!=mmioDescend(m_hmmio, &m_ckRiff, NULL, 0))) { return E_FAIL; } // Waveファイルかどうか if ((m_ckRiff.ckid!=FOURCC_RIFF) || (m_ckRiff.fccType!=mmioFOURCC('W', 'A', 'V', 'E'))) { return E_FAIL; } // FMTチャンク検索 ckIn.ckid=mmioFOURCC('f', 'm', 't', ' '); if (0!=mmioDescend(m_hmmio, &ckIn, &m_ckRiff, MMIO_FINDCHUNK)) { return E_FAIL; } // pcmWaveFormat取得 if (mmioRead(m_hmmio, (HPSTR)&pcmWaveFormat, sizeof(pcmWaveFormat))!=sizeof(pcmWaveFormat)) { return E_FAIL; } // 余分なBYTEがある? if (pcmWaveFormat.wf.wFormatTag==WAVE_FORMAT_PCM) { m_pwfx=(WAVEFORMATEX*)new CHAR[sizeof(WAVEFORMATEX)]; if (NULL==m_pwfx) { return E_FAIL; } // waveformatexコピー memcpy(m_pwfx, &pcmWaveFormat, sizeof(pcmWaveFormat)); m_pwfx->cbSize=0; } else { // 余分なBYTE読み込み WORD cbExtraBytes=0L; if (mmioRead(m_hmmio, (CHAR*)&cbExtraBytes, sizeof(WORD))!=sizeof(WORD)) { return E_FAIL; } m_pwfx=(WAVEFORMATEX*)new CHAR[sizeof(WAVEFORMATEX)+cbExtraBytes]; if (NULL==m_pwfx) { return E_FAIL; } // waveformatexコピー memcpy(m_pwfx, &pcmWaveFormat, sizeof(pcmWaveFormat)); m_pwfx->cbSize=cbExtraBytes; // 余分なBYTE読み込み if (mmioRead(m_hmmio, (CHAR*)(((BYTE*)&(m_pwfx->cbSize))+sizeof(WORD)), cbExtraBytes )!=cbExtraBytes) { SAFE_DELETE(m_pwfx); return E_FAIL; } } // FMTチャンクから出る if (0!=mmioAscend(m_hmmio, &ckIn, 0)) { SAFE_DELETE(m_pwfx); return E_FAIL; } return S_OK; } //----------------------------------------------------------------------------- // サイズ取得 DWORD CAudioWave::GetSize() { return m_dwSize; } //----------------------------------------------------------------------------- // ファイルリセット HRESULT CAudioWave::ResetFile() { if (m_hmmio==NULL) { return CO_E_NOTINITIALIZED; } // データ検索 if (-1==mmioSeek(m_hmmio, m_ckRiff.dwDataOffset+sizeof(FOURCC), SEEK_SET)) { return E_FAIL; } // データチャンク検索 m_ck.ckid=mmioFOURCC('d', 'a', 't', 'a'); if (0!=mmioDescend(m_hmmio, &m_ck, &m_ckRiff, MMIO_FINDCHUNK)) { return E_FAIL; } return S_OK; } //----------------------------------------------------------------------------- // ファイルから読み込み HRESULT CAudioWave::Read(BYTE* pBuffer, DWORD dwSizeToRead, DWORD* pdwSizeRead) { MMIOINFO mmioinfoIn; if (m_hmmio==NULL) { return CO_E_NOTINITIALIZED; } if (pBuffer==NULL || pdwSizeRead==NULL) { return E_INVALIDARG; } *pdwSizeRead=0; if (0!=mmioGetInfo(m_hmmio, &mmioinfoIn, 0)) { return E_FAIL; } UINT cbDataIn=dwSizeToRead; if (cbDataIn>m_ck.cksize) { cbDataIn=m_ck.cksize; } m_ck.cksize-=cbDataIn; for (DWORD cT=0; cT<cbDataIn; cT++) { // BYTEコピー if (mmioinfoIn.pchNext==mmioinfoIn.pchEndRead) { if (0!=mmioAdvance(m_hmmio, &mmioinfoIn, MMIO_READ)) { return E_FAIL; } if (mmioinfoIn.pchNext==mmioinfoIn.pchEndRead) { return E_FAIL; } } // コピー *((BYTE*)pBuffer+cT)=*((BYTE*)mmioinfoIn.pchNext); mmioinfoIn.pchNext++; } if (0!=mmioSetInfo(m_hmmio, &mmioinfoIn, 0)) { return E_FAIL; } *pdwSizeRead=cbDataIn; return S_OK; } //----------------------------------------------------------------------------- // ファイルを閉じる HRESULT CAudioWave::Close() { mmioClose(m_hmmio, 0); m_hmmio=NULL; SAFE_DELETE_ARRAY(m_pResourceBuffer); return S_OK; }