計算問題を解いてダイエット

2桁×2桁の掛け算をただ単に繰り返し暗算してダイエットしようと考えた。
自分の限界はここまでで3桁になると暗算はムリ。
体動かすのもいいが脳をフル回転すればカロリーは消費されるはず。
問題と答えは画面に表示させるのではなく読み上げとしました。
音源は以下のサイトからダウンロードさせて頂きました。
www14.big.or.jp

import os
os.add_dll_directory('C:/Program Files/VideoLAN/VLC')
import vlc

import random

def make_sound(num):
    sound_list = []

    num_str = str(num).zfill(4)

    if not num_str[0]== '0':
        sound_list.append(os.path.join('sound', num_str[0].ljust(4, '0') + '.wav'))
    if not num_str[1]== '0':
        sound_list.append(os.path.join('sound', num_str[1].ljust(3, '0') + '.wav'))
    if not num_str[2]== '0':
        sound_list.append(os.path.join('sound', num_str[2].ljust(2, '0') + '.wav'))
    if not num_str[3]== '0':
        sound_list.append(os.path.join('sound', num_str[3] + '.wav'))

    return sound_list

while True:
    q1 = random.randint(10,99)
    q2 = random.randint(10,99)

    answer = q1 * q2

    q1_list = make_sound(q1)
    q2_list = make_sound(q2)

    sound_list_q = q1_list + [os.path.join('sound', 'kakeru.wav')] + q2_list
    sound_list_a = make_sound(answer)

    player = vlc.MediaListPlayer()
    mediaList = vlc.MediaList(sound_list_q)
    player.set_media_list(mediaList)
    player.play()

    get_key = input()
    if get_key == 'q':
        break

    player = vlc.MediaListPlayer()
    mediaList = vlc.MediaList(sound_list_a)
    player.set_media_list(mediaList)
    player.play()

    get_key = input()
    if get_key == 'q':
        break

注意

「os.add_dll_directory」はPython 3.8以降でないと使えません。

2020年10月15日追記

音声データをまとめてダウンロードするスクリプトを書きました。

import os
import requests

os.mkdir('sound')

for i in range(9):
    url = 'https://www14.big.or.jp/~amiami/happy/download/voice/501_suuji/num00%d_01.wav'%(i+1)
    filename = '%d.wav'%(i+1)
    response = requests.get(url)

    with open(os.path.join('sound', filename), 'wb') as saveFile:
        saveFile.write(response.content)

for i in range(9):
    url = 'https://www14.big.or.jp/~amiami/happy/download/voice/501_suuji/num0%d0_01.wav'%(i+1)
    filename = '%d0.wav'%(i+1)
    response = requests.get(url)

    with open(os.path.join('sound', filename), 'wb') as saveFile:
        saveFile.write(response.content)

for i in range(9):
    url = 'https://www14.big.or.jp/~amiami/happy/download/voice/501_suuji/num%d00_02.wav'%(i+1)
    filename = '%d00.wav'%(i+1)
    response = requests.get(url)

    with open(os.path.join('sound', filename), 'wb') as saveFile:
        saveFile.write(response.content)

for i in range(9):
    url = 'https://www14.big.or.jp/~amiami/happy/download/voice/501_suuji/num%d000_02.wav'%(i+1)
    filename = '%d000.wav'%(i+1)
    response = requests.get(url)

    with open(os.path.join('sound', filename), 'wb') as saveFile:
        saveFile.write(response.content)
    
url = 'https://www14.big.or.jp/~amiami/happy/download/voice/505_sansuu/kakeru_01.wav'
filename = 'kakeru.wav'
response = requests.get(url)

with open(os.path.join('sound', filename), 'wb') as saveFile:
    saveFile.write(response.content)

 
全体をダウンロードするには以下の通り。

import os
import glob
import shutil
import requests
import zipfile

url = 'http://amitaro.sakura.ne.jp/koesozai/amitarovoice_20180523_01.zip'
response = requests.get(url)

saveFilePath = 'sound.zip'
os.mkdir('sound')
with open(saveFilePath, 'wb') as saveFile:
    saveFile.write(response.content)

with zipfile.ZipFile(saveFilePath) as existing_zip:
    existing_zip.extractall('./sound')

os.remove(saveFilePath)

sound_files = glob.glob('./sound/501_suuji/*')

shutil.move('./sound/501_suuji/', '.')
shutil.rmtree('sound')

2022年3月21日追記

「pywin32」を使ったプログラムを書きました。
touch-sp.hatenablog.com