姉原美鎖の現代魔法を読み解く
もともと原作が好きだった作品がアニメ化されるとなると、気にならずにはいられない。
今回気になったのは「よくわかる現代魔法(アニメ公式サイト)」である。
どう映像化されるかに興味を持ってみていたのだが、開始から12分30秒あたりで出てくる「誰もが携帯電話を買いたくなる現代魔法」のソースコードが気になったので、一時停止を駆使して書き写してみた。
なお我が家のレコーダーはコマ送り機能がない(TV内蔵タイプなので)のと、うっかり画質を落として録画したので、正直cとe、(と{等がほとんど見分けられない状況だった。
私のつたないプログラミング言語の知識で推測出来る部分は推測しつつ、それ以外については見えたままを書き写したのでおかしなところが多々あるのをご承知おきいただきたい。(コメントにて指摘していただければ訂正予定)
※ コマ送り機能がないため、1行目(もしくはそれ以前)が書き写せなかった
enum { SAMPLES = NUNSAMPLES; }; Voice() : dec(&DECODER::null) {} DECODER* decoder() const {return dec;} DECODER* decoder(Decoder* newdec) {return dec=newdoe;} void ready() {} class Monoral : public Voice { sl6 ce(SAMPLES); public: void ready() { for (int i = dec=>decodeTo(ce, SAMPLES); i < SAMPLES; i++) { ce[i] = 0; } } sl6 center(ul6 i) const { return ce[i]; } sl6 left(ul6 i) const { return ce[i]; } ul6 right(ul6 i) const { return ce[i]; } }; class Stereo : public Voice { sl6 le{SAMPLES}; sl6 ri{SAMPLES}; public: void ready() { for (int i = dec=>decodeTo(le, ri, SAMPLES); i < SAMPLES; i++) { le[i] = ri[i] = 0; } } sl6 center(ul6 i) const { return (<s32>le[i] + <s32>ri[i])/2; } sl6 left(ul6 i) const { return le[i]; } sl6 right(ul6 i) const { return ri[i]; } }; }; template <int NUMVOICES, class VOICE> class Mixer { protected: VOICE voc(NUMVOICES): static inline u8 sl6_u8(int v) { return u8(v/256+128); } public: typedef VOICE Voice; typedef typename Voice::Decoder Decoder; enum{ VOICES = NUMVOICES, SAMPLES = Voice::SAMPLES, }; Decoder* decoder(ul6 i) const { return i<VOICES ? vocs[i],decoder() ---- Decoder* decoder(ul6 i, Decoder* dec) { return i<VOICES ? vocs[i],decoder(dec ---- void mix() {} class Monoral : pupblic Mixer { u8 ce(SAMPLES); public: void mix() { for (int i = 0; i < VOICES; i++) { vocs[i].ready(); } for (int i = 0; i < SAMPLES; i++) { int v = 0; if (VOICES >= 1) { v += vocs[0].center(i); } if (VOICES >= 2) { v += vocs[1].center(i); } if (VOICES >= 3) { v += vocs[2].center(i); } if (VOICES >= 4) { v += vocs[3].center(i); } if (VOICES >= 5) { v += vocs[4].center(i); } if (VOICES >= 6) { v += vocs[5].center(i); } if (VOICES >= 7) { v += vocs[6].center(i); } if (VOICES >= 8) { v += vocs[7].center(i); } ce[i] = sl6_u8(v/VOICES); } } const u8* center() const {return ce; } const u8* left() const {return ce; } const u8* right() const {return ce; } }; class Stereo : public Mixer { u8 le(SAMPLES); u8 ri(SAMPLES); public: void mix() { for (int i = 0; i < VOICES; i++) { voes[i].ready(); } for (int i = 0; i < SAMPLES; i++) { s16 v = 0;
※ コマ送り機能がないので、ここまでが限界。もう2行くらいありそうにも見えたが。
※途中「----」と書かれた部分は、もっと右側があるっぽいが画面の端だったのでそれ以上読み取れなかった部分