こんにちは。
先日、妻が「カメレオンリーダー」というものを紹介してくれました。
今回の成果物の図 |
カメレオンリーダーとは
カメレオンリーダーと「くもんのうた200えほん」を組み合わせて、音声タッチペンで童謡がいつでも聴けるというのです。
それは便利だ、と思い「いいじゃん、買っちゃえば?」と言ったら
「でも、高い」と。
え、そうなの?と商品サイトを見てみると、シールセット + タッチペンで 18,700円!
確かに高い...。
でも、この仕組みはどこかで見たことあるなーと思い、類似品を検索すると「G-Talk」という製品があるらしいです。くもんやZ会にも同じような仕組みのペンがあるらしいのですが、だいたいこのG-Talkの系列とのこと。しかし、G-TalkもAmazonで12,100円と高い...。
もう少し調べると、Z会のエブリスピークを英語の絵本用に改造した人がいました。
エブリスピークは中古で流通しているようで、メルカリで1400円で買えました。また、シール自体はとても安く、Amazonで1500円(送料込み)で買えます。合計3000円弱で、カメレオンリーダーと同じことができるのです。
MaiYaPenが欲しかったけど高いのでZ会のエブリスピークで代用してみた – BeeLabo
音声タッチペンの作り方
まず、「くもんのうた200えほん」の楽曲データをダウンロードしてきます。Amazonで妻が買ったのですが、妻曰く、「Webで楽曲データを落とすのはバグがあって大変だからAmazon Musicのアプリで落とした方がいい」とのこと。Web版はどうもチェックボックスにバグがあって一括ダウンロードができないらしいです。
ダウンロードしてきたら、次はエブリスピークのmicroSDに楽曲データを入れます。これは所定のフォルダ名とファイル名にしないといけません。200曲全部を処理するのは大変なのでプログラムを組みました。こちらは自由にお使いください。Macを持っていたらPython3が入っているはずなので動かせると思います。ディレクトリはこのように配置すると良いです。
プログラムを動かすとこんな感じで作られます。
1シート目の127番目が「およげ、たいやきくん」になっていたら成功だと思います。
import glob | |
import re | |
import os | |
import math | |
import shutil | |
import sys | |
# 最大ファイルサイズ | |
MAX_FILE_SIZE = 128 | |
SHEET_PREFIX = "D231300" | |
class TargetDirExistException(Exception): | |
pass | |
class InvalidIdException(Exception): | |
pass | |
def atoi(text): | |
return int(text) if text.isdigit() else text | |
def natural_keys(text): | |
return [ atoi(c) for c in re.split(r'(\d+)', text) ] | |
def find_files(): | |
return sorted(glob.glob("./*/*.mp3"), key=natural_keys) | |
def create_dir(dir_path): | |
if not os.path.isdir(dir_path): | |
os.mkdir(dir_path) | |
return dir_path | |
else: | |
raise TargetDirExistException(f"想定外のフォルダが存在します。該当フォルダを移動または削除してください。: {dir_path}") | |
def create_seq_dirs(dir_id, files): | |
dir_count = math.ceil(len(files) / MAX_FILE_SIZE) | |
prefix = dir_id[:1] | |
first_id = int(dir_id[1:]) | |
dir_paths = [] | |
for i in range(dir_count): | |
dir_paths.append(create_dir(f"{prefix}{first_id + i}")) | |
return dir_paths | |
def place_files(files, seq_dirs): | |
dir_index = 0 | |
target_dir = seq_dirs[dir_index] | |
i = 0 | |
for file in files: | |
if i >= MAX_FILE_SIZE: | |
i = 0 | |
dir_index += 1 | |
target_dir = seq_dirs[dir_index] | |
continue | |
shutil.copy2(file, f"{target_dir}/DS{str(i).zfill(3)}.mp3") | |
i += 1 | |
def main(): | |
try: | |
print("楽曲フォルダを作成するプログラムです。いつでも Ctrl + C でプログラムは止められます。") | |
input_string = input(f"{SHEET_PREFIX}より下の桁のシートのIDを入力してください(例: D231300123450 -> 123450): ") | |
if len(input_string) != 6: | |
raise InvalidIdException("シートIDは12桁です。") | |
y_n = input(f"シート: {SHEET_PREFIX + input_string} から楽曲フォルダを作成しますか? (y/N): ") | |
if y_n == "y": | |
files = find_files() | |
seq_dirs = create_seq_dirs(SHEET_PREFIX + input_string, files) | |
place_files(files, seq_dirs) | |
print("作成完了") | |
sys.exit(0) | |
except TargetDirExistException as tdee: | |
print(tdee) | |
sys.exit(1) | |
except InvalidIdException as iie: | |
print(iie) | |
sys.exit(1) | |
if __name__ == "__main__": | |
main() |
最後に、シールを貼ったら完成です。妻が頑張りました。
細かいところは参考に上げたリンクをご覧ください。
MaiYaPenが欲しかったけど高いのでZ会のエブリスピークで代用してみた – BeeLabo
カメレオンリーダー vs エブリスピーク
一応、カメレオンリーダーと比較しておくと
1. かわいさはカメレオンリーダーの方がいい。
2. SDカードのキャップはネジで閉じられているエブリスピークの方がいい。
3. 音質は気にならない。(youtubeなどの紹介では録音のためか音が割れている気がする)
4. 乾電池(エネループも可)のエブリスピークの方が外出先で比較的楽だと思う。(ちなみに、カメレオンリーダーは充電式だけど、USB type-Cじゃないので使いにくそう)
というわけで、1歳になったばかりの娘とこれで遊びたいと思います。