超歌舞伎ペンライトの大向こうの声を取り出してみた

# はじめに

歌舞伎の「大向こう」文化すら知らなかったのですが、歌舞伎応援ボタンを製作しています。

https://protopedia.net/prototype/5029

超歌舞伎の観客は出演者毎に指定された色のペンライトを振って応援するスタイルが定着しています。
また、本来禁止されている「大向こう」の掛け声も思い思いのタイミングで誰でもかけることができます。
コロナ禍では、感染症対策として観客が声を出さない形式で行われ、「大向う付オリジナルペンライト」という、大向こうの音声を発する機能が付いたペンライトが劇場公演グッズとして販売されました。

https://ja.wikipedia.org/wiki/%E8%B6%85%E6%AD%8C%E8%88%9E%E4%BC%8E#cite_note-37

# 大向こうの声

歌舞伎応援ボタンで使用する音声は、ダウンロードできるフリー素材(本物の音声)を元に、生成AI(VALL-E-X)で新しく生成した音声を使用しました。

- 入力(成駒屋、成田屋、澤瀉屋、橘屋、音羽屋)

https://park.org/Japan/Kabuki/japan/sound-j.html

- 生成AI(VALL-E-X)

https://huggingface.co/spaces/Plachta/VALL-E-X

- 出力(中村屋)

https://github.com/kitazaki/kabuki-button

# 歌舞伎応援ボタン

製作メモはこちらです。
DFPlayer Miniを使用して、ボタンが押されるとSDカードに保存されているMP3ファイル(大向こう音声)を再生します。
音声の選曲はDFPlayer MiniのADKEY機能を使用しています。ロータリースイッチを回すと抵抗値が変わり、ボタンを押した時の抵抗値の大きさによって再生される音声が変わる仕組みです。

https://qiita.com/kitazaki/private/60e3312e54e442ed700d

![IMG_4613.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4c6d25f5-f354-52d2-20d5-a403671d3443.jpeg)

![IMG_4590.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/01e44b7d-d98d-afc4-44a8-4c2d70525eaf.jpeg)

# 大向こう付きペンライト

公式ホームページでは売り切れでしたので、フリマで入手しました。

![IMG_4435.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/b5d5f4df-ca09-912e-f2a5-024d67455336.jpeg)

ペンライトの操作と音声の操作はそれぞれ独立しています。

![IMG_4437.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/cf047fb4-4592-b953-0af3-ec3729ae15b8.jpeg)

# 仕様調査

## 分解

まずは、ペンライトを分解します。分解自体はそこまで難しくないです。分解して基板を取り出します。

手順は以下のとおりです。

1.半透明の筒は半時計周りに回して外します。LEDの拡散レンズも外します。

![IMG_4698.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/fc0dc4a0-c1f1-0a88-5959-0d98f1db991e.jpeg)

2.金色のはめ輪を外します。

![IMG_4699.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/58262369-9cce-f551-d3e1-e3542064fcb1.jpeg)

3.電池ケースの蓋を外し、ネジ2本をプラスドライバーで外します。

![IMG_4700.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/0daf42c7-6d55-70fb-7d06-2703699e9614.jpeg)

4.筐体を2つに割ります。

![IMG_4440.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/54849d52-e352-d9f5-d2a7-0dd65f1a9b6e.jpeg)

5.基板はネジ留めされていないので、そのまま外せます。

![IMG_4443.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/7beff1ac-d86b-8d16-fd01-b7bb16f6605c.jpeg)

## 基板

基板は複数枚から構成され、立体的に組まれています。黒い四角い箱はスピーカーです。

![IMG_4441.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/f49dc484-e9d2-f260-caa8-2a35b4295350.jpeg)

![IMG_4442.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/13cd947b-7778-0703-5c52-44129bb792b1.jpeg)

## MCU (不明)

16ピンのMCUは型番が消されているため判別できませんでした。

![MCU.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/56d57750-79b6-de23-1d59-5daa32bbf6fc.jpeg)

## 音声再生チップとFlashメモリ

使用されている音声再生チップはMY1680X-16Sで、DFPlayer Miniとほぼ同じ仕組みで、MP3/WAVファイルを再生して音を出しています。
MY1680X-16Sの下のチップはKH25L8006E(Flashメモリ)です。ここにMP3ファイルが保存されていました。

![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4f1f7d60-580c-5743-3c63-b6a2c85f8186.jpeg)

http://www.maiyout.com/nd.jsp?id=7&groupId=-1

https://www.macronix.com.hk/Lists/Datasheet/Attachments/271/KH25L8006Ever18-1.8.pdf

### 2024年2月21日追記

2022年南座のペンライトで使用されているFlashメモリはWT25Q80B-8Sでした。
それ以外は同じでした。

![IMG_4725.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/a03a3a58-b0fb-9745-26dd-9f7222c77314.jpeg)

![名称未設定.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/8e394dfa-29f4-69bb-ab81-2e8f7ffbe935.jpeg)

https://atta.szlcsc.com/upload/public/pdf/source/20240105/6E0DACE752DA9597C61D7929339D6FDC.pdf

## オーディオアンプ

少し見にくいですが、WT8302(D級オーディオアンプ)が使用されています。

![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/afbff10d-d7a0-d7c4-202a-8a08ec504a0a.jpeg)

https://www.wtchip.com/uploads/soft/2306/060S6_WT8302_dianya2.pdf

## 動作解析

音声が再生される仕組みを確認します。
ここからはある程度、電子工作の知識が必要になります。

![4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/510c1599-aeea-4a1f-7ea9-d394ae0ca37c.jpeg)

### 選曲、再生の仕組み

基板の配線を調べていき、手書きでメモを作成しました。

![IMG_4697.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/2096ca70-4c33-b120-b9d0-ebded9c22d39.jpeg)

簡単に全体の仕組みを説明します。
ボタン操作で選曲と再生を行います。
再生ボタンを押すとMCUは音声再生チップ(MY1680X-16S)に対してシリアル通信でコマンドを送ります。
音声再生チップ(MY1680X-16S)はコマンドの中の曲番号の音声(MP3)ファイルをFlashメモリ(KH25L8006E)から読み込みます。
音声再生チップ(MY1680X-16S)は音声(MP3)ファイルを再生して、オーディオアンプ経由でスピーカーから音声を再生します。

![スクリーンショット 2024-02-18 19.37.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/8b03f14b-8b48-cf6c-56d9-5a168de10020.png)

### 音声再生コマンドの調査

ロジックアナライザーでシリアル通信の内容を確認します。
音声再生チップ(MY1680X-16S)のRX(12ピン)とGND(3ピン)をロジックアナライザ(CH1とGND)へ接続します。

![スクリーンショット 2024-02-18 19.43.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/1700e311-f636-15da-6ea8-4af28f6f78c3.png)

![IMG_4692.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/dcb7e0fa-1d80-6288-097e-488d9be929c0.jpeg)

![5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/e48633f5-2df8-c08c-d3af-fbfb05a34904.jpeg)

1曲目の音声を再生した時の信号です。
仕様書を確認し、曲目を選択して音声を再生するコマンドでした。

![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/6e0db8ae-4a1e-23e7-a3ab-ba911ea327da.jpeg)

![スクリーンショット 2024-02-18 19.46.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/eb3c81f0-142c-2ad9-5ae4-06f1c096604a.png)

2曲目〜6曲目は以下のとおりでした。

2曲目: 7E 05 41 00 02 46 EF
3曲目: 7E 05 41 00 03 47 EF
4曲目: 7E 05 41 00 04 40 EF
5曲目: 7E 05 41 00 05 41 EF
6曲目: 7E 05 41 00 06 42 EF

左から6バイト目はチェックサムで、2〜5バイト目をXORで計算して求めます。

![スクリーンショット 2024-02-18 19.49.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/b200159c-a988-f9e2-826f-c85ba910d31c.png)

ロジックアナライザーの設定と操作は以下の記事を参考にしました。

https://qiita.com/infinite1oop/items/508873f660812e52f324

https://qiita.com/infinite1oop/items/b18197f74864b908a556

### 音声(MP3)ファイルの抽出

Flashメモリ(KH25L8006E)とラズパイを接続します

![IMG_4695.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/2afd1ad7-7300-752b-9843-441077730498.jpeg)

![IMG_4696.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4941bd30-8c2a-08b4-c07b-876d25c58bb6.jpeg)

![スクリーンショット 2024-02-18 19.56.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/f258242a-c251-2dec-4ea8-fed22799b4c5.png)

![fig.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/74718ea9-71fe-44f0-cd2b-991a58695ced.png)

ラズパイ上のコマンドラインからflashromコマンドを実行します。

まず、ラズパイでSPIを有効にします。

```bash
$ raspi-config
```

flashromコマンドをインストールします。

```bash
$ sudo apt install flashrom
```

flashromコマンドを実行します。Flashメモリが接続されていない状態だとエラー(EEPROM/flashデバイスが見つからない)が出力されます。

```bash
$ sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=5000
flashrom v1.2 on Linux 6.1.21-v8+ (aarch64)
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
No EEPROM/flash device found.
Note: flashrom can never write if the flash chip isn't found automatically.
```

Flashメモリを接続してflashromコマンドを再度実行すると、Flashメモリが認識され、以下のように出力されました。

```bash
$ sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=5000
flashrom v1.2 on Linux 6.1.21-v8+ (aarch64)
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Found Macronix flash chip "MX25L8005/MX25L8006E/MX25L8008E/MX25V8005" (1024 kB, SPI) on linux_spi.
No operations were specified.
```

Flashメモリの内容を読み出して、ファイル(data.bin)に書き出します。

```bash
$ sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=5000 -r data.bin
flashrom v1.2 on Linux 6.1.21-v8+ (aarch64)
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Found Macronix flash chip "MX25L8005/MX25L8006E/MX25L8008E/MX25V8005" (1024 kB, SPI) on linux_spi.
Reading flash... done.
```

書き出したファイル(data.bin)の内容を確認します。FAT12でフォーマットされていることを確認しました。

```bash
$ file data.bin 
data.bin: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "MSDOS5.0", reserved sectors 4, root entries 512, sectors 2048 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 6, sectors/track 1, heads 1, serial number 0x983e76b1, unlabeled, FAT (12 bit)
```

mountコマンドで書き出したファイル(data.bin)を/mntディレクトリにマウントします。

```bash
$ sudo mount data.bin /mnt
```

/mntディレクトリの内容を確認すると、音声ファイル(0001.mp3〜0006.mp3)を確認できました。

```bash
$ cd /mnt
$ ls -al
total 227
drwxr-xr-x  2 root root 16384 Jan  1  1970 .
drwxr-xr-x 18 root root  4096 May  3  2023 ..
-rwxr-xr-x  1 root root 40992 Jun 23  2022 0001.mp3
-rwxr-xr-x  1 root root 37632 Jun 23  2022 0002.mp3
-rwxr-xr-x  1 root root 28512 Jun 23  2022 0003.mp3
-rwxr-xr-x  1 root root 34752 Jun 23  2022 0004.mp3
-rwxr-xr-x  1 root root 39552 Jun 23  2022 0005.mp3
-rwxr-xr-x  1 root root 28512 Jun 23  2022 0006.mp3
```

ラズパイでSPI Flashの読み出しは以下の記事を参考にしました。

https://dev.classmethod.jp/articles/easy-way-to-access-spi-flash/

### 音声(MP3)ファイルの解析

結論から先に言うと、MP3ファイルのタグの中には面白そうな情報は見つかりませんでした。

![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/882db6b2-6dd0-6b97-5a5b-3358b4de10b7.jpeg)

また、Flashメモリの中にも面白そうな情報は見つかりませんでした。

![7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/e48f8524-7e21-33bc-4f3c-07d66e495707.jpeg)

とは言え、大向こうの音声をDFPlayer Miniで再生したり、高音質で聴けるようになりました。

# さいごに

2024年2月8日に歌舞伎座で初めて歌舞伎(連獅子)を鑑賞してきました。

![IMG_4572.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/9a808b91-9bc7-7a36-0870-2d10f0137d1d.jpeg)

いつか古典歌舞伎の公演で歌舞伎応援ボタンを押したいです。

![IMG_4578.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/09568019-f335-ca7e-789f-97247226500b.jpeg)

### 2024年5月19日追記

2019年南座のペンライト(こちらは大向こうの音声なし)も分解調査してみました。
思っていたより、しっかりとした作りでした。

![IMG_6022.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/2a4b25b3-397a-b99f-a317-8c866c830acb.jpeg)

![IMG_6023.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/2e58f8ef-ed87-b673-c1d7-06a5b76be3b2.jpeg)

![IMG_6024.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/fe23afe4-7a22-886d-eb9a-42a69d89a8c2.jpeg)

![IMG_6025.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/ce293957-063e-ae0e-3fe6-ea9ae942e6cd.jpeg)

![IMG_6026.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/68734586-715a-949c-7c08-eee8b02c5398.jpeg)

![IMG_6027.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/dfe1b7f9-6ee2-2327-6b92-46d3eaefe53a.jpeg)