任天堂3DS用ソフトプチコン3号、 もしくはPC上で動作する音波によるファイル送受信ソフトです。
PCとプチコン3号の間で、 音波でファイルを転送するためのソフトウェアです。 デジタル変復調の勉強を兼ねた、自分用のファイル転送ソフトです。
PC間、プチコン間での転送も可能です。
特殊なケーブル等がなくても転送できるように作っています。
ケーブル無し、静かな環境で私が試行したさいの転送速度は大体下記のようになります。
| 変調レート | 実効転送速度[byte/sec] | |
|---|---|---|
| 自動再送無し | 自動再送あり | |
| 300 | 20 | 18 |
| 600 | 50 | 47 |
| 1200 | 100 | 92 |
このソフトは無料で利用して構いません。 今後有料化の予定もありません。 ご自由にお使いください。
2次配布、商用利用、改造、リバースエンジニアリングなどもご自由にどうぞ。
BitCoin、gumroad、PayPalによる寄付を受け付けております。
サーバー維持費、証明書取得・維持費、開発環境構築・維持費等に用います。 明細を公表する予定はありません。 必要を上回った場合は公益機関に寄付し、その旨をサイト内で報告します。
キーボードは小さくて使いづらいし、 かといって外部キーボードは繋がらないし、 いちいち3DS落としてmicroSDとりだすのも大変だし… というわけで、唯一外部と双方向通信が可能なマイク/スピーカーを用いて ファイルを転送するためのプログラムを作成してみました。
折角なので懐かしのV.21モデム(300bps)で。
あまりに遅いので、転送楽にするために圧縮・伸長用のソフトとライブラリも付けました。
「LZSS for PetitCom」を実行し、ファイルをドロップすると圧縮・伸長します。 画像ファイルはプチコン3号で表示可能な色数に減色して圧縮します。 圧縮・伸長後のファイルは元のファイルと同じフォルダに保存されます。 圧縮・伸長は拡張子を元に判断しています。
プチコン側でファイルを圧縮・伸長したい場合は同梱のLZSSLIBを用います。
テキストファイルの転送はUTF-8で行っています。 プチコンからPCに送った場合、UTF-8のテキストファイルになります。 PCからプチコンに送る場合はUTF-8コーディングされたテキストファイルを用いてください。 また、プチコンは保存時にCR(0x0D)をLF(0x0A)に変更してしまうため、改行コードにCRLFを用いるとLFが二つ重なることになります。
プチコン側プログラムはファイルの拡張子でファイル種別を判定しています。 GRPリソースは".GRP"という拡張子を、 TXTリソースは".TXT"もしくは".PRG"という拡張子を付けて送る必要があります。 それ以外のファイルは全てDATリソースとして扱われます。
遅いのはノスタルジーを感じる為の仕様です。
V.21にこだわらなければ2400bpsくらいは普通に出せそうなのでそのうち速くするかも。
Ver.1.2.0から1200bpsまであげましたが、自動再送モードでは50byte/secしか出ていません。 転送プロトコルを変えて100byte/sec程度まで早くする予定。 それ以上はケーブルが必要かなぁ。
ファイル種別がよくわかってないのでまた今度。
っていうか500KByteのデータを300bpsでって5時間はかかるけど…
Ver.1.1.0からGRP転送に対応しましたが、300bpsでは実用に耐えません。
1200bpsでも1枚3時間…
はい。
いつか。
やっつけなので。 懐かしい感じに仕上げたかったんですが資料が見つかりませんでした。
1文字を8bitで転送しているので、8ビットで表現できない文字列は転送できません。
ごめんなさい。
Ver.1.1.0よりUTF-8転送にしたので全ての文字を転送可能になりました。
おむつを作るべき人に言ってください。 俺が漏らしてるんじゃねぇし。
プチコン3号、PCの間で音でファイルを転送するためのソフトです。
プチコン3号にはそれしかないので。
あった方がいいですが、音なので無線が可能です。 もちろん周りがうるさいとダメです。
PC側のマイクの感度は最大で。スピーカーはまぁ耐えられる程度で。 DSのスピーカーは大き目で。
手元のノートPC(X200s、X240s)の場合、 キーボードの上にDSをモニターに向けて載せるとちょうどいい感じ。
PC側の出力はイヤホンをDSのマイクに近づけるのが最良でした。
ケーブルを用いる場合はどちらも音量小さめで。 ケーブルによってはPC側で大きな音を鳴らしながらDSにプラグを指さないとDS側で音声入力を検知できない場合があります。 大音量で音楽等を鳴らしている状態でDSに指し、その後音量を下げて通信するとうまくいくようです。
1200bpsも出るんだから我慢しようよ!
Simplexは単方向通信なので、エラーが起きても送信側にはわかりません。 歯抜けになって受信が終わらない場合、 もう一度送信すれば転送に成功した部分を自動で埋めてくれます。
自動再送要求のことです。 これを指定すると転送がうまくいったかどうか確認しながら通信します。 双方向通信になるので、送信側、受信側共にマイクとスピーカーが必要です。
FSKなので、受信側の感度が高めの方がうまくいきます。 通常のマイクで音割れが発生する程度の感度がよいようです。
破裂音は広帯域の音を出しますので、拍手や、舌打ちは辞めておいた方がよいかと思います。
まぁ似たようなものです。
ダメです。理論上は可能なはずですが、法律上は不可です。 3DSも本ソフトも電気通信事業法の適合認定を受けていません。 3DSは音響カプラでもモデムでもないので当たりまえですが。
周波数と変調方法と速度が同じというだけなのでそのままでは無理かと。 ダイヤルの問題とか音が途切れる問題とか音圧とかいろいろ細かい問題を解決して、TTYをつければ。
TTYはいつか実装する。(頑張れ俺
仕様です。連絡をくれれば直すかも。
3DSによるできるだけ高速な無線通信を想定しているからです。
ASKは2値にしろ多値にしろ、音量の調整が必須です。 音が割れると正確に伝送できません。
PSKはFSKと本質的には大して変わりませんが、 多値にする際に位相検出の精度が必要になります。
FSKでは音割れがあっても問題なく(=音量調節がほぼ不要)、 多値にするのにキャリアを増やせばいいだけなので簡単です。
普通に直交検波+LPFです。
シンプルに調歩同期によるキャラクタ検出とヘッダー検出で。 フレーム毎にCRCによるエラー検出があるので数回試行すればそれなりに検出できます。
ファイル名・サイズを転送する必要があったのと、フレームサイズが小さいのとで、XMODEMは使えません。 ZMODEMはややこしいしウィンドウが実質意味をなさなくなるので却下。 結局オリジナルになりました。
番号0のフレームはデータにファイル名とファイルサイズを入れています。
プチコン3号の仕様のせいです。 プチコン3号での音声出力には様々な制約があり、信号転送には工夫が必要です。
バグなのか仕様なのか、プチコンは周波数がずれてるので修正しているだけです。
エラー訂正符号の効果がほとんどないからです。 調歩同期なので、大抵のエラーはフレーミングエラーになり、 バーストエラーに強いタイプの符号でなければ効果がありません。 ですが、たかだか54バイトのフレームなので、バーストエラーが1/3を超えたりが普通です。 これを訂正するために符号をいれるとデータがほぼ無くなります。
KoopmanのCRC16を用いています。 これは16bitCRCとしては最良のものです。
OBONO氏作成。QPSK+ハミング符号。
myu314氏作成。
V.21 Modemの勧告。
V.23 Modemの勧告。
Philip Koopman, Tridib Chakravartyによる総当たりによる最適CRC多項式の導出。