speaknspell_analysis

FLASH源码 2025-08-12

Speak-N-Spell分析和自定义语音包软件

在2019年的Speak&Spell Toys上进行分析和修改(以“经典80年代设计”的“基本娱乐”品牌出售)。

安装 /先决条件

Python环境

要将spana (说话范围分析)软件包安装到虚拟环境中,请运行:

speaknspell_analysis/ python3.13 -m venv .venv source .venv/bin/activate pip install -U pip # install `spana` from this checkout in editable mode pip install -e . ">
 cd speaknspell_analysis /
python3.13 -m venv .venv
source .venv/bin/activate

pip install -U pip

# install `spana` from this checkout in editable mode
pip install -e .

其他(可选)工具

  • em100开源命令行工具
    • 从这里
    • 编译并安装它,以便在PATH上可用em100二进制
    • 请记住将UDEV规则安装到/etc/udev/rules.d/
  • flashrom (用于阅读和重新编程您的SPI Flash)
    • 从这里
    • 编译并安装它,以便在PATH上可用flashrom命令

用法

此存储库中提供了3个主要功能:

  1. 编译新的Speak&Spell 2019兼容“语音包”。
  2. 解码SPI闪光图像
  3. 使用python -m spana.live_trace SPI Flash数据访问的“实时跟踪”

注意:2和3要求您具有提取的Speak&Spell 2019 Flash图像(请参见下文,以了解如何使用SPI Flash读取器进行此操作)。

编译新的语音包。

您将需要223个左右的WAV文件(以10kHz的样本率,当前代码没有重新采样)。您可以自己生成这些(通过记录自己在known_phrases.csv中说单词和短语)或在voice_packs/snoop_dogg目录中使用现有的单词和短语。

编译:

$ python -m spana.compile_voice_pack --wav-dir voice_packs/snoop_dogg/
Encoding 224 files in 14 parallel processes...
Allocating...
Relocating...
Saving to compiled_voice_pack.bin

注意:该脚本在WAV文件名中寻找一个3位数字(带有领先的零),以将文件映射到特定的偏移表索引。在.wav后缀之前(例如angel_042.wav042_angel.wavANG042EL.wav都可以接受)。

用法:

 python -m spana.compile_voice_pack --help
usage: compile_voice_pack [-h] -d WAV_DIR

Build a Speak & Spell flash image from wav files

options:
  -h, --help            show this help message and exit
  -d, --wav-dir WAV_DIR
                        Input search dir for wav files

The directory specified with -d/--wav-dir should contain 223 WAV files (at 10kHz sample rate). Each wav file should have a 3-digit (with leading zeros) number in the filename
(e.g. 042_angel.wav) which indicates which record in the offset table it will be encoded into. See known_phrases.csv for a list of all known Speak&Spell words.

decoder

将2019年Speak&Spell SPI闪光图像中的所有声音斑点解码为WAV文件。

默认情况下在Original_flash_image文件上操作,也可以在命令行上指定(使用--help进行选项)

例子:

$ python -m spana.decode_sounds_to_wav
  wrote decoded_sounds/ss_000_A.wav, enc size:  2944, pcm size: 11178, CR: 3.80
  wrote decoded_sounds/ss_001_B.wav, enc size:  2448, pcm size: 9292, CR: 3.80
  wrote decoded_sounds/ss_002_C.wav, enc size:  2784, pcm size: 10580, CR: 3.80
  wrote decoded_sounds/ss_003_D.wav, enc size:  2192, pcm size: 8188, CR: 3.74
  wrote decoded_sounds/ss_004_E.wav, enc size:  2368, pcm size: 8924, CR: 3.77
  wrote decoded_sounds/ss_005_F.wav, enc size:  2128, pcm size: 8004, CR: 3.76
...

live_trace (需要EM-100 SPI Flash Emulator)

将(可选修改的)SPI Flash图像加载到EM-100 SPI Flash Emulator上

例子:

$ python -m spana.live_trace -M chipmunk_mode

从您自己的Spice&Spell SPI Flash中提取闪光图像(与live_trace一起使用)

由于知识产权的问题,我在这里不发行2019年的Speak&Spell Spi闪光图像。

但是,您可以使用SPI Flash读取器从说话和咒语中提取自己的图像。一个不错的便宜选择是CH341A SPI Flash Reader,它很容易在Amazon,eBay,Aliexpress等上获得。

CH341A与Linux上的尊贵的flashrom命令兼容,而flashrom命令的现代版本支持我在设备内发现的Boyamicro SPI Flash IC(尽管也有可能使用其他SPI Flash芯片制作说话和咒语)。

speaknspell_analysis mkdir -p flash_images sudo flashrom -p ch341a_spi -c 'XM25QH80B' -r flash_images/ORIGINAL_FLASH_IMAGE">
 cd speaknspell_analysis
mkdir -p flash_images
sudo flashrom -p ch341a_spi -c 'XM25QH80B' -r flash_images/ORIGINAL_FLASH_IMAGE

该存储库中的代码取决于原始闪存图像,假设您将其放置在speaknspell_analysis /flash_images/ORIGINAL_FLASH_IMAGE中。

我先前分析的闪光图像的SHA256总和是: 0da032eae0bd5665ad4f3905d9e16f5b7efc75f04907b26e79f96e74380ce511 。如果您的Flash图像具有不同的哈希,也许您已经发现了一个新版本(或检查您的Flash读取器是否有联系中的问题)。

我只想要史努比和拼写

将您的2019年讲与咒语转换为史努比:

  1. deSolder spi flash ic
  2. 插入CH341A Flash读取器
  3. (可选)在“提取闪光图像”中所述进行备份(您永远不会知道)
  4. 运行以下命令(使用Flashrom的最新版本)将Snoop&Spell语音包写入Flash IC:
 flashrom -p ch341a_spi -c 'XM25QH80B' -w snoop_and_spell.bin
  1. 将闪光灯重新定位到位。
  2. 羡慕所有朋友。

相关演示

  • 如DistrictCon年0(2025年2月22日)所示:黑客记忆的故事是反向工程,音频编码的故事,从未成长
    • 演示幻灯片
    • 演示视频
下载源码

通过命令行克隆项目:

git clone https://github.com/jeremytrimble/speaknspell_analysis.git