ヤマハミュージックデータショップ MIDIデータ:カラオケ動画作成

ヤマハミュージックデータショップ(https://yamahamusicdata.jp)を長らく愛用してます。

 

バンド練習の為のマイナスワン演奏音源作成が主な用途ですが、MIDIデータの出来が素晴らしく、いつも感動させられます。

 

専用ソフトでコード表示も出来るので、音取りにも大活躍です。

http://download.music-eclub.com/midradio/detail.php

 

 

しかし、MIDI再生のスマホタブレット版が無いので、気楽にスタジオで!、とは行きません。

また、このソフトはmidiデータの特性もあり、頻繁な、巻き戻し、早送り操作が厳しく、部分的なくり返しの練習にはちょっと不向きな気がします。

 

長らく課題と思っており、その辺を解決したスマホタブレット版がヤマハから出ないかなぁ、、と待ち望んでましたが、その気配は無し。

 

諦めて、自力で解決する事にしました。

MIDIデータからカラオケ動画を作成するシステムを作りました。

作成結果は、こんな感じになります。

https://youtu.be/wiRTIuufGfA

 

 

Linux上で稼働するシステムです。

ヤマハミュージックデータショップの歌詞、コード付きMIDIデータは、ヤマハ策定のXFフォーマットに準拠しているようなので、その仕様を必死に読み取り、なんとか思い描いていた形になりました。

 

これで、この動画をスマホに詰め込んで、スタジオで練習できます!

 

折角作ったので、サービス化しました。もし、ご興味ある方は、こちらからどうぞ。

https://coconala.com/services/1826245

 

価格は応相談です。間違いなく半額にはなるので、お気軽にどうぞ。

 

※カラオケ動画には、様々な権利が関わるので、もし公開を考えている場合は、十分にご注意下さい。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Google Home :デバイスの再登録

wifiルーターを買い替えたので、Google Home環境も整理、と思っていたら不意にデバイスを削除してしまいました。

 

バイスは、デバイス側サービスと連携させるタイプでしたが、どうにも再登録が出来ない!

ググっても適切なガイドには辿り着けず、奮闘する事およそ3時間。

 

なんとか再登録できました。

難解だったポイントは、以下の2つです。

 

1.デバイスの再登録の為には、追加登録ではなく、まずサービスアカウントのリンクを解除して、新規登録する手順でデバイスを登録する。

 

2.サービスアカウントのリンク解除をGoogle Homeアプリからでは出来ず、Webから解除しなければならない場合がある。

 

この場合、Googleアカウント、セキュリティの「リンクされたアカウント」から解除できます。

f:id:omittedSounds:20210504182758p:image

 

 

通常、Google Homeアプリの「リンク済みのリスト」から解除できます。

しかし、「リンク済みのリスト」に該当サービスが表示されない、もしくは「リンク済みのリスト」すら表示されない場合があります。

 

再現テストを実施してみた所、Google Homeと連携しているデバイスが、連携しているデバイス側サービスの操作で全て削除されると、サービスアカウントのリンクは残っているのに、Google Homeアプリの「リンク済みのリスト」にサービスが表示されなくなりました。

 

但し、再現テストでは、デバイス側サービスにデバイスを再登録する事で、Google Homeのデバイスも復活してしまいました。

 

どうやら私のようなケースは滅多にない状況のようです。復旧作業で色々やり過ぎたのかもしれません。

 

という事万策尽きたら、やってみてください。

無線LANルーター : TP-LINK Deco X20ならゲストネットワークも大丈夫

在宅時間は増えました。この状況も終わるかともさ思いきや、もうしばらく続きそう。。

という事で、自宅のインターネット接続環境改善のため、wifiルーターを買い換える事にしました。

 

購入したのはWi-Fi 6対応のメッシュルーターで、比較的廉価な2バンド対応、見た目スッキリのTP-LINK Deco X20。

 

今まで愛用していたwifiルーターはBuffalo WSR-1166DHP。x20は見た目スッキリなデザインのおかげて、見える場所にも置けるので、置き場所には困りませんが、スリムなBuffaloと比べると場所を取ります。

f:id:omittedSounds:20210504111713j:image

 

 

Buffalo WSR-1166DHPをアクセスポイントモードで運用してたので、X20はブリッジモードでネットワークに接続。
インターネットアクセスルータ兼DHCPサーバはBuffalo BHR-4GRVを継続利用。 BHR-4GRVとDoco X20の間はTP-LINK TL-SG108Eで接続。

手持ちのiPhoneで、初期設定はルーターモードで設定するしかなく、その後ブリッジモードに変更する手順となりましたが、特に問題なく設定も完了。

 

導入に当たり唯一悩んだのがゲストネットワークで、Buffaloと同様にゲストネットワークとして分離されているのか、という点です。

 

調査の結果、以下の「メインネットワークと隔離」を設定をする事で問題なく分離されました。

f:id:omittedSounds:20210504105014p:image

 

まず、BuffaloはゲストSSIDに別ネットワークアドレス上のIPアドレスを割り振るのに対して、Deco x20ではメインSSIDと同じネットワークアドレス上のIPアドレスが割り振られる点を理解しておく必要があります。

 

iPhoneでのネットワーク調査で愛用してる「fing」でポートスキャンを実施し、同一ネットワークアドレスにおいて、デフォルトゲートウェイ以外、概ねアクセス出来ない事が確認できました。

概ね、というのはDecoのWeb管理用IPのhttpsポートだけは見えます。管理用と言ってもネットワーク設定状況が分かるだけで、設定変更は出来ないので、問題無さそうです。

 

検証したハードウェアのバージョンは1.2でファームは以下の通りです。

f:id:omittedSounds:20210504104055p:image

 

Wi-Fi 6は、SSID一つで複数帯域をカバーしてくれます。さらにメッシュルーター故、部屋を移動してもSSIDを変える必要はありません。

こうして一つのSSIDで我が家の全てをカバーできるようになりました。些細な違いですが、これは本当に快適です。

 

また、Wi-Fi6とはいえ基本的な技術は変わらないので、速度についてあまり期待していませんでした。ところが各所評判通り、webサイト表示のレスポンスは改善され、これは嬉しい誤算でした。

 

総じて大満足な結果となりました。

 

 

rsynth.net 始動

趣味で集めたシンセサイザをひたすら寝かせる日々が続く中、なんとか上手く、幅広く、活用できなだろうか?と色々考えた末、浮かんだアイデアを実現すべく、サイトを立ち上げました。 構想から5年、サイト立ち上げから4年の月日が過ぎ去りました。検証・実装には、予想以上の期間を要しましたが、ようやくsound libraryという一つの機能を提供できるようになりました。

sound library

シンセサイザーの全プリセット音色の試聴が可能です。

ソフトウェアシンセサイザーの興隆が鮮やかな昨今ではありますが、ハードウェアシンセサイザーも遅れる事なく進化を続けています。 進化の影で表舞台からは一歩退いたシンセサイザー達ではありますが、いずれも非常に魅力的な音色を持つ楽器です。 その魅力を実感するには実際の音を聞けるようにするのが一番と考え、この機能をリリースしました。

フレーズ再生、録音は全て自動化しています。録音結果音質のチェックも自動です。 音質チェックの結果、品質不十分と判断された録音データは登録されていません。

登録シンセサイザー

現在登録しているシンセサイザーは以下の通りです。(2021/03/29時点)

リンク

sound library

sound.rsynth.net

使い方

rsynth.net

html + JavaScript:オーディオ再生ボタンのカスタマイズ

audioタグだけでもオーディオ再生はできます。ただ、利用者の環境によって変化する事のないシンプルなUIにしたかったので、少し調べる事にしました。 結果、概ねイメージ通りの仕上がりとなりましたが、割と手間が掛かったので残して置こうかと。

audioタグは、再生機能を提供してくれるだけではなく、JavaScriptを使えばオーディオデータの状態「state」を確認したり、再生する際に所々で「event」を投げてくれるので、「state」、「event」から多様な処理を実装できます。

audioタグ

audio: 埋め込み音声要素 - HTML: HyperText Markup Language | MDN

event

audio: 埋め込み音声要素#event - HTML: HyperText Markup Language | MDN

state:

HTMLMediaElement.readyState - Web API | MDN
HTMLMediaElement.networkState - Web API | MDN

実現したかった事

  • 音量調整やシークバーは表示せず、play機能とpause機能をまとめたボタン1つのみを、UIデザインに合わせた形で配置
  • オーディオデータの読み込みは最初の一回で、再生都度の読み込みはしない

手間の掛かった所

何が面倒かというと、OSやブラウザ毎の差異です。

OSやブラウザ毎で、概ね「event」を投げるタイミングに差異はありませんでしたが、「state」に差異があった為、これを吸収する必要があります。

調べた結果(OSブラウザ差異)

audioタグのpreloadには、auto、metadata、noneの3つを設定できるのですが、この設定により各OS、ブラウザでのページ表示初期の「state」が異なります。調べた結果は下表の通りです。

audioタグ
preload
OS+ブラウザ readyState networkState
none iPhone/iPad+Safari 0:HAVE_NOTHING 1:NETWORK_IDLE
^ Windows 10+edge ^ ^
^ Windows 10+firefox ^ ^
^ Windows 10+chrome ^ ^
metadata iPhone/iPad+Safari 0:HAVE_NOTHING 2:NETWORK_LOADING
^ Windows 10+edge 1:HAVE_METADATA 1:NETWORK_IDLE
^ Windows 10+firefox ^ ^
^ Windows 10+chrome ^ ^
^ Windows 10+eclipse ^ ^
auto iPhone/iPad+Safari 4:HAVE_ENOUGH_DATA 1:NETWORK_IDLE
^ Windows 10+edge ^ ^
^ Windows 10+firefox ^ ^
^ Windows 10+chrome ^ ^
^ Windows 10+eclipse ^ ^

実装方針

環境差異がないのは「none」か「auto」ですが、「auto」はネットワーク環境による変動が想定される為、「none」で進める事にしました。 ただし、「none」の場合、eclipseのブラウザでは、JavaScriptでaudio操作が出来なくなる(仕様?)ので動作確認の際には、外部ブラウザの利用が必須です。

コード

実は、preloadを「none」に決めてしまった後は「state」を意識する事なく実装できました。

html

<audio id="sound" src="sound.mp3" preload="none">
Your browser does not support the <code>audio</code> element.
</audio>
<div class="form-group player">
<a class="btn btn-app"><i class="fas fa-circle-notch fa-spin"></i>initialize</a>
</div>

JavaScript

<script>
var sound = document.getElementById("sound");

$(
    function () {
        initSound();
    }
);

function initSound() {
    //ボタン定義
    buttonLoad  = '<a class="btn btn-app"><i class="fas fa-circle-notch fa-spin" onclick="playSound()"></i>Loading...</a>';
    buttonPlay  = '<a class="btn btn-app"><i class="fas fa-play"  onclick="playSound()"></i>Play</a>';
    buttonCont  = '<a class="btn btn-app"><i class="fas fa-play"  onclick="contSound()"></i>Continue</a>';
    buttonPause = '<a class="btn btn-app"><i class="fas fa-pause" onclick="pauseSound()"></i>Pause</a>';

    //eventリスナー設定
    sound.addEventListener("loadstart", function(){
        sound.removeEventListener('loadstart', arguments.callee);
        var divElem = document.getElementsByClassName('form-group player')[0];
        divElem.innerHTML = buttonLoad;
    }, false);

    sound.addEventListener("loadeddata", function(){
        sound.removeEventListener('loadeddata', arguments.callee);
        playSound();
    }, false);

    sound.addEventListener("play", function(){
        var divElem = document.getElementsByClassName('form-group player')[0];
        divElem.innerHTML = buttonPause;
    }, false);

    sound.addEventListener("pause", function(){
        var divElem = document.getElementsByClassName('form-group player')[0];
        if (sound.currentTime == 0){
            divElem.innerHTML = buttonPlay;
        } else {
            divElem.innerHTML = buttonCont;
        }
    }, false);

    sound.addEventListener("ended", function(){
        var divElem = document.getElementsByClassName('form-group player')[0];
        divElem.innerHTML = buttonPlay;
    }, false);

    //初期ボタン表示
    var divElem = document.getElementsByClassName('form-group player')[0];
    button = '<a class="btn btn-app"><i class="fas fa-play"  onclick="loadSound()"></i>Load + Play</a>';
    divElem.innerHTML = button;
}

//ボタン機能定義
function playSound() {
    sound.currentTime = 0;
    sound.play();
}

function contSound() {
    sound.play();
}

function stopSound() {
    sound.currentTime = 0;
    sound.pause();
}

function pauseSound() {
    sound.pause();
}

function loadSound() {
    sound.load();
}

実装結果

先日公開したrsynth.netのsound libraryとして実装しています。 sound.rsynth.net

rsynth.netについては、こちらを omittedsounds.hatenablog.com

ラックマウント型PCケース: iStarUSA D-214-MATX - 2U

PCは楽器用に用意した19インチラックに納めています。楽器が増え手狭になったので、PCケースだけ、より薄いものに交換する事にしました。

 

購入したのは、2Uサイズのもので、楽器用のラックにきっちり収まるサイズで大変気に入ってます。

f:id:omittedSounds:20201107131126j:image

iStarUSA D-214-MATX - 2U

 

同社の製品の5インチベイに3.5インチhddを3つ納められるドライブベイを、既に購入していたので、躊躇無く選択。勿論、問題無く装着出来ています。

f:id:omittedSounds:20201107131445j:image

iStarUSA BPU-230SATA-BLACK

 

このケース、非常にいいものなのですが、奥行きを抑えているので、少し注意が必要です。

 

各所レビューにある通り、内部の3.5インチベイは奥行きが狭そうです。もともと使うは予定無かったのでケーブル収納エリアになってます。

f:id:omittedSounds:20201107132013j:image

 

また、ドライブベイが大きいので、ケーブル配線の空間を確保する為に、電源は一回り小さいSFU電源にしました。SFUATXにマウントする為の鉄板を別途購入して装着しています。

f:id:omittedSounds:20201107132424j:imagef:id:omittedSounds:20201107132635j:image

 

想定外だったのは、電源付属の内部配線ケーブルが、少々短かった事。規格が違うので当然なのでしょう。後から延長ケーブルを購入しました。

 

最後にもう一つ。5インチベイを固定するネジが非常に狭い場所にあります。先の長いドライバーが必要です。

f:id:omittedSounds:20201107134144j:image

 

ここは数年前に買ったドライバーキットが、いい仕事してくれました。

f:id:omittedSounds:20201107134434j:imagef:id:omittedSounds:20201107134441j:imagef:id:omittedSounds:20201107134447j:imagef:id:omittedSounds:20201107133954j:image

精密ドライバーセット Lovten 60 in 1

 

肢の部分が黒いものは、ゴム製で歪んだ場所にも届く優れものです。残念ながら販売終了してますが、同様の製品はあるようです。

 

 

楽器用の19インチラックを持っているのであれば、ラックマウントケースでスッキリ収納できます。おすすめです。

 

2Uだと、ロープロファイルのカードしか装着出来ないので、普通の大きさのカードを入れたい場合は3Uを選びましよう。(ちよっと後悔してます。)

 

 

Folding@homeで新型コロナウィルスの解析に協力 その2

Folding@home続けてます。

解析対象の一覧に「COVID-19」が加わっていました。

f:id:omittedSounds:20200430122034p:plain

 

なるほど、4月17日に変更されてたんですね。 

https://foldingathome.org/2020/04/17/new-foldinghome-software-with-the-option-to-prioritize-covid-19-projects/

 

ここは、絞り込んでサポートしたいと思います。