2023年8月28日月曜日

「くもんのうた200えほん」をカメレオンリーダーのような音声タッチペンで便利にする

こんにちは。

先日、妻が「カメレオンリーダー」というものを紹介してくれました。

今回の成果物の図

カメレオンリーダーとは

カメレオンリーダーと「くもんのうた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()
view raw run.py hosted with ❤ by GitHub


最後に、シールを貼ったら完成です。妻が頑張りました。

細かいところは参考に上げたリンクをご覧ください。

MaiYaPenが欲しかったけど高いのでZ会のエブリスピークで代用してみた – BeeLabo


カメレオンリーダー vs エブリスピーク

一応、カメレオンリーダーと比較しておくと

1. かわいさはカメレオンリーダーの方がいい。

2. SDカードのキャップはネジで閉じられているエブリスピークの方がいい。

3. 音質は気にならない。(youtubeなどの紹介では録音のためか音が割れている気がする)

4. 乾電池(エネループも可)のエブリスピークの方が外出先で比較的楽だと思う。(ちなみに、カメレオンリーダーは充電式だけど、USB type-Cじゃないので使いにくそう)


というわけで、1歳になったばかりの娘とこれで遊びたいと思います。


0 件のコメント:

コメントを投稿