Day 9327 将数据文件写入普通卡式录音带

标题有些夸大,并且由于设备不全,试验其实也没有做完,描述一遍好了。

小时候接触过从有钱亲戚家淘汰下来的裕兴电脑学习机,或者称呼其正式名称,「裕兴新世纪普及型电脑」,记得型号是F型,已经处于学习机的中后期,可以使用真正的3.5英寸软盘进行程序存储,但当时听说早期型号的学习机可以向普通录音带存储程序,感觉很神奇,却始终未能得见。

许多年以后,有关FC学习机的记忆大多已经淡忘,却一直对普通录音带存储数据念念不忘。最近有点闲,在Google上搜索,终于找到一点可以用现成编码方式组合解决方案的线索,现总结如下:

一、原始方案

方案来自这篇博文,使用主板的板载声卡,配合Ham Radio Deluxe套件中的Digital Master 870将数据编码为RTTY(Radio TeleTYpe 无线电传)信号(如有必要可以对数据使用Base64等方式进行预编码),将输出的音频在外部用卡式录音机进行录制保存,并在需要的时候逆向操作,提取其中的数据。

二、改进方案

由于板载声卡通常有噪音,会造成RTTY接收程序随机接收到无关字符,且RTTY的默认编码博多电码(Baudot)无法传输小写字母和部分标点,于是进行少许改进后,编码方案如下:

  1. 字符串编码规则为:所有数据首先经过Base64编码,然后进行字符替换,大写字母和数字保留原样,小写字母前加’(西文单引号)为标记,Base64编码后的/(西文斜杠)保留原样,+(西文加号)因博多码不支持修改为-(西文减号),补位=(西文等号)去掉;
  2. 完整的文件数据串以?(西文问号)开头;
  3. 编码后的文件名,以及分隔符:(西文冒号);
  4. 编码后的原始文件MD5值(大写)(由于只包含大写字母和数字,其实和编码前没有区别),以及分隔符(西文冒号);
  5. 编码后的原始文件数据;
  6. 结束符号;(西文分号)。

从数据字串到音频的转换及其逆向操作使用MMTTY进行,而从编码字串中恢复数据基本就是拆分后逆向恢复的过程,唯一需要注意的是由于编码时忽略了Base64字符串最后的补位字符=(西文等号),需要按照Base64的编码规则(长度一定是4的倍数)将缺少的=补上,例如:解码后的字符串长度为61,在进行Base64解码前就要补上3个=。

rtty_file

三、具体实现

由于我只是有点闲而没有很闲,并且也缺乏无线电和数据编、解码方面的理论知识,所以只在理想状态即使用声卡的内录(从「立体声混音」设备录制)下做了试验,效果还说得过去。

写了个小程序进行编解码工作,因为代码写得很丑而且并没有实用性(见下文),仅贴一张截图,演示和下载就免了。

四、不足之处

1、由于只在理想环境下进行过操作,没有实际接入录音机进行「上传」「下载」试验,现行编码方案亦未包含容错处理,并不适合实际使用。

2、通过实际操作发现:将文件名为TEST.TXT、大小为11字节的文件进行编码,并使用MMTTY的默认设置(速度最快)录音后,需要约11秒的时间才能传输完编码后的64字节数据,数据膨胀为原始文件的6倍,以此计算,同样长度文件名的原始文件每KB数据将用掉17分钟的音频进行保存,存取速度仅为1bps,较常见的卡式录音带为90分钟,每面45分钟,则单面最多仅能记录2.6KB左右的数据,一盘磁带的容量仅为5KB左右。而早在1970年的PC机上,使用FSK(频移键控)编码的普通录音带数据存储已可达到500-2000bps的比特率,在2000bps下90分钟磁带的单面存储量即有660KB,是我的方案的132倍,如采用现代调制解调器上使用的QPSK(正交相移键控)编码,存储速度将能达到10-17Kbps,同样的每盘磁带将能存储60MB的数据,是我的方案的一万两千多倍,故本文的方案存储密度极其低下,不具备实用性。

3、另外,某16GB容量U盘为49.9元,每MB存储成本为0.003元,某宝上60分钟的杂牌录音带为1.3元每盘,依前述每盘可以存储5KB计算,每MB存储成本为266.24元,是U盘的接近9万倍,存储成本极其高昂,完全不具备实用性。

五、小结

一如前述,由于我只是有点闲而没有很闲,所以这也只是个实验性的东西,当笑话看就好╮(╯▽╰)╭

六、后记

写完之后去MMTTY的官网MM HAMSOFT上看了一下,发现还有另一款名叫MMVARI的软件,支持BPSK的调制方式且支持高速率传输,在仍然使用文本方式提交数据的情况下,可以更有效率地将数据进行转换,不过已经不愿再折腾了。5月4日更新:BPSK在最高速度250.0Bps下每盘90分钟录音带最高可存储大约100KB的数据。

5月4日的重新试验也让我明白了一个根本道理:想提高数据存储密度,不应该依靠把Binary进行Base64编码这种会将数据量翻倍的做法,而应该将二进制数据进行压缩编码,这就超出了我的知识范围(好窄),也就不用继续做实验了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

 剩余字数 ( Characters available )

Your comment will be available after auditing.
您的评论将在通过审核后显示。

Please DO NOT add any links in your comment, otherwise it would be identified as SPAM automatically and never be audited.
请不要在评论中插入任何链接,否则将被自动归类为垃圾评论,且永远不会被提交给博主进行复审。

*