LINE Messaging API를 사용하여 MML을 보낼 수 있습니다.

[이 문서는 LINE Messaging API를 사용하여 LaTex를 보낼 수 있습니다.의 속편입니다. ]

LINE으로 음악 보내기



LINE에서 사람과 Z-MUSIC의 이야기를 할 때, 아무래도 음표를 보내고 싶을 때가 있지요.
하지만 콧노래는 멀티채널로 할 수 없고 종이가 없으면 오선보도 쓸 수 없습니다.

상대방이 원시 MML을 읽을 수 있는 사람이라면 좋지만, 그렇게 할 수 없는 일도 많이 있습니다.
MML을 보내면 음악을 돌려주는 bot가 없을까 생각해 찾아 보았습니다만, 없었기 때문에 만들어 보았습니다.

동작 이미지



친구 추가는 이쪽에서 부디.





MML의 변환에는 "사쿠라" 을 사용하고 있으므로, 스토톤 기법도 사용할 수 있습니다.

시스템 정보



서버는 변하지 않는 데비안 리눅스입니다.
서버 측에서 mml → midi → wav → m4a 라고 하는 변환을 실시해, LINE 로 재생할 수 있는 형식으로 합니다.

MML → MIDI



MML → MIDI 변환에는 CLI판 사쿠라의 csakura를 사용합니다.
배포된 바이너리는 MacOS 및 RPi용이므로 데비안에서는 사용할 수 없습니다.
직접 빌드합니다.
sudo apt install fpc nkf
git clone https://github.com/kujirahand/sakuramml.git
cd sakuramml
./make.sh

MIDI → WAV



이 변환에는 fluidsynth 를 사용합니다.
sudo apt install fluidsynth

다음에 좋아하는 사운드 폰트도 찾아 둡시다.
이번에는 Z-MUSIC 바람이 되면 좋다고 하는 것으로, FM 음원풍의 사운드 폰트를 찾아 왔습니다.

다만, 너무 사운드 폰트가 크면 메모리상에 전개할 수 없고 fluidsynth 가 죽습니다.
작은 사운드 글꼴이거나 서버에 요금을 부과합니다.

정말은 제대로 파형을 생성하는 편이 리얼입니다만…
할 수 있는 곳에서 자신은 잘 다룰 수 있는 생각이 없기 때문에, 우선 MIDI로 타협합니다.

WAV → M4A



LINE 의 문서에는 m4a 로 던지라고 써 있었으므로, WAV 그대로는 안 된다고 생각합니다.
WAV 그대로 보낼 수 있을 것 같은 생각도 합니다만, 실험은 하고 있지 않습니다.

WAV → M4A 변환을 위해 ffmpeg를 설치합니다.
환경에 따라 다른 구성 요소도 필요할 수 있습니다. 적절히 넣습니다.
sudo apt install ffmpeg

서버



이번에는 nginx를 사용합니다.
하지만 이 기사에는 서버 설정 주위는 쓰지 않으므로 정적 파일이 나뉘어 php 가 움직이면 뭐든 괜찮습니다.

이번에는 php용 서버에 생성한 m4a도 넣습니다만, 절대 s3등의 스토리지에 업해야 한다고는 생각하고 있습니다. 앞으로의 과제입니다.

출처



이전에는 받은 텍스트를 Google Charts API에 던지는 것만으로 좋았지만 이번에는 그렇게 하지 않습니다.

이번 미소는, csakura 관계의 부분입니다. 이 녀석은 SJIS로 움직이기 때문에 입출력을 그대로
UTF-8 계의 PHP 에 먹이게 하면 문자 깨집니다. 즉
  • MML 소스 UTF-8 → SJIS 변환
  • csakura 출력의 SJIS → UTF-8 변환

  • 해야 합니다.
    소스에서는 전자는 mbstring 로, 후자는 iconv 로 실현되고 있습니다.

    사운드 폰트의 사정으로 소리가 작았으므로, ffmpeg 로 음량의 조정을 걸고 있습니다.
    음질도 떨어지고, 비력한 음원 칩감이 나와 매우 좋습니다.

    샘플



    처음 이미지에서 사용한 MML 코드를 붙여 둡니다.

    반짝반짝 별
    ccggaag2 ffeeddc2 [ggffeed2] ccggaag2 ffeeddc2
    

    자낙 1면 같은 것
    トラック1
    l16
    れーふぁーらーそらーー↑どー↓しーそーら1
    [
    [れーみーふぁーれみーふぁーみれーみー]
    [ふぁーそーらーふぁそーらーそふぁーそー]
    [し-ー↑どーれー↓し-↑どーれーど↓し-ー↑どー↓]
    らーし-ー↑どー↓らし-ー↑どー↓し-らーし-ー
    らーし-ー↑[6どー]
    
    れ2ど2↓し-らーそら2.
    ↑ど2↓し-2ら2そ4ら4
    し-2ら2そ2ふぁ2
    [8みふぁ]
    み1
    ]
    
    トラック2
    l16
    れーーれれーど↓しーししーらーそー[3らー↑どれ↓]↑ど↓しらー↓
    [[
    [4[4れ]ら[3れ]]
    [4[4ふぁ]↑ど↓[3ふぁ]]
    [4[4し-]↑ふぁ↓[3し-]]
    [4[4ら]↑み↓[3ら]]
    ]]
    

    좋은 웹페이지 즐겨찾기