前回pythonでカラオケのキー合わせをするプログラムを書きました。
今回、学習中のLaravelからこのプログラムを呼び出せるページをつくってみました。
といっても、PHPを書きなぐっただけなので、Laravelの機能はほぼ使えていません^^;
#やったこと
- PHPからpythonをコマンドラインで呼び出して、出力を取得した
- 自分の音域と歌いたい曲の音域をセレクトボックスで取得し、getで送信するようにした
#ソースコード
自分用の備忘録として。
- getで
$origkey
(自分の最高音)と$adkey
(歌いたい曲の最高音)を取得している -
exec
でローカル上でpythonを呼び出している- 出力結果は
$outpara
に格納される
- 出力結果は
- セレクトボックスは
<option>
タグにselected
を追加することによって、初期値設定をすることができる - pythonのプログラムは呼び出しを単純に行うために
public
以下に置いた- laravelの場合、ホームディレクトリ(という言い方が正しいのかはわからない)が
public
となるため
- laravelの場合、ホームディレクトリ(という言い方が正しいのかはわからない)が
- 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
セレクトボックスをいじって、'調節する'ボタンを押します。
更新されたページのURLを見ると、GETでパラメータが送信されていることが確認できます。
#改善点
- セレクトボックスがダサいので、bootstrapとか使いたい
- コードが汚すぎるので、リファクタリングする
- tableタグで横並びを実現しているのがダサすぎるので、修正する
- 音域情報を曲名やアーティストから探せるようにする
- VPSなどを借りて、公開できる状態にする
なにかプログラムミスや「こうした方がエレガントだよ!」等アドバイスがあれば、コメントにてお知らせくださいm(__)m