{"id":1958,"date":"2024-03-08T12:59:59","date_gmt":"2024-03-08T03:59:59","guid":{"rendered":"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1958"},"modified":"2024-03-16T15:39:31","modified_gmt":"2024-03-16T06:39:31","slug":"mp3_with_esp8266audio-ino%e3%81%ae%e3%83%a1%e3%83%a2","status":"publish","type":"post","link":"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1958","title":{"rendered":"MP3_with_ESP8266Audio.ino\u306e\u30e1\u30e2"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>M5Unified\u306eExample\u306b\u97f3\u58f0\u518d\u751f\u304c\u3042\u3063\u305f\u306e\u3067\u305d\u308c\u3067\u8a66\u3059\u3002<\/p>\n\n\n\n<p>File-&gt;Example-&gt;M5Unified-&gt;Advanced-&gt;Speaker_SD_wav_file\u3092\u9078\u629e\u3002<\/p>\n<cite><a href=\"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1939\">\u81ea\u5b85\u7528\u901a\u77e5\u30de\u30b7\u30f3\u4f5c\u6210(2)<\/a><\/cite><\/blockquote>\n\n\n\n<p>\u3068\u3001\u884c\u3053\u3046\u3068\u3057\u305f\u3051\u3069\u8272\u3005\u521d\u3081\u3066\u306a\u306e\u3067\u30e1\u30e2\u6b8b\u3057\u306a\u304c\u3089\u78ba\u8a8d\u3057\u3066\u3044\u304f\u3002\u63cf\u753b\u95a2\u4fc2\u306f\u304a\u3044\u3066\u304a\u3044\u3066\u97f3\u58f0\u51fa\u529b\u5468\u308a\u306e\u307f\u4e88\u5b9a\u3002<\/p>\n\n\n\n<p><strong>\u8a66\u3057\u306a\u304c\u3089\u66f8\u3044\u3066\u3044\u308b\u306e\u3067\u4e38\u3063\u3068\u66f8\u304d\u63db\u308f\u308b\u304b\u3082<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">M5Unified<\/h2>\n\n\n\n<p>\u6700\u8fd1\u306eM5Stack\u306f\u6a5f\u7a2e\u9593\u3092\u307e\u305f\u3044\u3067\u30bd\u30fc\u30b9\u3092\u3042\u308b\u7a0b\u5ea6\u5171\u6709\u3067\u304d\u308b<a href=\"https:\/\/docs.m5stack.com\/ja\/quick_start\/m5unified\/helloworld\">M5Unified<\/a>\u3092\u4f7f\u3046\u3002M5Unifid\u306b\u306f<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-4abb0d8385bbb1d21238bfd652dfcf49\"><code>auto cfg = M5.config();\ncfg.external_speaker.atomic_spk     = true;\n\nM5.begin(cfg);\n\nauto spk_cfg = M5.Speaker.config();\nspk_cfg.sample_rate = 96000;\nM5.Speaker.config(spk_cfg);\nM5.Speaker.begin();<\/code><\/pre>\n\n\n\n<p>\u307f\u305f\u3044\u306b\u5404\u968e\u5c64\uff08\u30ab\u30c6\u30b4\u30ea\uff1f\uff09\u6bce\u306b\u305d\u308c\u305e\u308c\u30b3\u30f3\u30d5\u30a3\u30b0\u304c\u3042\u3063\u3066\u7d30\u304b\u3044\u8a2d\u5b9a\u3092\u4ed5\u8fbc\u3081\u308b\u307f\u305f\u3044\u3002<\/p>\n\n\n\n<p>\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u30bd\u30fc\u30b9\u306eM5Unified\\src\\utility\\M5Unified.hpp\u3084M5Unified\\src\\utility\u3042\u305f\u308a\u306b\u4e2d\u8eab\u304c\u3044\u308b\u3002\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f<s>\u63a2\u3057\u3066\u3044\u306a\u3044<\/s><a href=\"https:\/\/docs.m5stack.com\/ja\/api\/m5unified\/m5unified_appendix#m5config\" data-type=\"link\" data-id=\"https:\/\/docs.m5stack.com\/ja\/api\/m5unified\/m5unified_appendix#m5config\">\u3053\u3053<\/a>\u306b\u3042\u3063\u305f\u3002\u3071\u3063\u3068\u307f\u3001cpp\u306e\u30b3\u30e1\u30f3\u30c8\u30d1\u30c3\u3068\u898b\u305f\u4e2d\u3060\u3068\u65e5\u672c\u8a9e\u3082\u3042\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/\/ Increasing the sample_rate will improve the sound quality instead of increasing the CPU load.\n    spk_cfg.sample_rate = 96000;<\/pre>\n\n\n\n<p>\u97f3\u8cea\u3068CPU\u8ca0\u8377\u306f\u5f15\u304d\u63db\u3048\u3068\u3002\u624b\u6301\u3061\u306eM5Stack Basic\u306e\u30b9\u30d4\u30fc\u30ab\u30fc\u306e\u97f3\u8cea\u3060\u3068\u3069\u3046\u305b\u9811\u5f35\u308b\u3068\u3053\u308d\u3058\u3083\u306a\u3044\u3068\u601d\u3046\u306e\u3067\u4e0b\u3052\u3066\u3088\u3044\u304b\u3082\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">SD\u30ab\u30fc\u30c9<\/h2>\n\n\n\n<p><a href=\"https:\/\/docs.m5stack.com\/ja\/quick_start\/m5unified\/migration\" data-type=\"link\" data-id=\"https:\/\/docs.m5stack.com\/ja\/quick_start\/m5unified\/migration\">M5Unified\u3078\u306e\u79fb\u690d\u30dd\u30a4\u30f3\u30c8<\/a>\u306bSD.begin()\u306e\u8ffd\u52a0\u3063\u3066\u306e\u304c\u3042\u308b\u3051\u3069\u524d\u306f\u306a\u304b\u3063\u305f\u306e\u304b\u306a\uff1f\u3088\u304f\u308f\u304b\u3089\u3093\u3002<\/p>\n\n\n\n<p><strong>    bool begin(uint8_t ssPin=SS, SPIClass &amp;spi=SPI, uint32_t frequency=4000000, const char * mountpoint=&#8221;\/sd&#8221;, uint8_t max_files=5, bool format_if_empty=false);<\/strong>\u3067<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">+    while (false == SD.begin(GPIO_NUM_4, SPI, 25000000))\n+    {\n+      delay(500);\n+    }\n<\/pre>\n\n\n\n<p>\u3068\u308a\u3042\u3048\u305a\u4e0a\u306e\u30a4\u30e1\u30fc\u30b8\u3067\u3088\u3044\u3089\u3057\u3044\u3002\u6700\u5f8c\u306e\u30af\u30ed\u30c3\u30af\u30ec\u30fc\u30c8\u306fSD\u30ab\u30fc\u30c9\u306e\u4e00\u756a\u9045\u3044\u898f\u683c\u3060\u3068\u601d\u3046\u306e\u3067\u3082\u306e\u306b\u3088\u3063\u3066\u306f\u3082\u3063\u3068\u3042\u3052\u3089\u308c\u308b\u306e\u304b\u306a\u3002GPIO_NUM_4\u306fESP32\u306ePIN\u6307\u5b9a\u304b\u3089\u304d\u3066\u3044\u308b\u3068\u601d\u3046\u3051\u3069\u8ffd\u3063\u3066\u3044\u306a\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u97f3\u58f0<\/h2>\n\n\n\n<p>AudioOutput\uff08\u672c\u4f53\uff09\u3001AudioFileSource<em>HOGE<\/em>(\u8aad\u307f\u8fbc\u307f\u5143)\u3001AudioGeneratorHUGA\uff08\u97f3\u58f0\u5316\uff09\u306e3\u70b9\u30bb\u30c3\u30c8\u304c\u57fa\u672c\u307f\u305f\u3044\u3002<\/p>\n\n\n\n<p>AudioFileSourceID3\u306f\u97f3\u58f0\u30d5\u30a1\u30a4\u30eb\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u7684\u306a\u5974\u3092\u6271\u3048\u308b\u3002<\/p>\n\n\n\n<p>AudioOutputM5Speaker\u306f\u30c8\u30ea\u30d7\u30eb\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u3088\u308d\u3057\u304f\u3084\u3063\u3066\u304f\u308c\u306a\u304c\u3089\uff08\u3088\u304f\u308f\u304b\u3063\u3066\u3044\u306a\u3044\uff09\u3001M5Unifid\u306e\u30b9\u30d4\u30fc\u30ab\u30fc\u306b\u97f3\u58f0\u3092\u6e21\u3057\u3066\u304f\u308c\u3066\u3044\u308b\u3002ChatGPT API\u642d\u8f09AI\uff7d\uff80\uff6f\uff78\uff81\uff6c\uff9d\u306e<a href=\"https:\/\/github.com\/robo8080\/M5Unified_StackChan_ChatGPT\/tree\/main\">\u30ec\u30dd\u30b8\u30c8\u30ea<\/a>\u3067\u306f<a href=\"https:\/\/github.com\/robo8080\/M5Unified_StackChan_ChatGPT\/blob\/main\/M5Unified_StackChan_ChatGPT\/src\/AudioOutputM5Speaker.h\" data-type=\"link\" data-id=\"https:\/\/github.com\/robo8080\/M5Unified_StackChan_ChatGPT\/blob\/main\/M5Unified_StackChan_ChatGPT\/src\/AudioOutputM5Speaker.h\">\u5225\u30d5\u30a1\u30a4\u30eb<\/a>\u306b\u5207\u308a\u51fa\u3055\u308c\u3066\u3044\u305f\u3002\uff08\u304a\u304a\u3088\u305d\u4e00\u7dd2\u3050\u3089\u3044\u306e\u3075\u3093\u308f\u308a\u3057\u305f\u78ba\u8a8d\uff09\u4f55\u304b\u56f0\u3063\u305f\u3089\u3053\u3063\u3061\u306b\u3082\u60c5\u5831\u3042\u308b\u304b\u3082\u3002<\/p>\n\n\n\n<p>AudioOutputM5Speaker\u304c\u4f9d\u5b58\u3057\u3066\u3044\u308b\u306e\u306fAudioOutput.h\u3068M5Unified.h\u3068\u307f\u305f\u3044\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-2d11ce80724c3ec3e2f661b33580a290\"><code>static AudioFileSourceSD file;\nstatic AudioOutputM5Speaker out(&amp;M5.Speaker, m5spk_virtual_channel);\nstatic AudioGeneratorMP3 mp3;\n\nfile.open(fname);\nmp3.begin(&amp;file, &amp;out);<\/code><\/pre>\n\n\n\n<p>\u3067\u958b\u304d<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-df8d36c90c466f50d4a9dc139d53f680\"><code>void loop() {\n    if (mp3.isRunning())\n  {\n    if (!mp3.loop()) { mp3.stop(); }\n  }\n  else\n  {\n    delay(1);\n  }<\/code><\/pre>\n\n\n\n<p>\u3067\u7d99\u7d9a<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-72ae548dd9e4faaf67b725a137c28a34\"><code>  out.stop();\n  mp3.stop();\n  file.close();<\/code><\/pre>\n\n\n\n<p>\u3067\u7d42\u4e86\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\u304a\u304a\u3088\u305d\u6700\u5c0f\u3050\u3089\u3044\u306e\u52d5\u4f5c\u30bd\u30fc\u30b9<\/p>\n\n\n\n<p>\u30a4\u30bf\u30ea\u30c3\u30af\u306b\u306a\u3063\u3066\u3044\u308b\u3068\u3053\u308d\u306f\u5225\u30d5\u30a1\u30a4\u30eb\u306b\u5207\u308a\u51fa\u3057\u3066\u3059\u3063\u304d\u308a\u3055\u305b\u305f\u3089\u3088\u3055\u305d\u3046\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-a127ba24c16b3d91b757b5d1ffa30aab\"><code>#include &lt;SD.h&gt;\n\n#include &lt;AudioOutput.h&gt;\n#include &lt;AudioFileSourceSD.h&gt;\n#include &lt;AudioGeneratorMP3.h&gt;\n\n#include &lt;M5Unified.h&gt;\n\n<em>class AudioOutputM5Speaker : public AudioOutput {\npublic:\n  AudioOutputM5Speaker(m5::Speaker_Class* m5sound, uint8_t virtual_sound_channel = 0) {\n    _m5sound = m5sound;\n    _virtual_ch = virtual_sound_channel;\n  }\n  virtual ~AudioOutputM5Speaker(void){};\n  virtual bool begin(void) override {\n    return true;\n  }\n  virtual bool ConsumeSample(int16_t sample&#91;2]) override {\n    if (_tri_buffer_index &lt; tri_buf_size) {\n      _tri_buffer&#91;_tri_index]&#91;_tri_buffer_index] = sample&#91;0];\n      _tri_buffer&#91;_tri_index]&#91;_tri_buffer_index + 1] = sample&#91;1];\n      _tri_buffer_index += 2;\n\n      return true;\n    }\n\n    flush();\n    return false;\n  }\n  virtual void flush(void) override {\n    if (_tri_buffer_index) {\n      _m5sound-&gt;playRaw(_tri_buffer&#91;_tri_index], _tri_buffer_index, hertz, true, 1, _virtual_ch);\n      _tri_index = _tri_index &lt; 2 ? _tri_index + 1 : 0;\n      _tri_buffer_index = 0;\n    }\n  }\n  virtual bool stop(void) override {\n    flush();\n    _m5sound-&gt;stop(_virtual_ch);\n    return true;\n  }\n\n  const int16_t* getBuffer(void) const {\n    return _tri_buffer&#91;(_tri_index + 2) % 3];\n  }\n\nprotected:\n  m5::Speaker_Class* _m5sound;\n  uint8_t _virtual_ch;\n  static constexpr size_t tri_buf_size = 1536;\n  int16_t _tri_buffer&#91;3]&#91;tri_buf_size];\n  size_t _tri_buffer_index = 0;\n  size_t _tri_index = 0;\n};\n\n<\/em>AudioFileSourceSD file; \/\/ \u30b5\u30f3\u30d7\u30eb\u306fstatic\u3060\u3063\u305f\u3051\u3069\u591a\u5206\u4f7f\u3044\u65b9\u3067\u3069\u3061\u3089\u3082\u9078\u3079\u308b\nAudioOutputM5Speaker out(&amp;M5.Speaker); \/\/  \u30b5\u30f3\u30d7\u30eb\u306eAudioOutputM5Speaker\u3060\u3068virtual_sound_channel\u306e\u30c7\u30d5\u30a9\u30eb\u30c80\nAudioGeneratorMP3 mp3;\n\nvoid setup() {\n  M5.begin(); \/\/ \u30b3\u30f3\u30d5\u30a3\u30b0\u8a2d\u5b9a\u3057\u306a\u304f\u3066\u3082\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30b9\u30d4\u30fc\u30ab\u30fc\u306f\u52d5\u304f\n  \/\/M5.Speaker.begin(); \/\/ \u30dc\u30fc\u30c9\u6b21\u7b2c\u304b\u3082\u3057\u308c\u306a\u3044\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u3067begin\u306f\u3055\u308c\u3066\u3044\u305d\u3046\n\n  while (false == SD.begin(GPIO_NUM_4, SPI, 25000000)) {\n    delay(500);\n  }<em>\n<\/em>  file.open(\"\/mp3\/file02.mp3\");\n  mp3.begin(&amp;file, &amp;out);\n}\n\n\nvoid loop() {\n  \/\/ \u3053\u3053\u91cd\u8981\n  if (mp3.isRunning()) { \n      if (!mp3.loop()) { mp3.stop(); }\n  } else {\n    delay(1);\n  }\n\n  \/\/ \u97f3\u58f0\u7d42\u308f\u308b\u306e\u5f85\u305f\u306a\u3044\u5834\u5408\u306f\u5272\u308a\u8fbc\u307f\u5fc5\u8981\uff1f\n  M5.update();\n  if (M5.BtnA.wasClicked()) {\n    M5.Speaker.tone(1000, 100);\n    out.stop();\n    mp3.stop();\n    file.close();\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u3053\u3044\u3064\u3092\u30d9\u30fc\u30b9\u306b\u30b5\u30f3\u30d7\u30eb\u7b49\u3092\u307f\u305f\u3089\u4f55\u3068\u304b\u306a\u308a\u305d\u3046\u3002<\/p>\n\n\n\n<p>isRunning\u306e\u5468\u8fba<a href=\"https:\/\/hatakekara.com\/webradio-w-i2s-02\/\" data-type=\"link\" data-id=\"https:\/\/hatakekara.com\/webradio-w-i2s-02\/\">\u3053\u3053<\/a>\u306b\u5927\u4f53\u307e\u3068\u307e\u3063\u3066\u3044\u305f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u30dc\u30ea\u30e5\u30fc\u30e0<\/h3>\n\n\n\n<p>\u30dc\u30ea\u30e5\u30fc\u30e0\u8a2d\u5b9a\u306f\u4ee5\u4e0b\u3002\u7279\u5b9a\u306e\u30d0\u30fc\u30c1\u30e3\u30eb\u30c1\u30e3\u30f3\u30cd\u30eb\u306b\u500b\u5225\u8a2d\u5b9a\u3082\u3067\u304d\u308b\uff08\u30d0\u30fc\u30c1\u30e3\u30eb\u30c1\u30e3\u30f3\u30cd\u30eb\u306f\u308f\u304b\u3063\u3066\u3044\u306a\u3044\u3002\u6587\u5b57\u304b\u3089\u5bdf\u3059\u308b\u306b\u306a\u306b\u304b\u4eee\u60f3\u7684\u306a\u97f3\u58f0\u30c1\u30e3\u30f3\u30cd\u30eb\u3092\u4f7f\u3046\u6a5f\u80fd\u304c\u3042\u308b\u306e\u3060\u308d\u3046\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    M5.Speaker.setVolume(volume);\n    M5.Speaker.setChannelVolume(m5spk_virtual_channel, volume);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u30b3\u30a2\u6307\u5b9a\uff1f<\/h3>\n\n\n\n<p>ChatGPT API\u642d\u8f09AI\uff7d\uff80\uff6f\uff78\uff81\uff6c\uff9d\u306e<a href=\"https:\/\/github.com\/robo8080\/M5Unified_StackChan_ChatGPT\/blob\/edec5d090ea3b4daf367b509f1fb403b6340f855\/M5Unified_StackChan_ChatGPT\/src\/M5Unified_StackChan_ChatGPT.ino#L933C5-L934C1\" data-type=\"link\" data-id=\"https:\/\/github.com\/robo8080\/M5Unified_StackChan_ChatGPT\/blob\/edec5d090ea3b4daf367b509f1fb403b6340f855\/M5Unified_StackChan_ChatGPT\/src\/M5Unified_StackChan_ChatGPT.ino#L933C5-L934C1\">\u30ec\u30dd\u30b8\u30c8\u30ea<\/a>\u3067\u30b9\u30d4\u30fc\u30ab\u30fc\u518d\u751f\u30bf\u30b9\u30af\u3092\u5272\u308a\u5f53\u3066\u308bCPU\u30b3\u30a2\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5272\u308a\u5f53\u3066\u3066\u3044\u308b\u3002<\/p>\n\n\n\n<p class=\"has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-1944fee32d9d4553760afbb72199d24d\">spk_cfg.task_pinned_core = APP_CPU_NUM;<\/p>\n\n\n\n<p><a href=\"https:\/\/lang-ship.com\/blog\/work\/m5stickc-esp32-multi-task\/\" data-type=\"link\" data-id=\"https:\/\/lang-ship.com\/blog\/work\/m5stickc-esp32-multi-task\/\">\u3053\u3061\u3089<\/a>\u3092\u898b\u308b\u3068\u7121\u7dda\u95a2\u4fc2\u3092\u4f7f\u3063\u3066\u3044\u308b\u3068\u304d\u306b\u306fCore0(PRO_CPU_NUM)\u3092\u7121\u7dda\u95a2\u9023\u3067\u304b\u306a\u308a\u4f7f\u3046\u306e\u3067\u3001\u6bd4\u8f03\u7684\u7a7a\u3044\u3066\u3044\u308bCore1(APP_CPU_NUM)\u3092\u6307\u5b9a\u3057\u3066\u3044\u308b\u306e\u304b\u306a\uff1f<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">AudioGeneratorMP3#close<\/h3>\n\n\n\n<p>cpp\u306e<a href=\"https:\/\/github.com\/earlephilhower\/ESP8266Audio\/blob\/master\/src\/AudioGeneratorMP3.cpp\" data-type=\"link\" data-id=\"https:\/\/github.com\/earlephilhower\/ESP8266Audio\/blob\/master\/src\/AudioGeneratorMP3.cpp\">\u5185\u90e8<\/a>\u3067output\u3068file\u9589\u3058\u3066\u3001running(\u8d77\u52d5\u78ba\u8a8d\u30d5\u30e9\u30b0)\u3092false\u306b\u3057\u3066\u3044\u308b\u3002\u3053\u3061\u3089\u4e00\u3064\u3067\u307e\u3068\u3081\u3066\u30af\u30ed\u30fc\u30ba\u3059\u308b\u601d\u60f3\u306a\u6c17\u304c\u3059\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-8fb708a811ffda14f9d1baa140e53a8e\"><code>  running = false;\r\n  output->stop();\r\n  return file->close();<\/code><\/pre>\n\n\n\n<p>\u3053\u306e\u5b9f\u88c5\u3092\u4fe1\u3058\u308b\u3068isRunning\u3068close\u3067\u51e6\u7406\u3067\u304d\u308b\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>M5Unified\u306eExample\u306b\u97f3\u58f0\u518d\u751f\u304c\u3042\u3063\u305f\u306e\u3067\u305d\u308c\u3067\u8a66\u3059\u3002 File-&gt;Example-&gt;M5Unified-&gt;Advanced-&gt;Speaker_SD_wav_file\u3092\u9078\u629e\u3002 \u81ea\u5b85\u7528 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[117],"tags":[135,134],"class_list":["post-1958","post","type-post","status-publish","format-standard","hentry","category-117","tag-m5stack","tag-m5unified"],"_links":{"self":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/1958","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1958"}],"version-history":[{"count":14,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/1958\/revisions"}],"predecessor-version":[{"id":2020,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/1958\/revisions\/2020"}],"wp:attachment":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1958"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1958"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}