片山博文MZの掲示板 33330


この掲示板について

1:片山博文MZ:

2011/03/24 (Thu) 15:30:40

片山博文MZが配布するソフト・プログラムなどに関する掲示板です。関係のない話題などは削除されます。また、禁止ワードが設定されています。適切にご利用ください。

ホームページはこちらです:
http://katahiromz.web.fc2.com/
2:KM:

2011/09/25 (Sun) 16:56:35

誰も書いていないように見えますが、失礼します。
MZkeyloggerについて質問です。試しにちょっと使ってみました。
インストールなどはスムースでした。基本的に想定通りの動きをしています。
但し、DOS窓を出して何か入力しようとすると無反応になります。
DOS窓で無反応になる事に関して解決の対策はありますか?
よろしくお願いします。
3:片山博文MZ◆JwHkm/8mPw :

2011/11/17 (Thu) 15:57:41

KMさん、OSは何でしょうか。
MZ KeyLoggerのバージョンは何でしょうか。
4:片山博文MZ◆JwHkm/8mPw :

2011/11/17 (Thu) 15:58:54

あれ、トリップが違う。2ちゃんねると同じトリップは
使えないのか。。。
5:OS :

2011/12/07 (Wed) 13:29:51

MZ keylogger便利に使っています。
最新はV2.1のようですが、IE9での動作について教えてください。
V1.8で使ったときは、ブラウザでのフォーマットに入力した時はキー入力がそのまま
記録されましたが、V2.1ではキー入力は記録されずに、ブラウザ閲覧記録だけが記録されるようです。
キー入力をそのまま表示するには、何か設定方法があるのですか。
ちなみに、IE9以外の他社のブラウザ(FIREFOXなど)ではキー入力がそのまま記録されます。
6:片山博文MZ◆JwHkm/8mPw :

2011/12/14 (Wed) 13:35:52

>>5 IEの保護モード、もしくはUIPIが原因と考えられます。

保護モードを解除する方法:
http://pasofaq.jp/program/internetexplorer/ie7protectionmode.htm

この方法でもキー入力が記録されない場合はUIPIが原因です。
http://kamigaki.la.coocan.jp/wb_vista.htm
7:OS :

2011/12/15 (Thu) 08:39:28

ありがとうございました。
保護モード解除で解決しました。
8:satie :

2012/03/28 (Wed) 01:16:36

ソフトとは関係ないのですが、
「素数の分布に関する考察」というpdfについて質問です。
補題1で不等式(1)から(2)を引いている個所がありますが、
一般に
A>BかつC>D ⇒ A-C>B-D
は成り立たないので、ちょっと分からなくなりました。
私の勘違いかもしれませんがよろしければご回答ください。
9:片山博文MZ◆JwHkm/8mPw :

2012/03/31 (Sat) 14:37:25

>>8 私の間違いです。すみませんでした。
10:YOSHI :

2012/04/03 (Tue) 18:07:00

はじめまして。
最近,子どもの有害サイトアクセスへの脅しで有意義に活用させていただいております。
1つ質問ですが,ログが打ったままになりますが,これを,日本語に再変換する良い方法は
ないものでしょうか。 何か良い智慧がありましたら,ご教授いただけれると助かります。
11:片山博文MZ◆JwHkm/8mPw :

2012/04/07 (Sat) 14:54:33

>>10
「ログが打ったまま」とはどういう状況でしょうか。
12:片山博文MZ◆JwHkm/8mPw :

2012/04/09 (Mon) 14:24:26

ローマ字入力のとき、「[A][R][I][G][A][T][O][U]」を「ありがとう」に
変換するような機能ですか?
13:Hoshi :

2012/06/21 (Thu) 22:52:09

今日は、キーローガソフト非常に便利に子供のweb管理に役立たせて頂いておりありがとうございます。
12番の様にロウマ字入力を日本語に変換出来る機能があると非常有難いです。
あくまで希望ですのでご検討頂けますと幸いです。
14:片山博文MZ◆JwHkm/8mPw :

2012/08/03 (Fri) 15:02:55

>>13 分かりました。作成します。
15:片山博文MZ◆JwHkm/8mPw :

2012/08/04 (Sat) 10:14:33

>>13 ローマ字変換機能をつけました。
16:Hoshi :

2012/08/05 (Sun) 08:17:50

>>15
ご対応頂きまして有り難うございます。
早速ダウンロードして使用してみたいと思います。
使用感想後日書かせて頂きます。

17:hoshi :

2012/08/05 (Sun) 10:56:35

>>15
早速使用してみました。
感想としまして今までローマ字だった文字が日本語で表示されて
非常に見易くなりました。ありがとうございました。感謝です!!
また、ひとつ質問なのですがログファイルの保存場所をネットワークの
例えばLANディスク若しくはネットワーク上の別なパソコンのフォルダに
設定する事は出来ませんでしょうか?
理由としまして子供の部屋のパソコンが起動して無くとも時間の空いた時に
LANディスクであればログの確認が出来ると思いました。
何度も申し訳ございませんご確認及び設定で可能でしたら設定方法
ご教授頂けますと幸いです。
宜しくお願いいたします。
18:片山博文MZ◆JwHkm/8mPw :

2012/08/14 (Tue) 14:26:59

>>17 忙しいので、ちょっとサポートが遅れます。すみません。
19:hoshi :

2012/08/19 (Sun) 21:40:20

>>18
お忙しい所サポート頂きましてありがとうございます。
お時間空きました時にサポート頂けますと幸いです。
ありがとうございます。
20:伊藤直樹 :

2013/09/11 (Wed) 00:21:11

KeyLoggerの保存先は変更はできないのでしょうか?
21:片山博文MZ◆NveQN6OtcI :

2013/09/11 (Wed) 18:03:10

>>20
検討します。
22:片山博文MZ◆NveQN6OtcI :

2013/09/12 (Thu) 13:24:41

>>20
2.4にバージョンアップ。保存先の変更ができるようになりました。
23:竹田 通教:

2013/09/17 (Tue) 19:58:30

win vistaで、 プロセスを起動して シャットダウンすると
 次のたち上げで プロセスが止まっています 何が考えられるのでしょうか?

 win7では シャトダウンしても プロセスは止まらないのですが??
 
24:片山博文MZ◆NveQN6OtcI :

2013/09/20 (Fri) 14:42:41

>>23
manager.exeを実行して管理画面を開いてMZ KeyLoggerを起動してください。その後、レジストリエディタで

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

に「MZ KeyLogger」が登録されているか確認して下さい。もし登録されていなければ、セキュリティ対策ソフトかUAC、もしくは管理者権限がないことが原因と考えられます。
セキュリティ対策ソフトの設定で、MZ KeyLoggerの実行ファイルをブロック対象からはずしてください。UACの画面が出る場合は、「はい」をクリックして下さい。
25:takasi :

2014/02/25 (Tue) 09:50:19

MZ keylogger便利に使っています。
最新バージョンを使用していますが、IE11が配布されアップデート後に
ブラウザ履歴(URL)が残らなくなりました。
再度アンインストールとインストールをしましたが状況は変わりません。
何か対応方法はありませんでしょうか?

26:片山博文MZ◆NveQN6OtcI :

2014/02/28 (Fri) 14:27:56

>>25
すみません。今、大変忙しいので、対応は後になると思います。申し訳ありません。
27:田中直樹 :

2014/03/24 (Mon) 21:39:14

片山様 子供用PCのWEB関係の管理に使用させて頂いております。 
他のフリーソフトと違い隔離されたりせず動作が安定しているので重宝しております。
本題ですが上記「25」の方と同じで最近WEB履歴がないと思い調べたところ、
IEがVer11となっておりブラウザ履歴なしで管理しております。
キー入力よりブラウザ履歴として使用しておりましたので今後の対応に期待しております。
お忙しいところ勝手な都合で書き込みさせて頂きました。
28:片山博文MZ◆NveQN6OtcI :

2014/03/27 (Thu) 13:39:44

MZ KeyLoggerを2.5にバージョンアップしました。IE11に対応しました。
29:片山博文MZ◆NveQN6OtcI :

2014/03/28 (Fri) 11:15:22

IE6でブラウザ履歴が出力されないバグがあるようです。
30:田中直樹 :

2014/03/29 (Sat) 21:24:03

片山様 早い対応を御対応有り難う御座います。 IE11では全く問題なく動作しております。 
31:片山博文MZ◆NveQN6OtcI :

2014/04/01 (Tue) 15:19:07

MZ KeyLoggerを2.6にバージョンアップ。IE6対応。重複したアドレスは出力しないようになりました。
32:片山博文MZ◆NveQN6OtcI:

2015/01/26 (Mon) 23:37:22

皆様、献血に御協力下さい!
33:片山博文MZ◆NveQN6OtcI:

2015/05/24 (Sun) 23:18:05

現在、逆コンパイラーの開発に取り組んでおります。
34:書けるかな? :

2015/11/30 (Mon) 21:26:00

見てる?
元のプログラムでもFM音源っぽい音は出てるよね。
sample.cppだけ少し改造してみたよ。FM音源っぽい音とSSG音源っぽい音が同時に出てるはず。

#include "headers.h"
#include "YM2203.h"

#define CLOCK 22050
#define SAMPLERATE 44100

#define ALUT_STATIC
#include <AL/alut.h>

#if defined(_WIN32) && defined(_MSC_VER)
#pragma comment(lib, "OpenAL32.lib")
#pragma comment(lib, "alut.lib")
#endif

static const short table[5][10] = {
{58, 15, 0, 0, 0, 0, 0, 0, 0, 0},
{31, 12, 4, 10, 1, 32, 0, 12, 0, 0},
{31, 2, 4, 6, 15, 57, 3, 15, 1, 0},
{31, 12, 4, 6, 0, 30, 0, 1, 0, 0},
{31, 5, 7, 7, 2, 0, 2, 3, -1, 0},
};

int main(void) {
YM2203 ym;
int sec = 1;
ALuint buffers[1];
ALuint sources[1];
alutInit(NULL, NULL);
alGenBuffers(1, buffers);
alGenSources(1, sources);

YM2203_Timbre timbre(table);

FM_SAMPLETYPE *buf = new FM_SAMPLETYPE[sec * SAMPLERATE * 2];

memset(buf, 0, sizeof(FM_SAMPLETYPE) * sec * SAMPLERATE * 2);

ym.init(/*CLOCK*/8000000, SAMPLERATE);
ym.set_timbre(FM_CH1, &timbre);
ym.set_tone_or_noise(SSG_CH_A, TONE_MODE);
ym.set_volume(SSG_CH_A, 15);
ym.set_volume(FM_CH1, 15);

ym.set_pitch(FM_CH1, 4, KEY_C);
ym.set_pitch(SSG_CH_A, 4, KEY_E);

ym.note_on(FM_CH1);
ym.note_on(SSG_CH_A);
ym.mix(buf, SAMPLERATE/2);
ym.count(0.5 * 1000 * 1000);
ym.note_off(FM_CH1);
ym.note_off(SSG_CH_A);

ym.set_pitch(FM_CH1, 4, KEY_E);
ym.set_pitch(SSG_CH_A, 4, KEY_G);

ym.note_on(FM_CH1);
ym.note_on(SSG_CH_A);
ym.mix(buf+(SAMPLERATE * 2/2), SAMPLERATE/2);
ym.count(0.5 * 1000 * 1000);
ym.note_off(FM_CH1);
ym.note_off(SSG_CH_A);

alBufferData(buffers[0], AL_FORMAT_STEREO16, buf,
sizeof(FM_SAMPLETYPE) * sec * SAMPLERATE * 2,
SAMPLERATE);
alSourcei(sources[0], AL_BUFFER, buffers[0]);
alSourcePlay(sources[0]);
alutSleep(1.5);

alDeleteSources(1, sources);
alDeleteBuffers(1, buffers);
delete[] buf;
alutExit();
return 0;
} // main

もしシェアウェアに使うための質問だったなら、売り上げの半分よこしなさいよね。ウソだけど。
35:片山博文MZ◆NveQN6OtcI:

2015/11/30 (Mon) 21:57:53

動作を確認しました。有り難うございます。報酬はAmazonギフト券1万円でいかがですか?
36:書けるかな? :

2015/11/30 (Mon) 23:40:35

実のところ、謝礼をもらえるほどの回答ではないですよね。
ym.initの第1パラメータの適切な値は数MHz程度だと思うけど、正確な数値は知らないし。(ここの数値に応じて、FM_PITCH_TABLEなんかにセットするべき値が変わってくるのだとは思うけど。)
音を鳴らすだけの場合にym.countが必要かどうかも知らないし。
alutSleepのパラメータが1.5じゃなくて1のままだと最後に変な音が鳴ったりするみたいだけど、OpenALやALUTの使い方の問題かもしれないので詳しく調べてないし。
37:書けるかな? :

2015/12/05 (Sat) 23:05:51

こちらの独自調査では、soundplayer.cppのdiff
19c19
< sec = float(length * (60.0 * 1.5 * 4 / 24)) / tempo;
---
> sec = float(length * (60.0 * 1.5 / 24)) / tempo;
21c21
< sec = float(length * (60.0 * 4 / 24)) / tempo;
---
> sec = float(length * (60.0 / 24)) / tempo;
126c126
< ym.mix(&data[isample], nsamples * 2);
---
> ym.mix(&data[isample * 2], nsamples);
166c166
< ym.mix(&data[isample], nsamples * 2);
---
> ym.mix(&data[isample * 2], nsamples);
247c247
< auto msec = uint32_t(goal * 1000.0 / 2);
---
> auto msec = uint32_t(goal * 1000.0);
でSOUND_TESTの音は良さそうだと思ったんだが。(今は使われてないけど、151行目も要修正だろうな)
38:片山博文MZ◆NveQN6OtcI:

2015/12/06 (Sun) 12:11:30

有り難うございます。正常に動作しました。

残るはLFOが効かないという問題があります。特徴的なのは@15の音色です。BASICではNEW CMD:CMD PLAY "@15V15CDEFEDC"でUFOみたいな音が出ますが、このsoundplayerではエコーが掛かりません。BASICの音色データのLFO部分を解析して音源に書き込む必要があります。
39:片山博文MZ◆NveQN6OtcI :

2015/12/06 (Sun) 13:18:44

GitHubを更新しました。
40:書けるかな? :

2015/12/06 (Sun) 13:26:29

詳しくは知らないけど
・YM2608(OPNA)はハードウェアLFOを持っている
・YM2203(OPN)はハードウェアLFOを持っていない(?)
ということらしいので、もしOPN相当のエミュレーションになっていたらLFOが効かなくて当然かもしれない
41:片山博文MZ◆NveQN6OtcI :

2015/12/06 (Sun) 14:02:10

YM2203じゃなくてYM2608にした方がいいかな。

YM2203*は、http://d.hatena.ne.jp/licheng/20131207 を参考にして作ったんだけど、
これはLFOをサポート・再現していないようだ。

YM2203::set_timbreのときに、何かをwrite_regする必要があるみたい。
42:片山博文MZ◆NveQN6OtcI :

2015/12/06 (Sun) 14:07:24

BASICのLFOのパラメータとFM音源のLFOのパラメータは、単位が違うから、
何らかの変換が必要みたい。
43:片山博文MZ◆NveQN6OtcI:

2015/12/06 (Sun) 16:57:05

「PC980186.shift-jis.txt.utf-8.txt」参照。
レジスタ$22, $B4〜$B6, $60〜$6Eが怪しい。
44:片山博文MZ◆NveQN6OtcI:

2015/12/06 (Sun) 22:17:00

PC-8801にはハードLFOがなかったらしい。どおりでパラメータが違う訳だ。波形を直接加工する方が楽かも。
45:書けるかな? :

2015/12/06 (Sun) 23:52:49

PC-8801FA、MA等やサウンドボード2はOPNAだからハードウェアLFOあるはず。BASICから利用できるかどうかは知らない。
また、少しググると、OPN搭載の機種のN88BASICで CMD VOICE LFO というコマンドが使えるような記述が見つかる。これはOPNAのハードウェアLFOを制御するものではないと思うんだが、詳細は知らない。純粋にソフトウェアによるLFOか、あるいはLFO以外のためのハードウェア機能をLFOに利用しているのか。
46:片山博文MZ◆NveQN6OtcI :

2015/12/07 (Mon) 13:21:38

ファイル名:cmd_voice.zip
パスワード:passpass
http://drive.google.com/uc?export=view&id=0B3nA8ShVAS4OOEFTUWZGN3RtU3M
47:片山博文MZ◆NveQN6OtcI:

2015/12/07 (Mon) 14:17:24

私の直感ではソフトウェアLFOでいいと思う。だが、LFO効果の詳しい仕様がないから、試行錯誤になるだろうね。
48:書けるかな? :

2015/12/08 (Tue) 20:52:35

もし自分がやるんだったら
YM2203.hのdiff
92,93c92,93
< void set_pitch(int ch, int octave, int key);
< void set_volume(int ch, int volume);
---
> void set_pitch(int ch, int octave, int key, int adj = 0);
> void set_volume(int ch, int volume, int adj = 0);

YM2203.cppのdiff
93c93
< void YM2203::set_pitch(int ch, int octave, int key) {
---
> void YM2203::set_pitch(int ch, int octave, int key, int adj) {
99c99
< ((FM_PITCH_TABLE[key] >> 8) & 0x07)
---
> (((FM_PITCH_TABLE[key]+adj) >> 8) & 0x07)
103c103
< data = (uint8_t)FM_PITCH_TABLE[key];
---
> data = (uint8_t)(FM_PITCH_TABLE[key]+adj);
122c122
< void YM2203::set_volume(int ch, int volume) {
---
> void YM2203::set_volume(int ch, int volume, int adj) {
137c137
< uint8_t attenate = uint8_t(uint8_t(15 - volume) * 3);
---
> uint8_t attenate = uint8_t(uint8_t(15 - volume) * 3 - adj);

で、あとは soundplayer.cpp の127行目あたりで一度に ym.mix(&data[isample * 2], nsamples); ってやるんじゃなくて「引数adjの部分を少し変化させて ym.set_pitch か ym.set_volume を呼び出してから ym.mix」の繰り返しで合計nsamples分の ym.mix 呼び出しをする、という感じかなあ。この部分をどう作るかがポイント。
あ、set_pitchやset_volumeの中では上限や下限を超えないかどうかのチェックも必要かもしれない。

固定の割合で音程だけ変化させる専用のテスト版を作ってみたら
soundplayer.cppのdiff
127c127,142
< ym.mix(&data[isample * 2], nsamples);
---
> {
> int adj_p = 0; // for pitch
> // int adj_v = 0; // for volume
> int unit;
> while(nsamples) {
> unit = SAMPLERATE/300;
> if (unit > nsamples) unit = nsamples;
> ym.mix(&data[isample * 2], unit);
> isample += unit;
> if (note.m_key != -1) {
> adj_p--;
> ym.set_pitch(ch, note.m_octave, note.m_key, adj_p);
> }
> nsamples -= unit;
> }
> }
129d143
< isample += nsamples;

こんな感じか。
あるいは、unitは音色パラメータに依存しない数値にして、adj_pやadj_vをintではなくfloatにして管理したほうが楽かな。
49:書けるかな? :

2015/12/09 (Wed) 23:49:04

soundplayer.cppの48行目あたり、if文の条件が成立した場合の
m_key = KEY_C;
はCじゃなくてBが正しい?
さらに、普通のMMLのオクターブ指定はO1からO8までだけど、FM音源のチップのオクターブ指定は0から7までのはずだから SOUND_TEST の
phrase->m_setting.m_octave = 4;
は4じゃなくて3にするべき? でもそうすると当然ながら今よりも音が低くなってしまうけど。
50:片山博文MZ◆NveQN6OtcI:

2015/12/10 (Thu) 16:00:21

>>48
方向性としては間違っていないと思うが、LFOはwave formで指定される低周波波形を生成する必要があると思う。
51:片山博文MZ◆NveQN6OtcI:

2015/12/10 (Thu) 16:02:34

>>49
音量は、CMD PLAYでもっと細かく指定できたと思う。
52:片山博文MZ◆NveQN6OtcI:

2015/12/10 (Thu) 16:06:25

>>49
音楽記号のフラットは「半音下がる」だからそれでOK
53:片山博文MZ◆NveQN6OtcI:

2015/12/10 (Thu) 16:08:45

>>49
そうだね。CLOCKをまた調整しないといけない。
54:片山博文MZ◆NveQN6OtcI:

2015/12/11 (Fri) 23:15:46

スポポポーン
55:書けるかな? :

2015/12/16 (Wed) 21:13:41

LFOの音量変化はオペレータ毎にパラメータがあるんだね。前に書き込んだのでは対応できない。
自分には正解がわからんので何とも言えないけど、適当に作ってみた。変数名なんかも適当。真面目にデバッグしてない。
特に、LFOの振幅を決める式の仕様とか全然わからんから // TBD ってコメント付けた。
本気で88そっくりな音にするんなら、実機とエミュレータを駆使してデータを取るべきなのかな。私はやれないけど。

YM2203.h
92,93c92,93
< void set_pitch(int ch, int octave, int key);
< void set_volume(int ch, int volume);
---
> void set_pitch(int ch, int octave, int key, int adj = 0);
> void set_volume(int ch, int volume, int adj1 = 0, int adj2 = 0, int adj3 = 0, int adj4 = 0);

YM2203.cpp
93c93
< void YM2203::set_pitch(int ch, int octave, int key) {
---
> void YM2203::set_pitch(int ch, int octave, int key, int adj) {
99c99
< ((FM_PITCH_TABLE[key] >> 8) & 0x07)
---
> (((FM_PITCH_TABLE[key]+adj) >> 8) & 0x07)
103c103
< data = (uint8_t)FM_PITCH_TABLE[key];
---
> data = (uint8_t)(FM_PITCH_TABLE[key]+adj);
122c122
< void YM2203::set_volume(int ch, int volume) {
---
> void YM2203::set_volume(int ch, int volume, int adj1, int adj2, int adj3, int adj4) {
140c140
< data = ((m_fm_timbres[ch]->tl[OPERATOR_4] + attenate) & 0x7F);
---
> data = ((m_fm_timbres[ch]->tl[OPERATOR_4] + attenate - adj4) & 0x7F);
145c145
< data = ((m_fm_timbres[ch]->tl[OPERATOR_2] + attenate) & 0x7F);
---
> data = ((m_fm_timbres[ch]->tl[OPERATOR_2] + attenate - adj2) & 0x7F);
151c151
< data = ((m_fm_timbres[ch]->tl[OPERATOR_3] + attenate) & 0x7F);
---
> data = ((m_fm_timbres[ch]->tl[OPERATOR_3] + attenate - adj3) & 0x7F);
157c157
< data = ((m_fm_timbres[ch]->tl[OPERATOR_1] + attenate) & 0x7F);
---
> data = ((m_fm_timbres[ch]->tl[OPERATOR_1] + attenate - adj1) & 0x7F);


YM2203_Timbre.h
61a62
> uint8_t ams[OPERATOR_NUM]; // Amplitude Modulation Sensitivity (AMS)
[okamoto@koub

YM2203_Timbre.cpp
cpp YM2203_Timbre.cpp
27d26
< // [1-4][9] : ビブラート関係の設定は未対応
36a36,40
> // [1-4][9] : ビブラート関係の設定
> ams[OPERATOR_1] = (uint8_t)array[1][9];
> ams[OPERATOR_2] = (uint8_t)array[2][9];
> ams[OPERATOR_3] = (uint8_t)array[3][9];
> ams[OPERATOR_4] = (uint8_t)array[4][9];

soundplayer.cpp
9c9
< #define CLOCK 4000000
---
> #define CLOCK 8000000
13a14,133
> #define LFO_INTERVAL 150
>
> class LFOctrl {
> int m_waveform;
> int m_qperiod; // quarter of period
> int m_count;
> int m_phase; // 0, 1, 2 or 3
> float m_adj_p_max;
> float m_adj_v_max[4];
> float m_adj_p_diff;
> float m_adj_v_diff[4];
> public:
> float m_adj_p; // for pitch
> float m_adj_v[4]; // for volume
>
> public:
> LFOctrl() {
> }
>
> void init_for_timbre(YM2203_Timbre *p_timbre) {
> int i;
> m_waveform = p_timbre->waveForm;
> m_qperiod = (p_timbre->speed)?900*LFO_INTERVAL/(4*p_timbre->speed):0;
> //m_count = 0;
> m_phase = 0;
> m_adj_p_max = p_timbre->pmd * (float)p_timbre->pms / 2.0; // TBD
> for(i=0; i<4; i++) m_adj_v_max[i] = p_timbre->amd * (float)p_timbre->ams[i] / 2; // TBD
> init_for_phase(true);
> }
>
> void init_for_keyon(YM2203_Timbre *p_timbre) {
> if (p_timbre->sync) {
> m_phase = 0;
> init_for_phase();
> }
> }
>
> void increment() {
> int i;
> if (0 == m_qperiod) return;
> m_count++;
> if (m_count < m_qperiod) {
> m_adj_p += m_adj_p_diff;
> for(i=0; i<4; i++) m_adj_v[i] += m_adj_v_diff[i];
> }
> else {
> m_phase = (m_phase + 1) & 3;
> init_for_phase();
> }
> }
>
> private:
> void init_for_phase(bool flag_first = false) {
> int i;
> m_count = 0;
> if (flag_first) {
> switch (m_waveform) {
> case 0: // saw
> m_adj_p = 0;
> for(i=0; i<4; i++) m_adj_v[i] = 0;
> m_adj_p_diff = m_adj_p_max / (m_qperiod * 2);
> for(i=0; i<4; i++) m_adj_v_diff[i] = m_adj_v_max[i] / (m_qperiod * 2);
> break;
> case 1: // square
> m_adj_p = -m_adj_p_max;
> for(i=0; i<4; i++) m_adj_v[i] = -m_adj_v_max[i];
> m_adj_p_diff = 0;
> for(i=0; i<4; i++) m_adj_v_diff[i] = 0;
> break;
> case 2: // triangle
> m_adj_p = 0;
> for(i=0; i<4; i++) m_adj_v[i] = 0;
> m_adj_p_diff = m_adj_p_max / m_qperiod;
> for(i=0; i<4; i++) m_adj_v_diff[i] = m_adj_v_max[i] / m_qperiod;
> break;
> default: // sample and hold
> //m_adj_p = m_adj_p_max * (rand() * 2.0 / RAND_MAX - 1);
> //for(i=0; i<4; i++) m_adj_v[i] = m_adj_v_max[i] * (rand() * 2.0 / RAND_MAX - 1);
> m_adj_p_diff = 0;
> for(i=0; i<4; i++) m_adj_v_diff[i] = 0;
> break;
> }
> }
> switch (m_waveform) {
> case 0: // saw
> if (0 == m_phase) {
> m_adj_p = 0;
> for(i=0; i<4; i++) m_adj_v[i] = 0;
> }
> else if (2 == m_phase) {
> m_adj_p = -m_adj_p;
> for(i=0; i<4; i++) m_adj_v[i] = -m_adj_v[i];
> }
> break;
> case 1: // square
> if (0 == (m_phase & 1)) {
> m_adj_p = -m_adj_p;
> for(i=0; i<4; i++) m_adj_v[i] = -m_adj_v[i];
> }
> break;
> case 2: // triangle
> if (0 == m_phase) {
> m_adj_p = 0;
> for(i=0; i<4; i++) m_adj_v[i] = 0;
> }
> else if (1 == (m_phase & 1)) {
> m_adj_p_diff = -m_adj_p_diff;
> for(i=0; i<4; i++) m_adj_v_diff[i] = -m_adj_v_diff[i];
> }
> break;
> default: // sample and hold
> if (0 == (m_phase & 1)) {
> m_adj_p = m_adj_p_max * (rand() * 2.0 / RAND_MAX - 1);
> for(i=0; i<4; i++) m_adj_v[i] = m_adj_v_max[i] * (rand() * 2.0 / RAND_MAX - 1);
> }
> break;
> }
> }
> }; // LFOctrl
>
100a221,222
> LFOctrl lc;
>
116a239
> lc.init_for_timbre(&timbre);
121a245
> lc.init_for_keyon(&(m_setting.m_timbre));
127c251,265
< ym.mix(&data[isample * 2], nsamples);
---
> {
> int unit;
> while(nsamples) {
> unit = SAMPLERATE/LFO_INTERVAL;
> if (unit > nsamples) unit = nsamples;
> ym.mix(&data[isample * 2], unit);
> isample += unit;
> if (note.m_key != -1) {
> lc.increment();
> ym.set_volume(ch, 15, lc.m_adj_v[0], lc.m_adj_v[1], lc.m_adj_v[2], lc.m_adj_v[3]);
> ym.set_pitch(ch, note.m_octave, note.m_key, lc.m_adj_p);
> }
> nsamples -= unit;
> }
> }
129d266
< isample += nsamples;
306c443
< int main(void) {
---
> int main(int ac, char *av[]) {
311c448
< phrase->m_setting.m_octave = 4;
---
> phrase->m_setting.m_octave = 3;
315c452
< phrase->m_setting.m_tone = 15; // @15 DESCENT
---
> phrase->m_setting.m_tone = (ac<2)?15:atoi(av[1]); // @15 DESCENT
56:片山博文MZ◆NveQN6OtcI:

2015/12/21 (Mon) 21:11:41

御免、もうちょっと時間が掛かりそうだ。
57:片山博文MZ◆NveQN6OtcI :

2015/12/31 (Thu) 16:48:27

>>55
すごい!!! まさしくプロの仕事です!!
これを使わせてもらいます。
あなたの名前(ハンドル名でも可)を教えて下さい。
58:片山博文MZ◆NveQN6OtcI:

2016/01/01 (Fri) 00:39:28

明けましてすみません。
59:書けるかな? :

2016/01/01 (Fri) 13:23:33

ハンドル名は「書けるかな?」でもいいんだけど、もっとIDっぽい物では「okrt」ってことにしておきます。
それより、(2chでも懸念されてたと思うけど)この書き込みが上の書き込みと同一人物かどうかの確認、ここでだったらできるのでしょうか。
IPアドレスだけ見てもバラバラだろうけど、ホスト名とUserAgentで大体の見当はつくのかな。

あと、使うのはもちろんいいんだけど
・演算結果がパラメータの上限や下限を超えるかもしれない箇所がある
・PC-88実機との差異がどれぐらいは知らない
 1.特にTBDのところ、実機では単なる掛け算じゃないかもしれない
 2.定数の数値を調整や追加するだけで、より実機に近い挙動に改善できる箇所もあるはず
 3.小数点以下の数値の切り捨て/切り上げの扱いは実機と違う箇所もあるだろう
 4.実機での不具合のような挙動を再現するかどうか
・実機との差異の問題ではなく、単なる不具合もあるかも
・挙動には関係ないけど、変数名なんかの付け方は適当
以上をふまえた上でお願いします。
60:片山博文MZ◆NveQN6OtcI:

2016/01/01 (Fri) 15:43:34

管理画面で同一人物か確認できますのでトリップを付けて書き込んで下さい。トリップの生成文字列をパスワードにします。
61:片山博文MZ◆NveQN6OtcI:

2016/01/01 (Fri) 16:06:23

VeySicKのリリース日が2016.1.10になっておりますが、細かい点は後で調整できます。
実機との違いについては、こちらでエミュが出力したデータを用意しますので、ご確認・ご調整頂けると幸いです。
実機での不具合のような挙動は再現する必要はありません。
62:書けるかな?◆HaUvfWgRQc :

2016/01/01 (Fri) 19:40:05

トリップのテスト
63:書けるかな?◆HaUvfWgRQc :

2016/01/01 (Fri) 19:43:56

今後はこれで書き込みます。
64:書けるかな?◆HaUvfWgRQc :

2016/01/01 (Fri) 23:34:56

ただ、実機の挙動に近付けるための調整は、実機とエミュを持ってる人の手で直接やるのが早くて確実だと思います。
65:片山博文MZ◆NveQN6OtcI :

2016/01/02 (Sat) 12:07:09

GitHub更新。
https://github.com/katahiromz/VeySicK
https://github.com/katahiromz/fmgon

CMD_PLAY.zip
パスワード:friend
https://drive.google.com/uc?export=view&id=0B3nA8ShVAS4OSW1OcUlZQ3ZhVjA
66:片山博文MZ◆NveQN6OtcI:

2016/01/02 (Sat) 17:52:24

okrtさん、メールないの? Amazonギフト券あげるからメールで連絡して。ツイッターとかは使ってる? トリップ生成文字列を忘れずに。
67:書けるかな?◆HaUvfWgRQc :

2016/01/02 (Sat) 22:17:12

メールアドレスはあんまり公開したくないかなぁ。新たに作ればいいのかもしれないけど。
ツイッターは、とあるプレゼントの応募のために作った https://twitter.com/okrt_p07 があるけど知人にも教えてないし、常用してません。ダイレクトメッセージは誰からのメッセージでも受信できるようにしたはず。

VeySicKで CMD PLAY と CMD VOICE COPY が実機同様に使えるようになったら、ソフトウェアLFOの挙動を実機に近づける作業も(実機を持っている人には)やりやすくなるのかな。
68:片山博文MZ◆NveQN6OtcI:

2016/01/03 (Sun) 17:52:04

ダイレクトメッセージでギフト券の番号を送ったよ。必ず確認してね。

シャープとフラットの処理が間違ってたようだ。SSGのquantityの処理も少し違ってた。明日、GitHubを更新する。
69:書けるかな?◆HaUvfWgRQc :

2016/01/03 (Sun) 21:46:55

ギフト券の番号、受け取りました。まだ登録してないけどありがとう。

時間も能力も限界があるので、今後どれぐらい協力できるかはわからないけど。
VeySicK、適当にビルドしてCMD PLAYを中心に少し使ってみた。

まずは、作る側の事情は全く関係なしで、使う側の立場で気付いた不具合や改善要望など。88も98も詳しくないけど。
・9801モードではPLAYもCMD PLAYも使えないのが仕様? 9801実機のBASICにはPLAYがあるようだけど。
・CMD PLAYでチャネル6(SSG音源の3番目)を使おうとするとエラーになる?
・CMD PLAYのオクターブの初期値がO4ではなくO5になっている?
・Restartしてもオクターブ指定が初期化されない。Restart直後、単に"C"を鳴らすとRestart前の指定に影響される。
・CMD PLAYで、オクターブ指定した"O4C"や"O5C"は鳴らせるが、数字を省略した"OC"はエラーになる。MSX-BASICのPLAYでは"OC"も"O4C"も同じだが、VeySicKではオクターブ指定の数字を省略できないのが仕様?
・9801モードやVSKモードでは、もっとメモリを多く使用できても良いのではないか? 詳しくは知らんけど。
・ほぼ常時、1スレッド占有している? CPU消費は少ないほうが良いと思うんだが。
・自動で文字入力できたら便利。(例:武田さんのCommon Source Code Projectのエミュレータは、Windowsのクリップボードの内容をPasteできる。openMSXでは、公式ランチャー「Catapult」のテキストボックスの内容をエミュレータにTypeできる。)
・Insを押してもカーソルキーの形状が変化しないのは8801実機などでの仕様? MSX-BASICでは形状が変化するので個人的には少し違和感あり。

あとは、中の作りに関して。
・今はCMD PLAY実行時にfmgonで音を一括生成してるんだろうけど、本来は実時間の経過に応じて随時少しずつym.mixなどを呼び出すべきだろうなぁ。処理が複雑になるかもしれないけど、CMD VOICE REGやCMD SOUNDあたりを実装するのであれば必要になってくるような気が。
70:片山博文MZ◆NveQN6OtcI :

2016/01/04 (Mon) 14:17:52

GitHub更新。
https://github.com/katahiromz/VeySicK
https://github.com/katahiromz/fmgon

言われたところを修正しました。
9801モードでPLAY使用可能。
チャネル6も使用可能に。
オクターブの初期値を修正。
Restartで設定を初期化。
MMLで数字省略可能に。
メモリは現状では、8801ベースなので、変更しませんでした。
つーか、9801のメモリモデルを理解していない。
OpenALを使うために、スレッドを占有しています。
自動入力はまだです。
Insでカーソル形状が変わらないのは、仕様です。
71:片山博文MZ◆NveQN6OtcI:

2016/01/04 (Mon) 15:34:50

んー、確かに再描画を減らしたら、計算量を削減できるよな。
72:片山博文MZ◆NveQN6OtcI:

2016/01/04 (Mon) 16:04:02

区間チェックの件は、上限値より大きかったら、上限値に修正し、下限値より小さかったら、下限値に修正する関数を使えばできると思います。
73:書けるかな?◆HaUvfWgRQc :

2016/01/04 (Mon) 22:10:20

VeySicKの小ネタ。
i%=32767:i%=i%+1:?i% でエラーにならない。
74:書けるかな?◆HaUvfWgRQc :

2016/01/04 (Mon) 23:59:32

今後、個人的な状況がちょっとアレなので一旦、この件から離れます。
また明日以降、作る側の事情は全く関係なしでコメントするかもしれないし、中のコードに関してあれこれ言うかもしれないし、全く音沙汰ナシかもしれないけど、とりあえず今日で一区切り。

最後に、soundplayer.cppのdiffだけ置いていきます。
40c40
< m_adj_p_max = p_timbre->pmd * (float)p_timbre->pms / 2.0f; // TBD
---
> m_adj_p_max = p_timbre->pmd / 128.0f * (1 << p_timbre->pms); // TBD
43c43
< p_timbre->amd * (float)p_timbre->ams[i] / 2; // TBD
---
> p_timbre->amd / 128.0f * (1 << p_timbre->ams[i]); // TBD

こっちのほうが本物の音に近いような気がするけど、勿論これを適用するかどうかも含めて全てお任せします。
75:775 :

2016/01/19 (Tue) 21:53:13

Keyloggerの配布は中止に鳴ってしまったのでしょうか?
76:片山博文MZ◆NveQN6OtcI:

2016/01/19 (Tue) 22:41:07

はい、配布終了となりました。
77:片山博文MZ◆NveQN6OtcI:

2016/01/19 (Tue) 22:56:47

MZ KeyLoggerのソースコードなら有償で提供可能です。ただし動作保証はありません。メールでご連絡下さい。

  • 名前: E-mail(省略可):
  • 画像:

Copyright © 1999- FC2, inc All Rights Reserved.