{"id":2627,"date":"2026-03-22T02:45:00","date_gmt":"2026-03-21T17:45:00","guid":{"rendered":"http:\/\/oreoreki.gotdns.ch\/?p=2627"},"modified":"2026-04-02T16:35:13","modified_gmt":"2026-04-02T07:35:13","slug":"python%e3%81%a7manim%e3%81%a8voicevox%e3%82%92%e6%93%8d%e3%81%a3%e3%81%a6%e3%80%81%e3%81%9a%e3%82%93%e3%81%a0%e3%82%82%e3%82%93%e3%81%ae%e5%b9%b3%e9%9d%a2%e5%b9%be%e4%bd%95%e8%a7%a3%e8%aa%ac%e5%8b%95","status":"publish","type":"post","link":"http:\/\/oreoreki.gotdns.ch\/?p=2627","title":{"rendered":"python\u3067manim\u3068voicevox\u3092\u64cd\u3063\u3066\u3001\u305a\u3093\u3060\u3082\u3093\u306e\u5e73\u9762\u5e7e\u4f55\u89e3\u8aac\u52d5\u753b\u3092\u4f5c\u3063\u3066\u307f\u305f"},"content":{"rendered":"<p><span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/oIVah-WBLN0?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=ja&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span><\/p>\n<div class=\"hcb_wrap\">\n<p><strong>python\u3067manim\u3068voicevox\u3092\u64cd\u3063\u3066\u3001\u305a\u3093\u3060\u3082\u3093\u306e\u5e73\u9762\u5e7e\u4f55\u89e3\u8aac\u52d5\u753b\u3092\u4f5c\u3063\u3066\u307f\u305f\u3002<br \/>\n\u3055\u3089\u306b\u3086\u3063\u304f\u308a\u30e0\u30fc\u30d3\u30fc\u30e1\u30fc\u30ab\u30fc\u306b\u3082\u9023\u643a\u3055\u305b\u307e\u3059\u305f\u3002<br \/>\n\u3086\u3063\u304f\u308a\u30e0\u30fc\u30d3\u30fc\u30e1\u30fc\u30ab\u30fc\u7528\u306e\u7279\u6b8a\u53f0\u672c\u30d5\u30a1\u30a4\u30eb\u3082\u5410\u304d\u51fa\u3057\u307e\u3059\u3002<\/strong><\/p>\n<pre class=\"prism line-numbers lang-ts\" data-lang=\"TypeScript\"><code>import os\r\nimport re\r\nimport shutil\r\nimport __main__\r\nimport sys\r\nimport time\r\n\r\nimport math\r\nfrom manim import *\r\nTex.set_default(tex_template=TexTemplate(\r\n    tex_compiler = \"lualatex\",\r\n    # tex_compiler = \"luatex\" \u3067\u3082\u53ef\r\n    output_format = \".pdf\",\r\n    preamble = r\"\"\"\r\n        \\usepackage{amsmath}\r\n        \\usepackage{amssymb}\r\n        \\usepackage{luatexja}\r\n        \\usepackage[haranoaji]{luatexja-preset}\r\n    \"\"\"\r\n))\r\n\r\nimport numpy as np\r\nimport requests\r\nfrom pathlib import Path\r\nfrom pydub import AudioSegment\r\n\r\n\r\n\r\ndef hhmmss(seconds):\r\n    h = int(seconds \/\/ 3600)\r\n    m = int(seconds % 3600 \/\/ 60)\r\n    s = seconds % 60\r\n    return f\"{h:02}:{m:02}:{s:02.6}\"  # \u7d50\u679c: 2:46:40\r\n\r\ndef voicevox(text, output_path, speaker=2, speedScale=1.2):\r\n    url = \"http:\/\/localhost:50021\/audio_query\"\r\n    params = {\"text\": text, \"speaker\": speaker}\r\n    timeout = 15\r\n    query_synthesis = requests.post(url, params=params, timeout=timeout)\r\n    json = query_synthesis.json()\r\n    json['speedScale'] = speedScale\r\n    json['prePhonemeLength'] = 0.3 #\u524d\u306b0.3\u79d2\u306e\u7121\u97f3\u3092\u8ffd\u52a0\r\n    json['postPhonemeLength'] = 0.3 #\u5f8c\u306b0.3\u79d2\u306e\u7121\u97f3\u3092\u8ffd\u52a0\r\n\r\n    response = requests.post(\r\n                \"http:\/\/localhost:50021\/synthesis\",\r\n                params=params,\r\n                json=json,\r\n            )\r\n    out = Path(output_path)\r\n    out.write_bytes(response.content)\r\n\r\n    return AudioSegment.from_file(output_path, \"wav\")\r\n\r\n\r\ndef get_points(dots, dots_on_line):\r\n    #\u70b9\u306e\u5ea7\u6a19\u3092\u53d6\u5f97\r\n    points = []\r\n    for char in dots_on_line:\r\n        points.append(dots[char])\r\n    return points\r\n\r\ndef get_internal_division_point(dots, dots_on_line,m=1,n=1):\r\n    #2\u70b9\u306e\u5ea7\u6a19\u3092\u53d6\u5f97\r\n    points = get_points(dots,dots_on_line)\r\n    #2\u70b9\u3092m:n\u306b\u5185\u5206\u3059\u308b\u70b9\u3092\u8fd4\u3059\r\n    return (np.array(points[0])*n+np.array(points[1])*m)\/(m+n)\r\n\r\n\r\ndef get_Foot_perpendicular(dots,dots_on_line , dot1):\r\n    #\u70b9dot1\u304b\u30892\u70b9\u3092\u901a\u308b\u76f4\u7dda\u306b\u4e0b\u308d\u3057\u305f\u5782\u7dda\u306e\u8db3\u306e\u6c42\u3081\u308b\r\n    # 2\u70b9\u3068\u306e\u5782\u76f4\u4e8c\u7b49\u5206\u7dda\u306e\u9069\u5f53\u306a\u4e21\u7aef\u3092\u6c42\u3081\u308b\r\n    foot = perpendicular_bisector(get_points(dots, dots_on_line))\r\n    # dots_on_line\u306e\u4e21\u7aef\u3068\u3001dot1\u3068dot1\u3092\u901a\u3063\u3066\u5782\u76f4\u4e8c\u7b49\u5206\u7dda\u65b9\u5411\u306b\u79fb\u52d5\u3057\u305f\u70b9\u306e\u4ea4\u70b9\u3092\u6c42\u3081\u308b\r\n    return line_intersection([dots[dot1], dots[dot1] + (foot[1] - foot[0])], get_points(dots, dots_on_line))\r\n\r\n\r\ndef get_distance(dots, dots_on_line):\r\n    # 2\u70b9\u306e\u5ea7\u6a19\u3092\u53d6\u5f97\r\n    points = get_points(dots, dots_on_line)\r\n    distance = np.linalg.norm(points[1] - points[0])\r\n    return distance\r\n\r\n\r\ndef get_included_angle(dots, dots_on_line):\r\n    # \u89d2\u3092\u631f\u3080Line\u3092\u8fd4\u3059\r\n    points = []\r\n    for char in dots_on_line:\r\n        points.append(dots[char])\r\n    return Line(points[1], points[0]), Line(points[1], points[2])\r\n\r\ndef talk_voiv(self, speaker, text, dis_text=''):\r\n    global i_Voice\r\n    if dis_text == '':\r\n        dis_text=text\r\n    m = re.findall(r'(\\d+)\/(\\d+)', text)  # \u6587\u5b57\u5217\u304b\u3089\u6570\u5b57\u306b\u30de\u30c3\u30c1\u3059\u308b\u3082\u306e\u3092\u30ea\u30b9\u30c8\u3068\u3057\u3066\u53d6\u5f97\r\n    for bunsu in m:\r\n        p1 = bunsu[0] + \"\/\" + bunsu[1]\r\n        p2 = bunsu[1] + \"\u3076\u3093\u306e\" + bunsu[0]\r\n        text = text.replace(p1, p2)\r\n\r\n    m = re.findall(r'(\\d+)([:\uff1a])(\\d+)', text)  # \u6587\u5b57\u5217\u304b\u3089\u6570\u5b57\u306b\u30de\u30c3\u30c1\u3059\u308b\u3082\u306e\u3092\u30ea\u30b9\u30c8\u3068\u3057\u3066\u53d6\u5f97\r\n    for bunsu in m:\r\n        p1 = bunsu[0] + bunsu[1] + bunsu[2]\r\n        p2 = bunsu[0] + \"\u305f\u3044\" + bunsu[2]\r\n        text = text.replace(p1, p2)\r\n\r\n    text = text.replace('\u25b3','\u4e09\u89d2\u5f62')\r\n    text = text.replace('\u2220', '\u304b\u304f')\r\n    text = re.sub('\uff1d|=', '\u30a4\u30b3\u30fc\u30eb',text)\r\n    text = re.sub('3\u30fb4\u30fb5\u306e|345\u306e', '\u3055\u3093\u3088\u3093\u3054\u306e', text)\r\n    text = text.replace('\u2460', '1\u307e\u308b')\r\n    text = text.replace('\u2461', '2\u307e\u308b')\r\n    text = text.replace('\u2462', '3\u307e\u308b')\r\n    text = text.replace('\u2463', '4\u307e\u308b')\r\n    text = text.replace('\u2464', '5\u307e\u308b')\r\n    text = text.replace('\u2465', '6\u307e\u308b')\r\n    text = text.replace('\u2466', '7\u307e\u308b')\r\n    text = text.replace('\u2467', '8\u307e\u308b')\r\n    text = text.replace('\u2468', '9\u307e\u308b')\r\n    text = text.replace('\u2469', '10\u307e\u308b')\r\n    text = text.replace('\u221a', '\u30eb\u30fc\u30c8')\r\n    text = text.replace('\u5e95\u89d2', '\u3066\u3044\u304b\u304f')\r\n    text = text.replace('\u9802\u89d2', '\u3061\u3087\u3046\u304b\u304f')\r\n    text = text.replace('\u5e95\u8fba', '\u3066\u3044\u3078\u3093')\r\n    text = text.replace('\u659c\u8fba', '\u3057\u3083\u3078\u3093')\r\n    text = text.replace('\u56db\u89d2\u5f62', '\u3057\u304b\u3063\u3051\u3044')\r\n    text = text.replace('1\u8fba', '\u3044\u3063\u307a\u3093')\r\n    text = text.replace('\u9ec4\u8272', '\u304d\u3044\u308d')\r\n    text = text.replace('\u60c5\u5f37', '\u3058\u3087\u3046\u304d\u3087\u3046')\r\n    text = text.replace('\u5370\u3092\u3064\u3051', '\u3057\u308b\u3057\u3092\u3064\u3051')\r\n    text = text.replace('\u6368\u3066\u554f', '\u3059\u3066\u3082\u3093')\r\n    text = text.replace('\u52dd\u3063\u305f\u306a', '\u304b\u3063\u305f\u306a')\r\n    text = text.replace('\u8fba', '\u3078\u3093')\r\n    text = text.replace('-', '\u30de\u30a4\u30ca\u30b9')\r\n    text = text.replace('ad', '\u30a8\u30fc\u30c7\u30a3\u30fc')\r\n    text = text.replace('bc', '\u30d3\u30fc\u30b7\u30fc')\r\n\r\n\r\n    chcolor=\"#FFFFFF\"\r\n    if (speaker==1) or (speaker==3):\r\n        chcolor = \"#c0fc8a\"\r\n        speaker_name = \"\u305a\u3093\u3060\u3082\u3093\"\r\n    elif speaker==2:\r\n        chcolor = \"#f78bd2\"\r\n        speaker_name = \"\u56db\u56fd\u3081\u305f\u3093\"\r\n    if f_voice_sub:\r\n        vg_text = Text(dis_text, font=\"Yu Gothic UI\",font_size=50,color=chcolor)\r\n        self.add(vg_text.move_to([0, 5-config.frame_height, 0]))\r\n    sound = voicevox(text, f\"media\\\\videos\\\\voicevox.wav\", speaker, 1.2)\r\n    self.add_sound(f\"media\\\\videos\\\\voicevox.wav\")\r\n    t1=self.time\r\n    self.wait(sound.duration_seconds)\r\n    if f_voice_sub:\r\n        self.remove(vg_text)\r\n    t2 = self.time\r\n    f.write(hhmmss(t1) +','+hhmmss(t2)+'\\n')\r\n    f1.write(speaker_name+',\"'+text+'\",\"'+dis_text+'\",,'+str(int(t1*config.frame_rate))+\",,\\n\")\r\n    print(hhmmss(t1),dis_text)\r\n    f.write(dis_text+'\\n\\n')\r\n\r\n\r\ndef clockpoti(x,r=1):\r\n    #\u70b9\u306e\u540d\u524d\u3068\u304b\u3092\u6642\u8a08\u306e\u4f4d\u7f6e\u306b\u5f93\u3063\u3066\u305a\u3089\u3059\u30d9\u30af\u30c8\u30eb\u3092\u751f\u6210\r\n    s =360+90-360\/12 * x\r\n    return [round(math.cos(math.radians(s))*r,2),round(math.sin(math.radians(s))*r,2),0]\r\n\r\n\r\n# \u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u8a2d\u5b9a\r\nconfig.frame_rate           = 60\r\n#config.background_color     = DARK_GREY\r\nconfig.format               = \"mp4\"\r\nconfig.quality              = \"high_quality\"\r\nconfig.frame_height = 23\r\nconfig.frame_width = 23\r\n#width = int(1080); height = int(1920)       #\u30b9\u30de\u30db\u753b\u50cf\r\nwidth = int(1920); height = int(1080)       #PC\u753b\u50cf\r\nconfig.frame_size = [width, height]\r\nf_voice=True\r\nf_voice_sub=True\r\nsw=2\r\n\r\nclass Hello(MovingCameraScene):\r\n    def construct(self):\r\n\r\n        Text.set_default(font_size=30)\r\n        Polygon.set_default(stroke_color=WHITE)\r\n        MarkupText.set_default(font_size=30)\r\n\r\n        vg_scene0 = VGroup()\r\n\r\n        ax =Axes(x_range=[-3,9,1],y_range=[-1,6,1],x_length=10,y_length=7).set_y(-1)\r\n        self.add(ax)\r\n\r\n\r\n        def other_dots(dots):\r\n            dots[\"A\"] = np.array([max(dots[\"P\"][0], dots[\"Q\"][0]), 0, 0])\r\n            dots[\"B\"] = np.array([max(dots[\"P\"][0], dots[\"Q\"][0]), max(dots[\"P\"][1], dots[\"Q\"][1]), 0])\r\n            dots[\"C\"] = np.array([min(dots[\"P\"][0], dots[\"Q\"][0],0), max(dots[\"P\"][1], dots[\"Q\"][1]), 0])\r\n\r\n            #\r\n\r\n            dots[\"F\"] = np.array([min(dots[\"P\"][0], dots[\"Q\"][0],0), min(dots[\"P\"][1], dots[\"Q\"][1]), 0])\r\n            if  dots[\"Q\"][0]&lt;0:\r\n                dots[\"D\"] = np.array([0, max(dots[\"P\"][1], dots[\"Q\"][1]), 0])\r\n                dots[\"E\"] = np.array([0, min(dots[\"P\"][1], dots[\"Q\"][1]), 0])\r\n                dots[\"G\"] = np.array([min(dots[\"P\"][0], dots[\"Q\"][0],0), 0, 0])\r\n\r\n            else:\r\n                dots[\"D\"] = np.array([min(dots[\"P\"][0], dots[\"Q\"][0]), min(dots[\"P\"][1], dots[\"Q\"][1], 0), 0])\r\n                p = line_intersection( get_points(dots, \"PF\"),  get_points(dots, \"QD\"))\r\n                dots[\"E\"] = np.array([p[0], p[1], p[2]])\r\n            # H\u306fQ\u304b\u3089OP\u306b\u4e0b\u308d\u3057\u305f\u5782\u7dda\u306e\u8db3\r\n            p = get_Foot_perpendicular(dots, \"OP\", \"Q\")\r\n            dots[\"H\"] = np.array([p[0], p[1], p[2]])\r\n            dots[\"R\"] = dots['P'] + dots['Q']\r\n\r\n            # \u753b\u9762\u306e\u4e2d\u5fc3\u306b\u8868\u793a\u3055\u305b\u308b\u305f\u3081\u306b\u3042\u3089\u304b\u3058\u3081\u4e2d\u5fc3\u307e\u3067\u5e73\u884c\u79fb\u52d5\u3055\u305b\u3066\u304a\u304f\u3002c2p\u3068\u540c\u3058\u3053\u3068\u3092\u3084\u3063\u3066\u308b\u3002\r\n            for k in dots.keys():\r\n                # dots[k]=np.dot(rotation_about_z(np.deg2rad(-16)), dots[k]) #-15\u5ea6\u56de\u8ee2\r\n                # dots[k]=(dots[k]-np.array([-2, 9\/2, 0]))*1\r\n                dots[k] = (dots[k] + ax.c2p(0, 0)) * 1\r\n                pass\r\n            return dots\r\n\r\n\r\n        dots = {\r\n            'O': np.array([0, 0, 0]),\r\n            'P': np.array([6,2, 0]),\r\n            'Q': np.array([2,5, 0]),\r\n        }\r\n        dots = other_dots(dots)\r\n\r\n        qtxt1 = Text(\"\u306a\u305c\u25b3OPQ\u306e\u9762\u7a4d\u306f\",font=\"Yu Gothic UI\",  font_size=40, color=WHITE).move_to([-2,5,0])\r\n        qtxt2 = MathTex(r\"\\frac{1}{2}\\times(ad-bc)\",font_size=60).next_to(qtxt1)\r\n        qtxt3 = Text(\"\u306e\u7b26\u53f7\u3092\u5916\u3057\u305f\u5024\u3067\u6c42\u307e\u308b\u306e\u304b\uff1f\",font=\"Yu Gothic UI\", font_size=40, color=WHITE).move_to([0,4,0])\r\n        #self.add(qtxt1,qtxt2)\r\n        vg_scene0.add(qtxt1,qtxt2,qtxt3)\r\n\r\n\r\n        vg_scene0.add(Text('P(a,b)',slant=ITALIC).move_to(dots['P']+clockpoti(3,0.7)))        #   4\r\n        vg_scene0.add(Text('Q(c,d)',slant=ITALIC).move_to(dots['Q']+clockpoti(12,0.5)))        #  5\r\n        vg_scene0.add(Text('O',slant=ITALIC).move_to(dots['O']+clockpoti(8,0.5)))        #   7\r\n        vg_scene0.add(Polygon(*get_points(dots, \"OPQ\"), stroke_color=WHITE))  # 3\r\n        vg_scene0.add(Polygon(*get_points(dots, \"EPQ\"), stroke_width=0,fill_color=RED,fill_opacity=0.3))    #8\r\n        vg_scene0.add(Polygon(*get_points(dots, \"QEO\"), stroke_width=0,fill_color=RED,fill_opacity=0.3))    #9\r\n        vg_scene0.add(Polygon(*get_points(dots, \"PEO\"), stroke_width=0,fill_color=RED,fill_opacity=0.3))    #10\r\n\r\n        self.add(vg_scene0)\r\n        self.wait(0.5)\r\n        #return\r\n        if f_voice:\r\n            talk_voiv(self, 3,'3\u70b9\u3001O(0\u30ab\u30f3\u30de0,\u30d4\u30fc,a\u30ab\u30f3\u30deb,Q,c\u30ab\u30f3\u30ded\u3001\u3092\u9802\u70b9\u3068\u3059\u308b\u4e09\u89d2\u5f62\u306e\u9762\u7a4d\u306f','3\u70b9\u3001O(0,0),P(a,b),Q(c,d)\u3092\u9802\u70b9\u3068\u3059\u308b\u4e09\u89d2\u5f62\u306e\u9762\u7a4d\u306f')\r\n        if f_voice:\r\n            talk_voiv(self, 3,'1\/2\u30ab\u30c3\u30b3\u30a8\u30fc\u30c7\u30a3\u30fc\u30de\u30a4\u30ca\u30b9bc)\u306e\u7b26\u53f7\u3092\u5916\u3057\u305f\u6570\u5024\u3067\u6c42\u307e\u308b\u3068\u3055\u308c\u3066\u3044\u308b\u306e\u3060\u3002','1\/2(ad-bc)\u306e\u7b26\u53f7\u3092\u5916\u3057\u305f\u6570\u5024\u3067\u6c42\u307e\u308b\u3068\u3055\u308c\u3066\u3044\u308b\u306e\u3060\u3002')\r\n        self.wait(0.5)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u3053\u308c\u306f\u516c\u5f0f\u3068\u3055\u308c\u3066\u3044\u308b\u306e\u3060\u304c\u3001\u306a\u305c\u3053\u308c\u3067\u6c42\u307e\u308b\u306e\u3060\u308d\u3046\u304b?')\r\n        self.wait(0.5)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u8a3c\u660e\u3092\u3057\u3066\u307f\u308b\u306e\u3060\u3002')\r\n        self.wait(0.5)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u307e\u305a\u4e09\u89d2\u5f62\u3092\u8986\u3046\u56db\u89d2\u5f62\u3067\u56f2\u3063\u3066\u307f\u308b\u3002')\r\n        vg_scene0.add(Polygon(*get_points(dots, \"OABC\"), stroke_color=WHITE))        #   3\r\n\r\n\r\n        self.wait(0.5)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u6b21\u306b\u3001P\u3001Q\u304b\u3089x\u8ef8y\u8ef8\u306b\u5782\u7dda\u3092\u4e0b\u308d\u3057\u3066\u307f\u308b\u3002')\r\n        vg_scene0.add(Line(dots['P'],dots['F'], stroke_color=WHITE))   #   3\r\n        vg_scene0.add(Line(dots['Q'],dots['D'], stroke_color=WHITE))        #   3\r\n        self.wait(0.5)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u4ea4\u70b9\u306b\u540d\u524d\u3092\u3064\u3051\u308b\u306e\u3060\u3002')\r\n        vg_scene0.add(Text('A',slant=ITALIC).move_to(dots['A']+clockpoti(4,0.5)))        #  7\r\n        vg_scene0.add(Text('B',slant=ITALIC).move_to(dots['B']+clockpoti(3,0.5)))        #  7\r\n        vg_scene0.add(Text('C',slant=ITALIC).move_to(dots['C']+clockpoti(9,0.5)))        #  7\r\n        vg_scene0.add(Text('D',slant=ITALIC).move_to(dots['D']+clockpoti(6,0.3)))        #  7\r\n        vg_scene0.add(Text('E',slant=ITALIC).move_to(dots['E']+clockpoti(2,0.5)))        #  7\r\n        vg_scene0.add(Text('F',slant=ITALIC).move_to(dots['F']+clockpoti(9,0.5)))        #  7\r\n        self.wait(0.5)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u9577\u3055\u3082\u66f8\u3044\u3066\u304a\u304f\u3002')\r\n        vg_scene0.add([DashedLine(*get_points(dots, \"BC\"),path_arc=1.4,dashed_ratio=0.3),\r\n                       MarkupText('<span foreground=\"WHITE\" bgcolor=\"Black\">a<\/span>',background_stroke_color=RED)\r\n                      .move_to(get_internal_division_point(dots, \"BC\") + clockpoti(12, 1.3))]) #31,32\r\n        vg_scene0.add([DashedLine(*get_points(dots, \"OD\"),path_arc=1.4,dashed_ratio=0.3),\r\n                       MarkupText('<span foreground=\"WHITE\" bgcolor=\"Black\">c<\/span>',background_stroke_color=RED)\r\n                      .move_to(get_internal_division_point(dots, \"OD\") + clockpoti(6, 0.7))]) #31,32\r\n        vg_scene0.add([DashedLine(*get_points(dots, \"AB\"),path_arc=1.4,dashed_ratio=0.3),\r\n                       MarkupText('<span foreground=\"WHITE\" bgcolor=\"Black\">d<\/span>',background_stroke_color=RED)\r\n                      .move_to(get_internal_division_point(dots, \"AB\") + clockpoti(3, 1))]) #31,32\r\n        vg_scene0.add([DashedLine(*get_points(dots, \"FO\"),path_arc=1.4,dashed_ratio=0.3),\r\n                       MarkupText('<span foreground=\"WHITE\" bgcolor=\"Black\">b<\/span>',background_stroke_color=RED)\r\n                      .move_to(get_internal_division_point(dots, \"FO\") + clockpoti(9, 0.7))]) #31,32\r\n\r\n        self.wait(1.5)\r\n\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u3055\u3066\u3001\u516c\u5f0f\u306ead\u3068\u306f\u306a\u306b\u304b\u3002')\r\n        self.wait(0.5)\r\n        vg_scene0.add(Polygon(*get_points(dots, \"OABC\"), stroke_width=10,stroke_color=PURE_RED))\r\n        #   3\r\n        if f_voice:\r\n            talk_voiv(self, 3,'ad\u3068\u306f\u3053\u306e\u8d64\u67a0\u306e\u9577\u65b9\u5f62\u306e\u9762\u7a4d\u3092\u8868\u3057\u3066\u308b\u3002')\r\n        self.wait(0.5)\r\n        vg_scene0.add(Polygon(*get_points(dots, \"ODEF\"), stroke_width=10,stroke_color=PURE_BLUE))\r\n        if f_voice:\r\n            talk_voiv(self, 3,'bc\u3068\u306f\u3053\u306e\u9752\u67a0\u306e\u9577\u65b9\u5f62\u306e\u9762\u7a4d\u3092\u8868\u3057\u3066\u308b\u3002')\r\n        self.wait(0.5)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u516c\u5f0f\u306f\u3053\u306e\u8d64\u67a0\u304b\u3089\u9752\u67a0\u306e\u90e8\u5206\u3092\u5f15\u3044\u3066\u3044\u308b\u306e\u3067\u3001')\r\n        vg_scene0.remove(vg_scene0[28])\r\n        vg_scene0.remove(vg_scene0[27])\r\n        vg_scene0.add(Polygon(*get_points(dots, \"FEDABC\"), stroke_width=10,stroke_color=PURE_RED))\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u3053\u306e\u8d64\u67a0\u3067\u56f2\u3063\u305f\u9762\u7a4d\u306e\u534a\u5206\u304c\u6c42\u3081\u308b\u4e09\u89d2\u5f62\u306e\u9762\u7a4d\u3067\u3042\u308b\u3068\u4e3b\u5f35\u3057\u3066\u3044\u308b\u306e\u3060\u3002')\r\n        self.wait(1.5)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u3053\u306e\u8d64\u67a0\u304b\u3089\u306f\u307f\u51fa\u3057\u305f\u90e8\u5206\u3060\u304c')\r\n        vg_scene0[8] = Polygon(*get_points(dots, \"QOE\"),fill_color=RED,fill_opacity=0.3)\r\n        vg_scene0[9] = Polygon(*get_points(dots, \"POE\"), fill_color=RED, fill_opacity=0.3)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'OE\u306b\u7dda\u3092\u5f15\u3044\u3066')\r\n        self.wait(1)\r\n        vg_scene0[8] = Polygon(*get_points(dots, \"QOE\"),fill_color=RED,fill_opacity=0.3,stroke_color=PURE_BLUE)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u3053\u306e\u4e09\u89d2\u5f62\u306f\u3001\u3053\u3093\u306a\u3075\u3046\u306b\u79fb\u52d5\u3057\u3066\u3082\u9762\u7a4d\u306f\u5909\u308f\u3089\u306a\u3044\u3002')\r\n        self.play(Transform(vg_scene0[8],Polygon(*get_points(dots, \"QFE\"), stroke_color=WHITE,fill_color=RED,fill_opacity=0.3)), run_time=3)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u3053\u3061\u3089\u306e\u4e09\u89d2\u5f62\u3082\u9802\u70b9\u3092\u79fb\u52d5\u3057\u3066\u307f\u308b\u3002')\r\n        self.play(Transform(vg_scene0[9],Polygon(*get_points(dots, \"PDE\"), stroke_color=WHITE,fill_color=RED,fill_opacity=0.3)), run_time=3)\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u8d64\u67a0\u5185\u306e3\u3064\u306e\u9577\u65b9\u5f62\u306e\u534a\u5206\u306b\u8272\u304c\u4ed8\u3044\u3066\u3044\u3066\u3001\u305d\u308c\u306f\u6c42\u3081\u308b\u4e09\u89d2\u5f62\u306e\u9762\u7a4d\u306b\u7b49\u3057\u3044\u3002')\r\n        if f_voice:\r\n            talk_voiv(self, 3,'\u3053\u308c\u3067\u3042\u306e\u516c\u5f0f\u3067\u3061\u3083\u3093\u3068\u4e09\u89d2\u5f62\u306e\u9762\u7a4d\u304c\u6c42\u3081\u3089\u308c\u308b\u3053\u3068\u304c\u8a3c\u660e\u3055\u308c\u305f\u306e\u3060\u3002')\r\n\r\n\r\n        self.wait(2)\r\n\r\n        if f_voice:\r\n            talk_voiv(self, 3, '\u3057\u304b\u3057\u8a3c\u660e\u3055\u308c\u305f\u306e\u306f\u3001P\u3068Q\u304c\u7b2c\u4e00\u8c61\u9650\u306b\u3042\u3063\u305f\u5834\u5408\u3002')\r\n        if f_voice:\r\n            talk_voiv(self, 3, 'Q\u304c\u7b2c\uff12\u8c61\u9650\u306b\u3042\u3063\u305f\u5834\u5408\u3069\u3046\u306a\u308b\u3093\u3060\u308d\u3046\u3001\u3068\u3044\u3046\u3053\u3068\u3067\u3084\u3063\u3066\u307f\u308b\u3002')\r\n\r\n        dots = {\r\n            'O': np.array([0, 0, 0]),\r\n            'P': np.array([6,2, 0]),\r\n            'Q': np.array([-2,5, 0]),\r\n        }\r\n        dots = other_dots(dots)\r\n        print(dots)\r\n        for i in range(3,len(vg_scene0)):\r\n            vg_scene0.remove(vg_scene0[3])\r\n            pass\r\n\r\n        #print([str(i) + \": \" + str(x) for i, x in enumerate(vg_scene0.submobjects)]);self.wait(0.5);return\r\n        vg_scene0.add(Text('P(a,b)', slant=ITALIC).move_to(dots['P'] + clockpoti(3, 0.7)))  # 4\r\n        vg_scene0.add(Text('Q(-c,d)', slant=ITALIC).move_to(dots['Q'] + clockpoti(12, 0.5)))  # 5\r\n        vg_scene0.add(Text('O', slant=ITALIC).move_to(dots['O'] + clockpoti(8, 0.5)))  # 7\r\n        vg_scene0.add(Polygon(*get_points(dots, \"OPQ\"), stroke_color=WHITE))  # 3\r\n        vg_scene0.add(Polygon(*get_points(dots, \"OPE\"), stroke_width=0, fill_color=RED, fill_opacity=0.3))  # 8\r\n        vg_scene0.add(Polygon(*get_points(dots, \"PCE\"), stroke_width=0, fill_color=RED, fill_opacity=0.3))  # 9\r\n        vg_scene0.add(Polygon(*get_points(dots, \"OCE\"), stroke_width=0, fill_color=RED, fill_opacity=0.3))  # 10\r\n        self.add(vg_scene0)\r\n        if f_voice:\r\n            talk_voiv(self, 3, '\u56f3\u306b\u63cf\u304f\u3068\u3001\u3053\u3046\u3044\u3046\u30d1\u30bf\u30fc\u30f3\u3002')\r\n        self.wait(2)\r\n        if f_voice:\r\n            talk_voiv(self, 3, '\u3053\u3061\u3089\u3082\u540c\u3058\u3088\u3046\u306b\u56db\u89d2\u5f62\u3067\u56f2\u3093\u3067\u307f\u308b\u3068\u3001\u3053\u3046\u306a\u308b\u3002')\r\n\r\n        vg_scene0.add(Polygon(*get_points(dots, \"GABC\"), stroke_color=WHITE))  # 3\r\n        vg_scene0.add(Line(dots['P'], dots['F'], stroke_color=WHITE))  # 3\r\n        vg_scene0.add(Line(dots['Q'], dots['D'], stroke_color=WHITE))  # 3\r\n\r\n        vg_scene0.add(Text('A', slant=ITALIC).move_to(dots['A'] + clockpoti(4, 0.5)))  # 7\r\n        vg_scene0.add(Text('B', slant=ITALIC).move_to(dots['B'] + clockpoti(3, 0.5)))  # 7\r\n        vg_scene0.add(Text('C', slant=ITALIC).move_to(dots['C'] + clockpoti(9, 0.5)))  # 7\r\n        vg_scene0.add(Text('D', slant=ITALIC).move_to(dots['D'] + clockpoti(12, 0.3)))  # 7\r\n        vg_scene0.add(Text('E', slant=ITALIC).move_to(dots['E'] + clockpoti(2, 0.5)))  # 7\r\n        vg_scene0.add(Text('F', slant=ITALIC).move_to(dots['F'] + clockpoti(9, 0.5)))  # 7\r\n        vg_scene0.add([DashedLine(*get_points(dots, \"BD\"), path_arc=1.4, dashed_ratio=0.3),\r\n                       MarkupText('<span foreground=\"WHITE\" bgcolor=\"Black\">a<\/span>', background_stroke_color=RED)\r\n                      .move_to(get_internal_division_point(dots, \"BD\") + clockpoti(12, 1.3))])  # 31,32\r\n        vg_scene0.add([DashedLine(*get_points(dots, \"GO\"), path_arc=1.4, dashed_ratio=0.3),\r\n                       MarkupText('<span foreground=\"WHITE\" bgcolor=\"Black\">c<\/span>', background_stroke_color=RED)\r\n                      .move_to(get_internal_division_point(dots, \"GO\") + clockpoti(6, 0.7))])  # 31,32\r\n        vg_scene0.add([DashedLine(*get_points(dots, \"AB\"), path_arc=1.4, dashed_ratio=0.3),\r\n                       MarkupText('<span foreground=\"WHITE\" bgcolor=\"Black\">d<\/span>', background_stroke_color=RED)\r\n                      .move_to(get_internal_division_point(dots, \"AB\") + clockpoti(3, 1))])  # 31,32\r\n        vg_scene0.add([DashedLine(*get_points(dots, \"FG\"), path_arc=1.4, dashed_ratio=0.3),\r\n                       MarkupText('<span foreground=\"WHITE\" bgcolor=\"Black\">b<\/span>', background_stroke_color=RED)\r\n                      .move_to(get_internal_division_point(dots, \"FG\") + clockpoti(9, 0.7))])  # 31,32\r\n        self.wait(0.5)\r\n        vg_scene0.add(Polygon(*get_points(dots, \"OABD\"), stroke_width=10, stroke_color=PURE_RED))\r\n        if f_voice:\r\n            talk_voiv(self, 3, 'ad\u3068\u3044\u3046\u306e\u304c\u3053\u306e\u9577\u65b9\u5f62\u306e\u9762\u7a4d\u3002')\r\n        self.wait(0.5)\r\n        if f_voice:\r\n            talk_voiv(self, 3, 'bc\u306f\u3053\u306e\u9577\u65b9\u5f62\u306e\u9762\u7a4d\u3002')\r\n        self.wait(0.5)\r\n        vg_scene0.add(Polygon(*get_points(dots, \"GFEO\"), stroke_width=10,stroke_color=PURE_BLUE))\r\n        if f_voice:\r\n            talk_voiv(self, 3, '\u8d64\u3044\u9577\u65b9\u5f62\u304c\u4e00\u756a\u5916\u5074\u306e\u9577\u65b9\u5f62\u3092\u8868\u3057\u3066\u308b\u306e\u3067\u306f\u306a\u3044\u304c\u3001')\r\n        if f_voice:\r\n            talk_voiv(self, 3, 'Q\u304cx\u6210\u5206\u304c\u30de\u30a4\u30ca\u30b9c\u306b\u306a\u3063\u3066\u308b\u304b\u3089','Q\u304cx\u6210\u5206\u304c-c\u306b\u306a\u3063\u3066\u308b\u304b\u3089')\r\n        if f_voice:\r\n            talk_voiv(self, 3, 'ad-bc\u3063\u3066\u3001\u3053\u306e\u9577\u65b9\u5f62\u306e\u8db3\u3057\u7b97\u306b\u306a\u3063\u3066')\r\n        vg_scene0.remove(vg_scene0[28])\r\n        vg_scene0[27]=Polygon(*get_points(dots, \"GABDEF\"), stroke_width=10, stroke_color=PURE_RED)\r\n        print([str(i) + \": \" + str(x) for i, x in enumerate(vg_scene0.submobjects)]);\r\n        self.wait(0.5);\r\n        if f_voice:\r\n            talk_voiv(self, 3, '\u3055\u3063\u304d\u3068\u540c\u3058\u9375\u578b\u306e\u56f3\u5f62\u306e\u9762\u7a4d\u3092\u8868\u3059\u3053\u3068\u306b\u306a\u308a\u3001')\r\n        self.play(Transform(vg_scene0[8], Polygon(*get_points(dots, \"PDE\"), stroke_color=WHITE, fill_color=RED, fill_opacity=0.3)), run_time=1)\r\n        self.play(Transform(vg_scene0[9], Polygon(*get_points(dots, \"OFE\"), stroke_color=WHITE, fill_color=RED, fill_opacity=0.3)), run_time=1)\r\n        if f_voice:\r\n            talk_voiv(self, 3, '\u3053\u306e\u3088\u3046\u306b\u7b49\u7a4d\u5909\u5f62\u304c\u3067\u304d\u308b\u306e\u3060\u3002')\r\n        self.wait(1);\r\n        if f_voice:\r\n            talk_voiv(self, 3, '\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u3042\u306e\u516c\u5f0f\u306fPQ\u304c\u3069\u3053\u306b\u3042\u3063\u3066\u3082\u4f7f\u3048\u3066\u3001\u88cf\u6280\u3067\u3082\u306a\u3093\u3067\u3082\u306a\u3044\u3002')\r\n        self.wait(1);\r\n        if f_voice:\r\n            talk_voiv(self, 3, '\u8a18\u8ff0\u5f0f\u30c6\u30b9\u30c8\u3067\u3082\u3001\u3053\u306e\u7d75\u3092\u66f8\u3044\u3066\u3001ad-bc\u306f\u3053\u306e\u8d64\u67a0\u306e\u9762\u7a4d\u3067\u3042\u308a\u3001\\n\u6c42\u3081\u308b\u4e09\u89d2\u5f62\u306e2\u500d\u306e\u9762\u7a4d\u3067\u3042\u308b\u3068\u66f8\u3044\u3066\u304a\u3051\u3070\u3001\u6587\u53e5\u3092\u8a00\u308f\u308c\u308b\u3053\u3068\u306f\u306a\u3044\u3002')\r\n        self.wait(1);\r\n        if f_voice:\r\n            talk_voiv(self, 3, '\u3068\u3044\u3046\u3053\u3068\u3067\u3001QED\u306a\u306e\u3060\u3002')\r\n        print([str(i) + \": \" + str(x) for i, x in enumerate(vg_scene0.submobjects)]);self.wait(0.5);return\r\n\r\n\r\n\r\n#\u30b9\u30af\u30ea\u30d7\u30c8\u914d\u4e0b\u306emedia\\nvideos\\n\u4ee5\u4e0b\u3092\u6d88\u3059\r\ntarget_dir = r\"media\\videos\"\r\nprint(target_dir)\r\nif os.path.isdir(target_dir):\r\n    shutil.rmtree(target_dir)\r\n    os.mkdir(target_dir)\r\n\r\n#pycharm\u3067\u5b9f\u884c\u3055\u305b\u308b\u3068\u304d\u306f\u3053\u308c\u304c\u306a\u3044\u3068\u30d5\u30a1\u30a4\u30eb\u304c\u4f5c\u3089\u308c\u306a\u3044\r\nf = open('media\\\\videos\\\\serifu.txt', 'w')\r\nf1 = open('media\\\\videos\\\\daihon.csv', 'w')\r\nscene = Hello()\r\nscene.render()\r\nf.close()\r\nf1.close()\r\n\r\n<\/code><\/pre>\n<p><strong>\u7279\u6b8a\u53f0\u672c\u30d5\u30a1\u30a4\u30eb\u3067YMM4\u5b9a\u7fa9\u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u63db\u3048\u308bhtml\u30d5\u30a1\u30a4\u30eb<br \/>\nYMM4\u306eversion\u304c\u4e0a\u304c\u3063\u305f\u5834\u5408\u3001\u66f8\u304d\u63db\u3048\u3067\u304d\u306a\u304f\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u306e\u3067\u3001<span style='color: red; font-weight: bold;'>\u305d\u306e\u3068\u304d\u306f\u3054\u81ea\u5206\u3067\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/span><br \/>\n\u4e2d\u306e\u4eba\u306f\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u305d\u308c\u307b\u3069\u591a\u7528\u3057\u306a\u3044\u306e\u3067\u3001\u307b\u3068\u3093\u3069\u30e1\u30f3\u30c6\u3057\u306a\u3044\u3002<\/strong><br \/>\nCSV\u5185\u306e\u30bb\u30ea\u30d5\u306b\u306f\u6539\u884c\u5165\u308c\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"prism line-numbers lang-ts\" data-lang=\"TypeScript\"><code>\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;title&gt;Ymm4DaihonPlus&lt;\/title&gt;\r\n\r\n&lt;style&gt;\r\n\ttextarea {\r\n\twidth: 100%;\r\n\theight: 100px;\r\n\tmargin-top: 10px;\r\n\t}\r\n&lt;\/style&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n\t&lt;H2&gt;Ymm4DaihonPlus&lt;\/H2&gt;\r\n\t&lt;H2&gt;&lt;marquee width=\"50%\"  bgcolor=\"#ffff99\"&gt;\u3086\u3063\u304f\u308a\u30e0\u30fc\u30d3\u30fc\u30e1\u30fc\u30ab\u30fc4\u306e\u53f0\u672c\u6a5f\u80fd\u3067\u8aad\u307f\u8fbc\u307e\u308c\u305f\u30bb\u30ea\u30d5\u306e\u8a2d\u5b9a\u3092\u5909\u3048\u308b\u305c\u3002\u53f0\u672cCSV\u3092\u30a8\u30af\u30bb\u30eb\u3067\u958b\u3044\u3066\u308b\u5834\u5408\u306f\u30a8\u30af\u30bb\u30eb\u3092\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002&lt;\/marquee&gt;&lt;\/H2&gt;\r\n\tymmp\u30d5\u30a1\u30a4\u30eb&lt;input type=\"file\" id=\"select-file1\" onchange=\"selectFile()\" accept=\".ymmp\" \/&gt;&lt;br&gt;\r\n\t csv\u30d5\u30a1\u30a4\u30eb&lt;input type=\"file\" id=\"select-file2\" onchange=\"selectFile()\" accept=\".csv\" disabled \/&gt;&lt;br&gt;\r\n\t&lt;textarea id=\"output1\"&gt;&lt;\/textarea&gt;\r\n\t&lt;textarea id=\"output2\"&gt;&lt;\/textarea&gt;\r\n\t&lt;textarea id=\"output3\"&gt;&lt;\/textarea&gt;\r\n\t&lt;div id=\"DL_area\"&gt;&lt;\/div&gt;\r\n\r\n&lt;script&gt;\r\n\r\nvar ymmp = 'a'\r\nvar csv  = 'b'\r\ndocument.getElementById('select-file1').addEventListener('change', ymmpSelect);\r\nfunction ymmpSelect(){\r\n\r\n\t\/\/ \u30a4\u30d9\u30f3\u30c8\u304c\u767a\u751f\u3057\u305f\u6642\u306e\u51e6\u7406\r\n\r\n\tselectFiles = document.querySelector(\"#select-file1\").files\r\n\t\/\/ File\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u53d6\u5f97\r\n\tfile = selectFiles[0]\r\n\t\/\/ FileReader\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u53d6\u5f97\r\n\treader = new FileReader()\r\n\treader.readAsText(file)\r\n\t\/\/ \u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u5b8c\u4e86\u6642\u306e\u51e6\u7406\r\n\treader.onload = () =&gt; {\r\n\t\tconsole.log(\"ymmp\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u6210\u529f\")\r\n\t\tdocument.querySelector(\"#output1\").innerHTML = reader.result\r\n\r\n\t}\r\n\tdocument.querySelector(\"#select-file2\").disabled=false\r\n}\r\n\r\ndocument.getElementById('select-file2').addEventListener('change', csvSelect);\r\nfunction csvSelect(){\r\n\t\/\/ \u30a4\u30d9\u30f3\u30c8\u304c\u767a\u751f\u3057\u305f\u6642\u306e\u51e6\u7406\r\n\r\n\t\/\/ \u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u30a8\u30e9\u30fc\u6642\u306e\u51e6\u7406\r\n\treader.onerror = () =&gt; {\r\n\t  console.log(\"ymmp\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u30a8\u30e9\u30fc\")\r\n\t}\r\n\r\n\t\/\/ FileList\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u53d6\u5f97\r\n\tselectFiles = document.querySelector(\"#select-file2\").files\r\n\t\/\/ File\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u53d6\u5f97\r\n\tfile = selectFiles[0]\r\n\t\/\/ FileReader\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u53d6\u5f97\r\n\treader = new FileReader()\r\n\treader.readAsText(file,'Shift_JIS')\r\n\t\/\/ \u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u5b8c\u4e86\u6642\u306e\u51e6\u7406\r\n\treader.onload = () =&gt; {\r\n\r\n\t\tcsv = reader.result\r\n\t\t\/\/document.querySelector(\"#output\").innerHTML = csv\r\n\t\tconsole.log(\"csv\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u6210\u529f\")\r\n\t\tconsole.log(\"csv\u30d5\u30a1\u30a4\u30eb\u51fa\u529b\")\r\n\t\tdocument.querySelector(\"#output2\").innerHTML = reader.result\r\n\t\tmain()\r\n\t}\r\n\t\/\/ \u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u30a8\u30e9\u30fc\u6642\u306e\u51e6\u7406\r\n\treader.onerror = () =&gt; {\r\n\t  console.log(\"csv\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u30a8\u30e9\u30fc\")\r\n\t}\r\n\r\n}\r\nfunction download_txt(file_name, data) {\r\n \r\n    const blob = new Blob([data], {type: 'text\/plain'});\r\n    const url = URL.createObjectURL(blob);\r\n    const a = document.createElement(\"a\");\r\n    document.body.appendChild(a);\r\n    a.download = file_name;\r\n    a.href = url;\r\n    a.click();\r\n    a.remove();\r\n    URL.revokeObjectURL(url);\r\n \r\n}\r\n\r\nfunction main(){\r\n\tvar ymm4data = eval(\"(\" + document.getElementById('output1').value + \")\")\r\n\tpos_Serif=0\r\n\tconsole.log(\"Timelines:\" + ymm4data['Timelines'][0]['Items'].length)\r\n\tfor (let i = 0; i &lt; ymm4data['Timelines'][0]['Items'].length; i++) {\r\n\t\tconsole.log(\"Timelines:\" + ymm4data['Timelines'][0]['Items'][i]['$type'].indexOf('VoiceItem'))\r\n\t\tconsole.log(\"Layer:\" + ymm4data['Timelines'][0]['Items'][i]['Layer'])\r\n\t\tif ((ymm4data['Timelines'][0]['Items'][i]['$type'].indexOf('VoiceItem') &gt;0) &amp;&amp; (ymm4data['Timelines'][0]['Items'][i]['Layer'] == 0)){\r\n\t\t\tpos_Serif=i\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tconsole.log(\"pos_Serif:\" + pos_Serif)\r\n\r\n\r\n\r\n\r\n\r\n\ti = 0\r\n\tskip_Frame = 0\r\n\tskip_Frame_plus = 0\r\n\tconst csv = document.getElementById('output2').value\r\n\tconst csv_line = csv.split(\/\\n\/)\r\n\r\n\r\n\tcsv_line.forEach((line, j) =&gt; {\r\n\t\t\/\/ j:CSV\u306e\u884c\u6570 line:j\u884c\u76ee\u306e\u5185\u5bb9\r\n\t\t\/\/console.log(j, line)\r\n\r\n\r\n\t\tif ( line.search(\/^#\/) &gt; -1) {\r\n\t\t\t\/\/\u30b3\u30e1\u30f3\u30c8\u884c\r\n\t\t} else {\r\n\r\n\t\t\tvar arr_csv = this.csvSplit(line)\r\n\t\t\t\r\n\t\t\t\/*\r\n\t\t\tfor (var j = 0; j &lt; arr_csv.length; j++) {\r\n\t\t\t\tconsole.log(j+\": \"+arr_csv[j])\r\n\t\t\t\r\n\t\t\t}\r\n\t\t\t\/\/arr_csv=line.split(',')\r\n\t\t\t*\/\r\n\r\n\t\t\tif (arr_csv.length &gt;= 4) {\r\n\t\t\t\tif (arr_csv[1] !== ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Serif\"]) {\r\n\t\t\t\t\tconsole.log(i,\"CSV\u3068ymmp\u306e\u30bb\u30ea\u30d5\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u9806\u756a\u304c\u4e00\u81f4\u3057\u306a\u3044\")\r\n\t\t\t\t\tconsole.log(i,\"CSV\",arr_csv[1] )\r\n\t\t\t\t\tconsole.log(i,\"ymmp\",ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Serif\"])\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\t\t\t\t\/\/ymmp\u306e\u5909\u66f4\r\n\t\t\t\t\/\/\u30bb\u30ea\u30d5\u8868\u793a\u306e\u5909\u66f4\r\n\t\t\t\tcsv_pos=3\t\/\/csv_pos\u306f1\u59cb\u307e\u308a\r\n\t\t\t\t\/\/console.log(\"\u30bb\u30ea\u30d5\u8868\u793a:\",i,arr_csv[1],ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Serif\"])\r\n\t\t\t\tif ((arr_csv.length &gt;= csv_pos-1) &amp;&amp; (arr_csv[csv_pos - 1] != '')) {\r\n\t\t\t\t\t\/\/\u30bb\u30ea\u30d5\u8868\u793a\u306e\u6307\u5b9a\u304c\u3042\u308b\r\n\t\t\t\t\tconsole.log(\"\u30bb\u30ea\u30d5\u8868\u793a:\",i,arr_csv[1],ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Serif\"],\"\u2192\",arr_csv[csv_pos - 1].replace(\/&lt;comma&gt;\/g,\",\"))\r\n\t\t\t\t\tymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Serif\"] = arr_csv[csv_pos - 1].replace(\/&lt;comma&gt;\/g,\",\")\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\/\/\u30ec\u30a4\u30e4\u30fc\r\n\t\t\t\tcsv_pos=4\t\/\/csv_pos\u306f1\u59cb\u307e\u308a\r\n\t\t\t\tif ((arr_csv.length &gt;= csv_pos-1) &amp;&amp; (arr_csv[csv_pos - 1] != '')) {\r\n\t\t\t\t\t\/\/\u30ec\u30a4\u30e4\u30fc\u306e\u6307\u5b9a\u304c\u3042\u308b\r\n\t\t\t\t\tif (isNaN(arr_csv[csv_pos - 1])) {\r\n\t\t\t\t\t\tconsole.log(i,\"\u30ec\u30a4\u30e4\u30fc\u306e\u6307\u5b9a\u304c\u304a\u304b\u3057\u3044:\",line)\r\n\t\t\t\t\t\treturn\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconsole.log(\"\u30ec\u30a4\u30e4\u30fc\u5909\u66f4:\",i,arr_csv[1],ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Layer\"],\"\u2192\",parseInt(arr_csv[csv_pos - 1]))\r\n\t\t\t\t\tymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Layer\"] = parseInt(arr_csv[csv_pos - 1])\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\/\/Frame\r\n\t\t\t\tcsv_pos=5\t\/\/csv_pos\u306f1\u59cb\u307e\u308a\r\n\t\t\t\tif ((arr_csv.length &gt;= csv_pos-1) &amp;&amp; (arr_csv[csv_pos - 1] != '')) {\r\n\t\t\t\t\t\/\/Frame\u306e\u6307\u5b9a\u304c\u3042\u308b\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (isNaN(arr_csv[csv_pos - 1])) {\r\n\t\t\t\t\t\tconsole.log(i,\"Frame\u306e\u6307\u5b9a\u304c\u6570\u5024\u3067\u306f\u306a\u3044:\",line)\r\n\t\t\t\t\t\tconsole.log(csv_pos)\r\n\t\t\t\t\t\tconsole.log(arr_csv[0])\r\n\r\n\r\n\t\t\t\t\t\treturn\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tcur_Frame = ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Frame\"]\r\n\t\t\t\t\tobj_len = ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Length\"]\r\n\t\t\t\t\tnew_Frame = parseInt(arr_csv[csv_pos - 1])\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (arr_csv[csv_pos - 1].substr( 0, 1 )==\"+\") {\r\n\t\t\t\t\t\t\/\/console.log(\"\u90e8\u5206Frame\u5909\u66f4:\",arr_csv[csv_pos - 1])\r\n\t\t\t\t\t\tskip_Frame_plus = skip_Frame_plus + parseInt(arr_csv[csv_pos - 1]) \r\n\t\t\t\t\t\tnew_Frame = skip_Frame_plus + cur_Frame \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (cur_Frame&lt;new_Frame) {\r\n\t\t\t\t\t\t\/\/\u5f8c\u308d\u306b\u305a\u3089\u3059\r\n\t\t\t\t\t\t\/\/skip_Frame = skip_Frame + ( new_Frame- cur_Frame)\r\n\t\t\t\t\t\tskip_Frame =  ( new_Frame- cur_Frame) + skip_Frame_plus\r\n\t\t\t\t\t\tconsole.log(\"Frame\u5909\u66f4:\",i,cur_Frame,\"\u2192\",new_Frame)\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\/\/ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"VoiceParameter\"][\"Speed\"]  = parseInt(arr_csv[csv_pos - 1])\r\n\t\t\t\t}\r\n\t\t\t\tif (skip_Frame &gt; 0) {\r\n\t\t\t\t\tymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Frame\"] = ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Frame\"] + skip_Frame\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\/\/\u518d\u751f\u901f\u5ea6\r\n\t\t\t\tcsv_pos=6\t\/\/csv_pos\u306f1\u59cb\u307e\u308a\r\n\t\t\t\tif ((arr_csv.length &gt;= csv_pos-1) &amp;&amp; (arr_csv[csv_pos - 1] != '')) {\r\n\t\t\t\t\t\/\/\u518d\u751f\u901f\u5ea6\u306e\u6307\u5b9a\u304c\u3042\u308b\r\n\t\t\t\t\tif (isNaN(arr_csv[csv_pos - 1])) {\r\n\t\t\t\t\t\tconsole.log(i,\"\u518d\u751f\u901f\u5ea6\u306e\u6307\u5b9a\u304c\u304a\u304b\u3057\u3044:\",line)\r\n\t\t\t\t\t\treturn\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconsole.log(\"\u518d\u751f\u901f\u5ea6\u5909\u66f4:\",i,arr_csv[1],ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"VoiceParameter\"][\"Speed\"],\"\u2192\",parseInt(arr_csv[csv_pos - 1]))\r\n\t\t\t\t\tymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"VoiceParameter\"][\"Speed\"]  = parseInt(arr_csv[csv_pos - 1])\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\/\/\u52d5\u304f\u7acb\u3061\u7d75\u306e\u8868\u60c5\r\n\t\t\t\tcsv_pos=7\t\/\/csv_pos\u306f1\u59cb\u307e\u308a\r\n\t\t\t\tif ((arr_csv.length &gt;= csv_pos-1) &amp;&amp; (arr_csv[csv_pos - 1] != '')) {\r\n\t\t\t\t\tarr_effect0 = arr_csv[csv_pos - 1].split(\"\/\")\r\n\t\t\t\t\tfor (let k = 0; k &lt; arr_effect0.length; ++k) {\r\n\t\t\t\t\t\tarr_effect1 = arr_effect0[k].split(':')\r\n\t\t\t\t\t\tif (arr_effect1.length == 2) {\r\n\t\t\t\t\t\t\t\/\/\u8a2d\u5b9a\u304c\u6b63\u3057\u3044\r\n\t\t\t\t\t\t\tif (ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"TachieFaceParameter\"][arr_effect1[0]]) {\r\n\r\n\t\t\t\t\t\t\t\t\/\/TachieFaceParameter\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u53d6\u3063\u3066\u304f\u308b\r\n\t\t\t\t\t\t\t\tx_TachieFaceParameter = ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"TachieFaceParameter\"][arr_effect1[0]]\r\n\t\t\t\t\t\t\t\tarr_TachieFaceParameter = x_TachieFaceParameter.split('\\\\')\r\n\t\t\t\t\t\t\t\tcur_TachieFaceParameter = arr_TachieFaceParameter[arr_TachieFaceParameter.length - 1]\r\n\t\t\t\t\t\t\t\tnew_TachieFaceParameter =  ( '00' + arr_effect1[1]).slice( -2 )+\".png\"\r\n\t\t\t\t\t\t\t\tymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"TachieFaceParameter\"][arr_effect1[0]] = x_TachieFaceParameter.replace(cur_TachieFaceParameter,new_TachieFaceParameter)\r\n\t\t\t\t\t\t\t\tconsole.log(\"\u52d5\u304f\u7acb\u3061\u7d75\u306e\u8868\u60c5\u5909\u66f4:\",i,arr_effect1[0],arr_csv[1],cur_TachieFaceParameter,\"\u2192\",new_TachieFaceParameter)\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tconsole.log(i,\"\u52d5\u304f\u7acb\u3061\u7d75\u306e\u8868\u60c5\u306e\u6307\u5b9a\u304c\u304a\u304b\u3057\u30441:\",arr_effect1[0],\"\u3068\u3044\u3046\u9805\u76ee\u306f\u306a\u3044\")\r\n\t\t\t\t\t\t\t\treturn\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tconsole.log(i,\"\u52d5\u304f\u7acb\u3061\u7d75\u306e\u8868\u60c5\u306e\u6307\u5b9a\u304c\u304a\u304b\u3057\u30442:\",arr_effect1.length,line)\r\n\t\t\t\t\t\t\treturn\r\n\t\t\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\/\/\u52d5\u304f\u7acb\u3061\u7d75\u306e\u8868\u60c5\u306e\u6307\u5b9a\u304c\u3042\u308b\r\n\r\n\t\t\t\t\t\/\/console.log(\"\u518d\u751f\u901f\u5ea6\u5909\u66f4:\",i,arr_csv[1],ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"VoiceParameter\"][\"Speed\"],\"\u2192\",parseInt(arr_csv[csv_pos - 1]))\r\n\t\t\t\t\t\/\/ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"VoiceParameter\"][\"Speed\"]  = parseInt(arr_csv[csv_pos - 1])\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tcsv_pos=8\t\/\/csv_pos\u306f1\u59cb\u307e\u308a\r\n\t\t\t\tif ((arr_csv.length &gt;= csv_pos-1) &amp;&amp; (arr_csv[csv_pos - 1] != '')) {\r\n\t\t\t\t\tattr_moras = arr_csv[csv_pos - 1].split(\"\/\")\r\n\t\t\t\t\tarr_length = attr_moras[0].split(\"-\")\r\n\t\t\t\t\tarr_note = attr_moras[1].split(\"-\")\r\n\t\t\t\t\t\/\/console.log(attr_moras[0])\r\n\t\t\t\t\tlen_phrases = ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Pronounce\"][\"AudioQuery\"][\"accent_phrases\"].length\r\n\t\t\t\t\tidx_moras=0\r\n\t\t\t\t\tvtime=0\r\n\t\t\t\t\tfor (let k = 0; k &lt; len_phrases; ++k) {\r\n\t\t\t\t\t\tlen_moras = ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Pronounce\"][\"AudioQuery\"][\"accent_phrases\"][k][\"moras\"].length\r\n\t\t\t\t\t\tconsole.log(ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Pronounce\"][\"AudioQuery\"][\"accent_phrases\"][k][\"moras\"])\r\n\t\t\t\t\t\tfor (let p = 0; p &lt; len_moras; ++p) {\r\n\t\t\t\t\t\t\tvowel_length = ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Pronounce\"][\"AudioQuery\"][\"accent_phrases\"][k][\"moras\"][p][\"vowel_length\"]\r\n\t\t\t\t\t\t\tif (isNaN(arr_length[idx_moras])==false) {\r\n\t\t\t\t\t\t\t\tymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Pronounce\"][\"AudioQuery\"][\"accent_phrases\"][k][\"moras\"][p][\"vowel_length\"] = Number(arr_length[idx_moras])\r\n\t\t\t\t\t\t\t\tconsole.log(vowel_length + \" -&gt; \"+ Number(arr_length[idx_moras]))\r\n\t\t\t\t\t\t\t\tvtime=vtime+Number(arr_length[idx_moras])\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (isNaN(arr_note[idx_moras])==false) {\r\n\t\t\t\t\t\t\t\tymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Pronounce\"][\"AudioQuery\"][\"accent_phrases\"][k][\"moras\"][p][\"pitch\"] = Number(arr_note[idx_moras])\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t++idx_moras\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"VoiceCache\"]) {\r\n\r\n\t\t\t\t\t\tif (vtime&gt;10) {\r\n\t\t\t\t\t\t\tx_vtime=\"00:00:\"+vtime\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tx_vtime=\"00:00:0\"+vtime\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tconsole.log(\"x_vtime:\"+x_vtime)\r\n\t\t\t\t\t\tymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"Length\"] = Math. floor(vtime * 60)\r\n\t\t\t\t\t\tdelete ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"VoiceCache\"]\r\n\t\t\t\t\t\t\/\/console.log(\"del VoiceCache\" + ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"VoiceCache\"])\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\/\/\u52d5\u304f\u7acb\u3061\u7d75\u306e\u8868\u60c5\u306e\u6307\u5b9a\u304c\u3042\u308b\r\n\r\n\t\t\t\t\t\/\/console.log(\"\u518d\u751f\u901f\u5ea6\u5909\u66f4:\",i,arr_csv[1],ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"VoiceParameter\"][\"Speed\"],\"\u2192\",parseInt(arr_csv[csv_pos - 1]))\r\n\t\t\t\t\t\/\/ymm4data['Timelines'][0][\"Items\"][pos_Serif + i][\"VoiceParameter\"][\"Speed\"]  = parseInt(arr_csv[csv_pos - 1])\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\r\n\t\t\t}\r\n\t\t\ti = i + 1\r\n\t\t}\r\n\t})\r\n\r\n\t\/\/ JSON\u3078\u5909\u63db\r\n\tlet jsonData = JSON.stringify(ymm4data);\r\n\tdocument.getElementById('output3').value =jsonData\r\n\tx_filename0 = document.querySelector(\"#select-file1\").value.split('\\\\')\r\n\tnew_filename = \"update_\" + x_filename0[x_filename0.length - 1]\r\n\tdocument.getElementById('DL_area').innerHTML=`&lt;a href=# onclick=\\\"download_txt(\\'${new_filename}\\',document.getElementById(\\'output3\\').value);\\\"&gt;download ${new_filename}&lt;\/a&gt;`\r\n\r\n}\r\nfunction csvSplit(line){\r\n\t\/\/ https:\/\/qiita.com\/hatorijobs\/items\/dd0c730e6faba0c84203\r\n\tvar c = \"\";\r\n\tvar s = new String();\r\n\tvar data = new Array();\r\n\tvar singleQuoteFlg = false;\r\n\r\n\tfor (var i = 0; i &lt; line.length; i++) {\r\n\t\tc = line.charAt(i);\r\n\t\tif (c == \",\" &amp;&amp; !singleQuoteFlg) {\r\n\t\t\tdata.push(s.toString());\r\n\t\t\ts = \"\";\r\n\t\t} else if (c == \",\" &amp;&amp; singleQuoteFlg) {\r\n\t\t\ts = s + c;\r\n\t\t} else if (c == '\"') {\r\n\t\t\t\tsingleQuoteFlg = !singleQuoteFlg;\r\n\t\t\t} else {\r\n\t\t\ts = s + c;\r\n\t\t}\r\n\t}\r\n\treturn data;\r\n}\r\n\r\n\r\n&lt;\/script&gt;\r\n\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/code><\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>python\u3067manim\u3068voicevox\u3092\u64cd\u3063\u3066\u3001\u305a\u3093\u3060\u3082\u3093\u306e\u5e73\u9762\u5e7e\u4f55\u89e3\u8aac\u52d5\u753b\u3092\u4f5c\u3063\u3066\u307f\u305f\u3002 \u3055\u3089 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[38],"tags":[],"class_list":["post-2627","post","type-post","status-publish","format-standard","hentry","category-manim"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p9WqRX-Gn","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/oreoreki.gotdns.ch\/index.php?rest_route=\/wp\/v2\/posts\/2627","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/oreoreki.gotdns.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/oreoreki.gotdns.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/oreoreki.gotdns.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/oreoreki.gotdns.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2627"}],"version-history":[{"count":16,"href":"http:\/\/oreoreki.gotdns.ch\/index.php?rest_route=\/wp\/v2\/posts\/2627\/revisions"}],"predecessor-version":[{"id":2650,"href":"http:\/\/oreoreki.gotdns.ch\/index.php?rest_route=\/wp\/v2\/posts\/2627\/revisions\/2650"}],"wp:attachment":[{"href":"http:\/\/oreoreki.gotdns.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/oreoreki.gotdns.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2627"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/oreoreki.gotdns.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}