3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

カラオケのキー合わせをする 〜Laravelにのっけてみた〜 <途中>

Last updated at Posted at 2016-03-04

前回pythonでカラオケのキー合わせをするプログラムを書きました。
今回、学習中のLaravelからこのプログラムを呼び出せるページをつくってみました。

といっても、PHPを書きなぐっただけなので、Laravelの機能はほぼ使えていません^^;

#やったこと

  • PHPからpythonをコマンドラインで呼び出して、出力を取得した
  • 自分の音域と歌いたい曲の音域をセレクトボックスで取得し、getで送信するようにした

#ソースコード
自分用の備忘録として。

  • getで $origkey(自分の最高音)と$adkey(歌いたい曲の最高音)を取得している
  • execでローカル上でpythonを呼び出している
    • 出力結果は$outparaに格納される
  • セレクトボックスは<option>タグにselectedを追加することによって、初期値設定をすることができる
  • pythonのプログラムは呼び出しを単純に行うために public以下に置いた
    • laravelの場合、ホームディレクトリ(という言い方が正しいのかはわからない)がpublicとなるため
  • pythonのプログラムの出力を以下の2つのみに絞った
    • type : 1オクターブ上げや1オクターブ下や原曲ママ などの情報
    • diff_key : どのくらいキーを調節すればよいのか
php.resources/views/karaoke/index.blade.php
@extends('layout')

@section('content')
    <h1>カラオケの音合せページ</h1>
<?php
if (!empty($_GET['origkey'])) {
    $origkey = $_GET['origkey'];
}else {
    $origkey = 'mid2G_s';
}
if (!empty($_GET['adkey'])) {
    $adkey = $_GET['adkey'];
}else {
    $adkey = 'hiA';
}

$oniki = ['lowF', 'lowF_s', 'lowG', 'lowG_s',
    'mid1A', 'mid1A_s', 'mid1B', 'mid1C', 'mid1C_s', 'mid1D', 'mid1D_s', 'mid1E', 'mid1F', 'mid1F_s', 'mid1G', 'mid1G_s',
    'mid2A', 'mid2A_s', 'mid2B', 'mid2C', 'mid2C_s', 'mid2D', 'mid2D_s', 'mid2E', 'mid2F', 'mid2F_s', 'mid2G', 'mid2G_s',
    'hiA', 'hiA_s', 'hiB', 'hiC', 'hiC_s', 'hiD', 'hiD_s', 'hiE', 'hiF', 'hiF_s', 'hiG', 'hiG_s',
    'hihiA', 'hihiA_s', 'hihiB'];

//フォーム作成開始
print("<table>");
print("<tr><td>");

//origkeyフォーム {{{
print("あなたの最高音");
print("<form method='get' action=''>");
print("<p>");
print("<select name='origkey'>");
foreach ($oniki as $oto) {
    if ($oto === $origkey)
        print("<option value='$oto' selected>$oto</option>");
    else 
        print("<option value='$oto'>$oto</option>");
}
print("</select>");
print("</p>");
//}}}

print("</td><td>  </td><td>");

//adkeyフォーム {{{
print("歌いたい曲の最高音");
print("<p>");
print("<select name='adkey'>");
foreach ($oniki as $oto) {
    if ($oto === $adkey)
        print("<option value='$oto' selected>$oto</option>");
    else 
        print("<option value='$oto'>$oto</option>");
}
print("</select>");
print("</p>");
//}}}

print("</td><td>  </td><td>");

//送信フォーム {{{
print("<p><input type='submit' value='調節する'></p>");
print("</form>");
//}}}

//フォーム作成終了 }}}

print("</td><td>  </td><td>");
print("</td><td>音域の参考になるサイト : <a href='http://www.music-key.com/'>音域.com</a></td><td>");

print("</td></tr></table>");

print("<hr>");
$fullpath = "python karaokeForLaravel.py $origkey $adkey";
exec($fullpath, $outpara); //コマンドラインで $fullpathの内容を実行、出力結果を $outpataへ格納

$type     = $outpara[0];
$diff_key = $outpara[1];
print("あなたの最高音   : <font size='5' color='ff0000'>$origkey</font> <br>");
print("歌いたい曲の最高音 : <font size='5' color='ff0000'>$adkey</font> <br>");

print("<font size='6'>");
print("原曲キーから <font size='7' color='ff0000'>$diff_key</font> 調節");

switch($type){
case 'Original':
    print("すると、調度良く歌えます.");
    break;
case '1OctaveUp':
    print("して<font size='7' color='ff0000'>1オクターブ上</font>で歌えば、調度良く歌えます.");
    break;
case '1OctaveDown':
    print("して<font size='7' color='ff0000'>1オクターブ下</font>で歌えば、調度良く歌えます.");
    break;
}
print("</font>");
?>
@endsection

#結果
初期ページです。
スクリーンショット 2016-03-05 3.13.43.png

セレクトボックスをいじって、'調節する'ボタンを押します。
更新されたページのURLを見ると、GETでパラメータが送信されていることが確認できます。
スクリーンショット 2016-03-05 3.14.03.png

#改善点

  • セレクトボックスがダサいので、bootstrapとか使いたい
  • コードが汚すぎるので、リファクタリングする
  • tableタグで横並びを実現しているのがダサすぎるので、修正する
  • 音域情報を曲名やアーティストから探せるようにする
  • VPSなどを借りて、公開できる状態にする

なにかプログラムミスや「こうした方がエレガントだよ!」等アドバイスがあれば、コメントにてお知らせくださいm(__)m

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?