追記

一往確認日記


2020年12月02日 [長年日記]

_ ENVELOPE - その4 (MIDI編)

前回ENVELOPE - その3の続きです。

何回も出てますが、このコマンドで鳴る音をMIDIデータに変換して鳴らしてみたいと思いました。

ENVELOPE 2,1,2,-2,2,10,20,10,1,0,0,-1,100,100
SOUND 1,2,100,100

が、ここではたと気付きました。 ENVELOPEでは半音を4分割しているんです。
下表では音階しか書いてませんが、その間隔が4になっているのにようやく気付きました。
ガーン、MIDIで鳴らすことなんてできません。
ENVELOPEはきっと効果音を狙ったコマンドなんですよね。

Image from Gyazo

ということで早々に諦めて、関連ということでMIDIファイルを作るには?に変えてお送りします。

MIDIの知識はありますがスタンダードMIDIファイルについては全く知識を持ち合わせていません。

Wikiを見るとOpcode社のフォーマットが元になっているんですね。Visionは使ってたことがあるので、あのファイル(って覚えてませんが)がスタンダードMIDIファイルに発展していたんですね。
OMSって何?とか思ったりしたもんでした。

RubyでスタンダードMIDIファイルを扱うgemを探したところ、midilibが検索で見つかりました。

GitHub - jimm/midilib: Pure Ruby MIDI file and event manipulation library

とりあえずexampleを確認してみます。 from_scratch.rbというのが参考になりそうです。

midilib/from_scratch.rb at main · jimm/midilib · GitHub

つづく

Amazon | 【国内正規品】 ROLAND ローランド JU-06A JUNO-106+JUNO-60 がBoutique シリーズで復活 JU-06A アナログモデリングシンセ | シンセサイザー | 楽器


2020年12月01日 [長年日記]

_ M5StackでPac-Man (2)

前回M5StackでPac-Manのデモまでできる様になりましたが、ジョイスティックがないので移動操作は省いていました。

これを何とか操作できる様にしたいというのが今回の取り組みです。

実は加速度センサーを使って、というアイディアはすぐ浮かんでいて、あとはどのデバイスを使うかということになってました。

使っているM5Stack BASICには加速度センサーはついてなくて残念でしたが、M5StickCとM5Atom Matrixには加速度センサーがついています。
どちらでも良いのですが、より小さいM5Atom Matrixを使用することにします。

M5Atom Matrixからデータを受け取るにはI/Oやシリアル通信でも良いのですが、WiFi通信を使うことにします。

WiFiなら前に作ったirBoard Library for ESP32で作った構造が使えそうです。

irBoardとM5Stackデバイスが接続可能になりました

GitHub - irBoard Library for ESP32.

ということでまずは受信側を作ります。
WiFiのAPモードで動作させアクセスポイントとして振舞う様にします。

受け取るデータはどうしようか悩んで、X、Yの傾きを数値で受けようかとも思いましたが、方向だけもらえれば良いはずなので…と思っていたら、そうだそういうのはテンキーでやるんだよなと思い出し、数値(文字)を貰えば良いということになりました。

↖️7 ⬆️8 9↗️
⬅️4 5 6➡️
↙️1 ⬇️2 3↘️

ということで追加したのがこちらです。

add JoyM5Atom. · katsuyoshi/M5Stack-Pacman-JoyPSP@5844133 · GitHub

パソコンで SSIDが Pac-Man のWiFiに接続し、パスワードに JOYM5ATOM を入力します。
ターミナルから以下の様にtelnetで接続します。 数値を入力してリターンキーを押すとその方向に移動します。 telnetだとリターンキーを押さないと送信してくれないのが残念です。(もっといいやり方あると思いますが…)

% telnet 192.168.4.1 8888
4
2

次は送信側です。


2020年11月29日 [長年日記]

_ M5StackでPac-Man (1)

たまたまM5StackにPac-Manを移植している記事を見かけまして…

PACMAN with M5STACK | macsbug

是が非でも動かしてみたい衝動にかられました。

記事のコードを貼り付けてもうまくいかなかったので、元になったMhageGHさんのコードを辿って更にそこからフォークしてM5Stack用に変更してそうなtobozoさんのコードからフォークしました。

M5Stackではボタンが足りなくてジョイスティックをつないでやってるみたいなんです。
でも手持ちのジョイスティックなんてないんです。
しかし、デモ画面だけでも動かしてみたくて、それなら何とかなるのではないかと…

最初M5StackUpdater関係でつまずいてしまいました。
M5StackUpdaterは多分SDカードからアプリを選択できる様にする仕組みではないかと思います。
M5Stackでまともに動くSDカードが手元にないこともあってこの部分は省くことにしました。

あとはジョイスティックもないので関係する箇所を省きました。
音も期待していたのですが、残念ながらプチプチいってるだけで耳障りだったので、こちらも省くことにしました。

ここまでで何とかデモが見れる様になりました。

変更箇所

Image from Gyazo

これで満足したのですが、やっぱりゲームもしてみたくて、ジョイスティックの代替案がないわけでもないので、続きます。

Amazon | ナムコ名作ゲーム 12種類 テレビに繋げるだけで直ぐプレイ! 「パックマン コネクト&プレイ」 | その他のゲーム機種本体全般


2020年11月22日 [長年日記]

_ ENVELOPE - その3

前回のENVELOPE - その2の続きです。

何回も出てますが、このコマンドでどの様な音程になるかグラフにしてみます。

ENVELOPE 2,1,2,-2,2,10,20,10,1,0,0,-1,100,100
SOUND 1,2,100,100

caxlsxを使うとRubyからExcelファイルを生成することができます。グラフも書かせることができて便利です。

こちらが生成したグラフです。
青色が音程で、80(G2)から120(F3)まで周期的に上下しています。
オレンジ色は音量の変化になります。

音程グラフ

こちらがRuby srciptになります。 27、28行目のENVELOPE、SOUNDコマンドを書き換えると他のパターンも試すことができます。
envelope.xlsxの右端のview rawを押すとExcelファイルをダウンロードできます。


2020年11月20日 [長年日記]

_ ENVELOPE - その2

前回のENVELOPE - その1の続きです。

SOUNDについて説明していませんでしたので説明しておきます。

ENVELOPE 2,1,2,-2,2,10,20,10,1,0,0,-1,100,100
SOUND 1,2,100,100

SOUNDは4つのパラメータがあります。

SOUND パラメータ名 範囲 機能
1 C 0〜3 チャンネル番号。0:ノイズ, 1-3:キーノート
2 A -15〜3 音量。0:消音,-15:最大,1-3:ENVELOPE登録番号
100 P 0〜255 音程。下表参照
100 D 1〜255 長さ。Dx0.05sec

音程のコード

Aが2の場合はENVELOPE登録番号2を対象とします。
Pが音程で100は高いドに当たります。この音からENVELOPEで指定した通りに音程が変化します。
Dに指定した値に0.05倍した秒数鳴らします。100は5秒鳴らすことになります。

_ G線上のあなたと私

Amazon Prime VideoでTBS系のドラマが結構上がっています。
秋田ではTBS系列がないのですが、かろうじて日曜劇場は1周遅れで別系列で放映してくれているので見ることができていて、下町ロケットやノーサイドゲーム、集団左遷など見直したりしています。

そんな中 G線上のあなたと私 についてが目に止まりました。
上記の通り日曜劇場以外は見ることはできないため、予備知識なしに見始めたのですが、これが面白い。笑いあり涙ありで、最後やっと落ち着いたかと思ったところでまたオチをつけてきたりと。
ENVELOPEシリーズでG線上のアリア鳴らすところまでやってみようかとも思ったりしてます。

Amazon | G線上のあなたと私 Blu-ray BOX -TVドラマ


2020年10月31日 [長年日記]

_ ENVELOPE - その1

前回のBBC MicroのENVELOPEコマンドについてです。

ENVELOPEはシンセサイザーでは音の振幅のコントロール(ADSR)によく使われています。
BBC MicroのENVELOPEは振幅に加えて音程(ピッチ)もコントロールで、シンセサイザーでいうLFOによる変調の機能も持っている様で、この点に驚いたのでした。

ADSR - Wikipedia

LFO (電子楽器) - Wikipedia

おさらいです。
BBC Micro emulatorで下のコマンドを入力します。

ENVELOPE 2,1,2,-2,2,10,20,10,1,0,0,-1,100,100
SOUND 1,2,100,100

これはBBC Microの説明にあるものなのですが、a wailing police siren(パトカーのサイレン)とありますが、パックマンの音にしか聞こえません。

ENVELOPEには14個の数値を指定していて、ぱっと見では何をしているかわかりませんのでドキュメントをみてみます。

ドキュメント

前半の8個が音程に関するパラメータです。
後半6個が振幅に関するパラメータです。

ENVELOPE パラメータ名 範囲 機能
2 N 1〜4 登録番号
1 T 0〜127 : 0-6bit 1ステップの長さ。(Tx1/100秒)
T 0 or 128 : 7bit 0:単発 128:連続
2 PI1 -128〜127 1ステップ毎のピッチ変化量1(PI1x半音)
-2 PI2 -128〜127 1ステップ毎のピッチ変化量2(PI2x半音)
2 PI3 -128〜127 1ステップ毎のピッチ変化量3(PI3x半音)
10 PN1 0〜255 PI1のステップ数
20 PN2 0〜255 PI2のステップ数
10 PN3 0〜255 PI3のステップ数
1 AA -127〜127 1ステップ毎の振幅変化(立ち上り)
0 AD -127〜127 1ステップ毎の振幅変化(減衰)
0 AS -127〜0 1ステップ毎の振幅変化(保持)
-1 AR -127〜0 1ステップ毎の振幅変化(余韻)
100 ALA 0〜126 AAの到達レベル
100 ALD 0〜126 ADの到達レベル

2020年10月29日 [長年日記]

_ BBC Micro

友人のツイートで知ったのですが、BBC Microというコンピューターのエミュレーターがあって、@bbcmicrobotで実行した何秒かをアニメにしてツイートしてくれるサービスがあるとのことです。

BBC Micro emulator

BBC MicroはBBCとある様に英国放送協会の運営で使用するために作られたコンピュータでエイコーンという会社が作ったものです。
これが後にARMプロセッサーを作る様になり、iOSデバイスばかりかMacにまで採用される様になるあのARMの生みの親であることを、今更ながら知ったところです。

BBC Micro - Wikipedia
ARMアーキテクチャ - Wikipedia

海外のコンビューター事情についてはAppleとCommodore、PET位しか知らなかったので(Apple以外は触ったことがいなのですが)、興味本位で今触っているところです。昔のBASICマシーンをこういう形で簡単に触れるのは良いですね。(NECやFijitsu、Sharpなんかも許可してくれると良いのに)

JSBeeb - Javascript BBC Micro emulator

こちら(↓)にドキュメントがあるのですが、ENVELOPEというコマンドがあり何だろう?と…
BC Micro User Guide (PDF)

当時音を鳴らすには

PLAY "C4D4E4F4G4"

という感じで音階と長さを指定して鳴らしていました。

それがマニュアルに従ってエミュレーターで

ENVELOPE 2,1,2,-2,2,10,20,10,1,0,0,-1,100,100
SOUND 1,2,100,100

と入れると、もうパックマンの音になっているではありませんか!
これは衝撃的でした。
是非エミュレーターに入力して試してみてください。

暫くENVELOPEを試してみたいと思います。

この後、N88BASICを調べ直したら音源がある場合の仕様もあるようですが、ENVELOPEと同じ様なことは出来なそうな感じに見えます。
(音源がある機種を持ってなかったのでこの仕様は記憶にございません。)

N88-BASIC(86) PLAY - radioc.dat

_ 記憶にございません

支持率最低の総理が記憶喪失になってしがらみや忖度なしの振る舞いをして政治が変わっていくのをコミカルに演じています。

Amazon.co.jp: 記憶にございません!を観る | Prime Video


2020年09月27日 [長年日記]

_ PLC間の変換 その6 ~ LadderConverter.exe

三菱電機からキーエンスのPLCへ変換する試みです。

前回Ladder ConverterができてFXシリーズからKV Nanoシリーズへの変換ができる様になったことをお伝えしました。

まだ、変換できていない命令がありましたが、そういうのも追加して、今回必要だったプロジェクトデータはほぼ変換できる様になりました。

ほぼというのはBINやTOなどの命令には対応してなくてそれらは無視して変換しています。 BINは単純な置き換えではなくなり、LDAなどと組み合わせが必要になります。TOはモジュールに対する命令なので、これはメーカーが違えばどうしようもないので後で自力で頑張ってもらうしかない箇所です。

それと、ジャンプやサブルーチンで使うラベルですが、FXでP100といきなり100番から始まっているとKV Nanoでは範囲外になってしまうので、予めP1からに変換してからじゃないとできなかったりします。
デバイスやラベルの変換テーブルなどもあったほうがいいと思うので、そのうち追加したいと思います。

というところまでできたのですが、Ladder ConverterはRuby実行環境を整えないといけないのですが、多くの方に試していただきたいのでアプリ化(LadderConverter.exe)して簡単に使用できる様にしました。

LadderConverter.exe

Gumroadにてダウンロードできますのでお試しください。
0円を指定してダウンロードできますが、大幅に工数が削減できたという事があったらあらためて有料でダウンロードいただけるとありがたいです。

ダウンロードはこちらから
LadderConverter.exe

ここではRubyでいろいろしていましたが、アプリ化するという術を覚えたので今後はアプリとして提供する事ができます。
ここを読んでいて、こんな事ができるんではないかという様な仕事がありましたらぜひご連絡ください。

こちらよりお寄せください。

問い合わせフォーム

_ 藤井聡太と将棋の天才

スポーツ誌で将棋の特集が組まれているという事で衝動買いしてしまいました。
マラソンなんかでも買った事がなかったのに初めてのNubmerです。

Number(ナンバー)1010号「藤井聡太と将棋の天才


2020年09月14日 [長年日記]

_ PLC間の変換 その5 ~ Ladder Converter

三菱電機からキーエンスのPLCの変換する試みです。

前回単純なIN-OUTのラダーで変換の仕方について書きました。

ちょっと実験するだけのつもりでしたが、Ladder Converter というRuby gemを書いていて基本的なラダーを変換できるまでになりました。
左が変換元のFX2ラダーで右が変換後のKV Nanoのラダーです。

Image from Gyazo

テストに用いた変換前と変換後のファイルを確認したい場合はこちらからダウンロードできます。

https://github.com/ito-soft-design/ladder_converter

緑のCodeといあるボタンからDownload ZIPを選ぶとダウンロードできます。

test/files/src/FX2N.gxw がFX2のプロジェクトで
test/files/dst/KvNano 内にKV Nanoのプロジェクトがあります。

上のGithubのページにありますが、Rubyを使うことができれば以下のコードで変換できます。
src_pathに変換元のファイルを指定し、dst_pathに変換後のファイルの保存先を指定します。

require 'ladder_converter'
include LadderConverter

src_path = "path_to_mitsubishi_csv_file ..."
dst_path = "path_to_store_keyence_mnm_file ..."
converter = Mel2Kv.new src:src_path, dst:dst_path
converter.save

つづく

_ ネバーエンディング・ストーリー

Amazon Prime Videoでネバーエンディング・ストーリーが見れるようになっていました。

ネバーエンディング・ストーリー (吹替版)


2020年09月02日 [長年日記]

_ PLC間の変換 その4 ~ 簡単な IN-OUT で試してみる

FX2の場合

三菱電機からキーエンスのPLCへ変換する試みです。

まずは単純なIN-OUTのラダーで試してみます。

GX Works2でFX2のプロジェクトを作り単純にX0とY0をつないだ回路を作ります。

Image from Gyazo

このニーモニックは下の様になります。メモ帳で開けます。

"FX2"
"PC情報:"	"FXCPU FX2/FX2C"
"ステップ番号"	"行間ステートメント"	"命令"	"I/O(デバイス)"	"空欄"	"PIステートメント"	"ノート"
"0"	""	"LD"	"X000"	""	""	""
"1"	""	"OUT"	"Y000"	""	""	""
"2"	""	"END"	""	""	""	""

LD X000 と OUT Y000 が該当する行になります。

KV Nano の場合

KV Studio で同様な KV Nano のプロジェクトを作成します。

Image from Gyazo

ニーモニックはこちらです。メモ帳で開けます。

DEVICE:135
;MODULE:Main
;MODULE_TYPE:0
LD R000
OUT R500
END
ENDH

LD R000 と OUT R500 が該当行になります。

考察

どちらも LD、OUT と命令語は同じですので、デバイスの表記を変換すればよさそうです。

FX2のX、Yデバイスは8進数で、KV Nanoは10進数なのでその変換が必要になります。 またKV Nanoでは入力がR000からで、出力はR500からとなりXはR000からに、YはR500からに変換する必要があります。