<   2016年 09月 ( 7 )   > この月の画像一覧
 
ラズベリーパイ で音楽再生、ラジオ再生ボタン
f0021035_15101099.jpg
※91月8日24時 WAVE(MP3)が再生されないスペルミスを修正しました。

ラズベリーパイ Raspbian に Perl/TK で操作画面を表示するスクリプトを、ボタンを増やして作り直してみた。
下記を pi.pl の名前でホームディレクトリに保存する。

$ sudo chmod 755 pi.pl

↓#!/usr/bin/perl が1行めになるようにする。

#!/usr/bin/perl

use Tk;
use Encode;

## pi.pl# 改訂版 初期設定 ###################################################

my $msg = "yes"; #シャットダウン時にメセージを表示する yes/no

my $geometry = "+10+40"; #表示位置
my $minsize1 = 460; #サイズW
my $minsize2 = 140; #サイズH
my $tmGeometry = "42x3+10+210"; #gnorm-terminal サイズ/表示位置
my $pVol = "50"; #初期ボリューム
my $font = "MS ゴシック 8 bold"; #フォント

my $bt0Img = "./raspA.gif"; #aplayボタン 画像
my $bt0Bac = "#fffacd"; #aplayボタン 背景色
my $bt0ABac = "#ffff00"; #aplayボタン アクティブ背景色

my $nextTxt = "▶"; #ネクストボタン テキスト(Aplay 専用)
my $nextFont = "MS ゴシック 18 bold"; #フォント
my $nextFore = "#333333"; #ネクストボタン 文字色
my $nextAFore = "#ffffff"; #ネクストボタン アクティブ文字色

my $stopTxt = "×"; #ストップボタン テキスト(gnorm-terminal を閉じる)
my $stopFore = "#333333"; #ストップボタン 文字色
my $stopAFore = "#ffffff"; #ストップボタン アクティブ文字色
my $stopABase = "#113355"; #ストップボタン アクティブ背景色

my $swTxt = "◯"; #シャットダウン テキスト
my $swFont = "MS ゴシック 18 bold"; #シャットダウン フォント
my $swBac = "#555555"; #シャットダウン 背景色
my $swABac = "#b50008"; #シャットダウン アクティブ背景色
my $swFore = "#dddddd"; #シャットダウン 文字色
my $swAFore = "#ffffff"; #シャットダウン アクティブ文字色

my $volFore = "#333333"; #ボリューム 文字色
my $volBac = "#fff0f5"; #ボリューム 背景色
my $volABac = "#da70d6"; #ボリューム アクティブ色

my $bt1Id = "TBS"; #Radico1 ID (http://www.norikistudio.com/station-id-list)
my $bt1Txt = "TBS"; #Radico1 テキスト
my $bt1Fore = "#333333"; #Radico1 文字色
my $bt1Bac = "#40e0d0"; #Radico1 背景色
my $bt1AFore = "#dedede"; #Radico1 アクティブ文字色
my $bt1ABac = "#333333"; #Radico1 アクティブ背景色

my $bt2Id = "FMJ"; #Radico2 ID (http://www.norikistudio.com/station-id-list)
my $bt2Txt = "FMJ"; #Radico2 テキスト
my $bt2Fore = "#333333"; #Radico2 文字色
my $bt2Bac = "#87cefa"; #Radico2 背景色
my $bt2AFore = "#dedede"; #Radico2 アクティブ文字色
my $bt2ABac = "#333333"; #Radico2 アクティブ背景色

my $bt3Id = "r1"; #らじるらじる1 ID=r1:NHKラジオ第1/r2:NHKラジオ第2/fm:NHK FM
my $bt3Txt = "NHK1"; #らじるらじる1 テキスト
my $bt3Fore = "#333333"; #らじるらじる1 文字色
my $bt3Bac = "#ffd700"; #らじるらじる1 背景色
my $bt3AFore = "#dedede"; #らじるらじる1 アクティブ文字色
my $bt3ABac = "#333333"; #らじるらじる1 アクティブ背景色

my $bt4Id = "fm"; #らじるらじる2 ID=r1:NHKラジオ第1/r2:NHKラジオ第2/fm:NHK FM
my $bt4Txt = "N-FM"; #らじるらじる2 テキスト
my $bt4Fore = "#333333"; #らじるらじる2 文字色
my $bt4Bac = "#ffe4e1"; #らじるらじる2 背景色
my $bt4AFore = "#dedede"; #らじるらじる2 アクティブ文字色
my $bt4ABac = "#333333"; #らじるらじる2 アクティブ背景色

#SHOUTcastボタン
#ID アクティブ背景色 文字色 背景色 アクティブ文字色 テキスト
my $s1Id = "375467"; my $s1Ab = "#333333"; my $s1Fo = "#333333"; my $s1Ba = "#98fb98"; my $s1Af = "#dedede"; my $s1Tx = "alt";#alt.radio
my $s2Id = "102385"; my $s2Ab = "#333333"; my $s2Fo = "#333333"; my $s2Ba = "#da70d6"; my $s2Af = "#dedede"; my $s2Tx = "Smooth";#SmoothJazz.com Global Radio
my $s3Id = "777979"; my $s3Ab = "#333333"; my $s3Fo = "#333333"; my $s3Ba = "#db7093"; my $s3Af = "#dedede"; my $s3Tx = "Lounge";#The Lounge Sound
my $s4Id = "271154"; my $s4Ab = "#333333"; my $s4Fo = "#333333"; my $s4Ba = "#ffa500"; my $s4Af = "#dedede"; my $s4Tx = "ZenFM";#ZenFM (MP3)

my $s5Id = "302745"; my $s5Ab = "#333333"; my $s5Fo = "#333333"; my $s5Ba = "#c0c0c0"; my $s5Af = "#dedede"; my $s5Tx = "Black";#BlackBeats.FM
my $s6Id = "84158"; my $s6Ab = "#333333"; my $s6Fo = "#333333"; my $s6Ba = "#dda0dd"; my $s6Af = "#dedede"; my $s6Tx = "DEFJAY";#DEFJAY.COM - 100% R&B! (International)
my $s7Id = "215936"; my $s7Ab = "#333333"; my $s7Fo = "#f8f8ff"; my $s7Ba = "#dc143c"; my $s7Af = "#dedede"; my $s7Tx = "Florida";#Smooth Jazz Florida
my $s8Id = "1108330"; my $s8Ab = "#333333"; my $s8Fo = "#333333"; my $s8Ba = "#f0e68c"; my $s8Af = "#dedede"; my $s8Tx = "Casiopea";#Nonstop Casiopea

my $s9Id = "182137"; my $s9Ab = "#333333"; my $s9Fo = "#333333"; my $s9Ba = "#fff5ee"; my $s9Af = "#dedede"; my $s9Tx = "METRO";#RadioMETRO Pop Hit Dance
my $s10Id = "109563"; my $s10Ab = "#333333"; my $s10Fo = "#333333"; my $s10Ba = "#da70d6"; my $s10Af = "#dedede"; my $s10Tx = "Cafe";#Radio Cafe Romania
my $s11Id = "1074623"; my $s11Ab = "#333333"; my $s11Fo = "#333333"; my $s11Ba = "#9acd32"; my $s11Af = "#dedede"; my $s11Tx = "J-Pop";#J-Pop Powerplay
my $s12Id = "3413"; my $s12Ab = "#333333"; my $s12Fo = "#333333"; my $s12Ba = "#da70d6"; my $s12Af = "#dedede"; my $s12Tx = "70s-90s";#70s-90s J-pop Stream

my @Id = ($s1Id,$s2Id,$s3Id,$s4Id,$s5Id,$s6Id,$s7Id,$s8Id,$s9Id,$s10Id,$s11Id,$s12Id);
my @Tx = ($s1Tx,$s2Tx,$s3Tx,$s4Tx,$s5Tx,$s6Tx,$s7Tx,$s8Tx,$s9Tx,$s10Tx,$s11Tx,$s12Tx);
my @Ab = ($s1Ab,$s2Ab,$s3Ab,$s4Ab,$s5Ab,$s6Ab,$s7Ab,$s8Ab,$s9Ab,$s10Ab,$s11Ab,$s12Ab);
my @Af = ($s1Af,$s2Af,$s3Af,$s4Af,$s5Af,$s6Af,$s7Af,$s8Af,$s9Af,$s10Af,$s11Af,$s12Af);
my @Ba = ($s1Ba,$s2Ba,$s3Ba,$s4Ba,$s5Ba,$s6Ba,$s7Ba,$s8Ba,$s9Ba,$s10Ba,$s11Ba,$s12Ba);
my @Fo = ($s1Fo,$s2Fo,$s3Fo,$s4Fo,$s5Fo,$s6Fo,$s7Fo,$s8Fo,$s9Fo,$s10Fo,$s11Fo,$s12Fo);

my $padxi = 0;
my $padyi = 0;

#####################################################################

my $bTi = 0;

$mw = new MainWindow();
$mw->minsize($minsize1,$minsize2);
$mw->geometry("$geometry");

$main = $mw->Frame();
$main->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);

$mainL = $main->Frame();
$mainL->pack(
-side => "left",
);

$image = $mainL->Photo( -file => "$bt0Img" );
$bt0 = $mainL->Button(
-image => $image,
-relief => "flat",
-background => "$bt0Bac",
-activebackground => "$bt0ABac",
-padx => 0,
-pady => 0,
-command => \&Ap,
);
$bt0->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$mainL2 = $mainL->Frame();
$mainL2->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$next = $mainL2->Button(
-relief => "flat",
-text => decode("utf8", "$nextTxt"),
-font => "$nextFont",
-activeforeground => "$nextAFore",
-foreground => "$nextFore",
-background => "$bt0Bac",
-activebackground => "$bt0ABac",
-padx => 0,
-pady => 0,
-command => \&Next,
);
$next->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);

$stop = $mainL2->Button(
-relief => "flat",
-text => decode("utf8", "$stopTxt"),
-font => "$font",
-activeforeground => "$stopAFore",
-foreground => "$stopFore",
-background => "$bt0Bac",
-activebackground => "$stopABase",
-padx => 0,
-pady => 0,
-command => \&Chk,
);
$stop->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);

$mainR = $main->Frame();
$mainR->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$mainR1 = $mainR->Frame(
-padx => $padxi,
-pady => $padyi,
);
$mainR1->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);

$bt1 = $mainR1->Button(
-relief => "flat",
-text => decode("utf8", "$bt1Txt"),
-font => "$font",
-activebackground => "$bt1ABac",
-activeforeground => "$bt1AFore",
-background => "$bt1Bac",
-foreground => "$bt1Fore",
-padx => $padxi,
-pady => $padyi,
-command => \&Nr1,
);
$bt1->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$bt2 = $mainR1->Button(
-relief => "flat",
-text => decode("utf8", "$bt2Txt"),
-font => "$font",
-activebackground => "$bt2ABac",
-activeforeground => "$bt2AFore",
-background => "$bt2Bac",
-foreground => "$bt2Fore",
-padx => $padxi,
-pady => $padyi,
-command => \&Nr2,
);
$bt2->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$bt3 = $mainR1->Button(
-relief => "flat",
-text => decode("utf8", "$bt3Txt"),
-font => "$font",
-activebackground => "$bt3ABac",
-activeforeground => "$bt3AFore",
-background => "$bt3Bac",
-foreground => "$bt3Fore",
-padx => $padxi,
-pady => $padyi,
-command => \&Nr3,
);
$bt3->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$bt4 = $mainR1->Button(
-relief => "flat",
-text => decode("utf8", "$bt4Txt"),
-font => "$font",
-activebackground => "$bt4ABac",
-activeforeground => "$bt4AFore",
-background => "$bt4Bac",
-foreground => "$bt4Fore",
-padx => $padxi,
-pady => $padyi,
-command => \&Nr4,
);
$bt4->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);


for($i = 0; $i < 12; $i++){
if($i == 0||$i == 4||$i == 8){
if($i == 0){$fii = 1;}elsif($i == 4){$fii = 2;}elsif($i == 8){$fii = 3;}
$mainRs[$fii] = $mainR->Frame(
-padx => $padxi,
-pady => $padyi,
);
$mainRs[$fii]->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);
}


$sh[$i] = $mainRs[$fii]->Button(
-relief => "flat",
-text => decode("utf8", "$Tx[$i]"),
-font => "$font",
-activebackground => "$Ab[$i]",
-activeforeground => "$Af[$i]",
-background => "$Ba[$i]",
-foreground => "$Fo[$i]",
-padx => $padxi,
-pady => $padyi,
-command => [ \&Scast,$Id[$i] ],
);
$sh[$i]->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);
}

$mvol = $mw->Frame();
$mvol->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);

$sc = $mvol->Scale(
-orient => "horizontal",
-from => 0,
-to => 100,
-variable => \$vol,
-command => \&Cv,
-activebackground => "$volABac",
-background => "$volBac",
-foreground => "$volFore",
);

$sc->set($pVol);

$sc->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$sw = $mvol->Button(
-text => decode("utf8", "$swTxt"),
-font => "$swFont",
-relief => "flat",
-text => decode("utf8", "$swTxt"),
-font => "$font",
-activeforeground => "$swAFore",
-activebackground => "$swABac",
-background => "$swBac",
-foreground => "$swFore",
-padx => 0,
-pady => 0,
-command => \&Sdown,
);
$sw->pack(
-side => "left",,
);

MainLoop;

#####################################################################

sub Ap{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"perl aplay-pi.pl -def -list\"");
}

sub Chk{
if($bTi){system("killall -s HUP gnome-terminal-server"); $bTi = 0;};
#Terminal Window Close
}

sub Next{
system("killall -s HUP aplay mpg321");
}

sub Nr1{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"/home/pi/play_radiko.sh $bt1Id\""); #ID
}

sub Nr2{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"/home/pi/play_radiko.sh $bt2Id\""); #ID
}

sub Nr3{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"/home/pi/play_nhk-radio.sh $bt3Id\""); #ID
}

sub Nr4{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"/home/pi/play_nhk-radio.sh $bt4Id\""); #ID
}

sub Scast{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=$_[0]\""); #ID
}

sub Cv{
system("amixer -c 1 sset PCM $vol\%"); #ヴォリューム USB (ライン出力の場合は 1 を 0 に)
}

sub Sdown{
if($msg eq "yes"){
my $msgbox = $mw->messageBox(
-title => "really",
-icon => "question",
-type => "OkCancel",
-default => "Cancel",
-message => decode("utf8", "シャットダウン!?"),
);
if($msgbox eq 'Ok'){system("sudo shutdown -h now");}else{return;
}
}
else{system("sudo shutdown -h now");} #Stop
}

###########/home/pi/pi.pl 改訂版 ##################ここまで

f0021035_10101025.gif


[PR]
by digressive | 2016-09-18 15:22 | プアオーディオ | Comments(3)
 
raspberry pi 3 + USBメモリ型キーホルダー!
f0021035_18460864.jpg
ラズベリーパイでWAVEの音楽データのランダム再生を目指したわけだが、やはりメディアの問題がある。ここはUSBメモリがスマートであろう。容量的に問題が?と思ったら、
キーホルダータイプの 512GB USBメモリ である! ヤフオクで2,000円弱で購入した!!
512GB である!
夢のようである!!がしかし、小生は キーホルダー型の512GB大容量USBメモリだと思って、喜んで購入したわけだが、実際は

512GBのUSBメモリータイプキーホルダーであった。

さらに分かりやすく言うと、キーホルダーの形をしたゴミである。まあ、そんなもんだろう。
計画を WAVE から MP3 に変更するとして、USBメモリの正規品となると、32GBか64GBがコスパ的によかろうか、ということで、上記のキーホルダーよりも少しお安い64GBを購入した。キーホルダーと格闘したあとなので、本物のUSBメモリって、こんなに便利なのかと驚愕した!なんとも、我ながら、わかりやすいアホである。
f0021035_18460655.jpg
ドングルにしか見えないが、データがサクサクと読み書きできる・・・・あたりまえか!?

教訓-普通に使用目的のあるメディアはちゃんと買え・・・・・・・あたりまえか?

[PR]
by digressive | 2016-09-15 19:01 | すみません、取り乱しました。 | Comments(0)
 
ラズベリーパイにトラックボール?
f0021035_10375798.jpg
Arvel の”フリーボールミニ コンビ”である。ハードオフのジャンクコーナーで見つけて、トラックボール??と思って、まあ、108円だし、思い切って購入した。あまりに小汚いので昔使って残っていた、つや消しの黒のスプレーをかけている。調べてみると、やはりトラックボールではなくて、フリーボールである。いわゆるフリースクロールである。実際には、昔あったアップルのフリーボールマウスみたいに自由自在にはスクロールできなかったが、センターと右クリックを長押しで 簡易トラックボール として使えるらしい。小さいのもいい。左クリックに使われているタクトスイッチがへたっていたので、修理してみることにした。
f0021035_10375646.jpg
2本足のマウス用のタクトスイッチなど入手するのが難しそうなので、ありがちな普通の4本足を無理クリに付けたら、ボディーやパーツと干渉してしまい、ボディーやパーツをシコシコと削る羽目になってしまった。やはり、左クリックがやたらと固くなってしまったが、使えなくはない。ただ、使う度にセンターと右クリックを長押ししてトラックボールモードにしなくてはいけないのが面倒である。感度の悪いラズベリーパイの3.5インチに使えるかと思ったが、微妙である。もちろん、こちらも負けずに感度が悪い。

f0021035_10101025.gif

関連リンク

1 ラズベリーパイ 3

[PR]
by digressive | 2016-09-13 10:51 | プアオーディオ | Comments(0)
 
ラズベリーパイ Perl/TKで操作画面
f0021035_10302960.png

f0021035_09475069.png
※91月8日24時 WAVE(MP3)が再生されないスペルミスを修正しました。

ラズベリーパイ 3 B に3.5インチの表示は綺麗だが、感度のイマイチな液晶タッチパネルを付けたので、操作が楽なように大きなボタンの操作画面を Perl/TK で表示した。1のいやらしいラズベリーで、メディアとホームディレクトリ内のWAVEかMP3データを収集してランダム再生する。2のボタンで次の曲に飛ぶ。3は各ボタンの停止ボタン。その左には各インターネットラジオの再生開始ボタン。Vol はボリューム。5のボタンはラズベリーパイのシャットダウンである。下記の スクリプトに pi.pl と名前をつけてホームディレクトリ(/home/pi)に置き、

/home/pi/.profile

の一番下に、

sudo -u pi perl /home/pi/pi.pl &

と書き加えると、ログイン後にデスクトップに自動表示される。その他、使用するスクリプトなどは、

perl-tk
aplay-pi.pl
mplayer
rtmpdump
swftools
libxml2-utilsplay
radiko.sh
play_nhk-radio.sh
raspA.gif(この下のいやらしいラズベリーの画像)
f0021035_10101025.gif







が必要である。インストール方法などは、下にある弊関連ブログの関連リンクでご確認いただける。

追記
MP3再生にmpg321も必要でした・
sudo apt-get install mpg321

pi.pl

下記のスクリプトを pi.pl の名前で /home/pi (ホームディレクトリ)に保存する。
ターミナルで
$ sudo chmod 755 pi.pl

↓#!/usr/bin/perlが1行めになるようにする。

#!/usr/bin/perl

use Tk;
use Encode;

## pi.pl# 初期設定 ###################################################

my $msg = "yes"; #シャットダウン時にメセージを表示する yes/no

my $geometry = "+10+40"; #表示位置
my $minsize1 = 400; #サイズW
my $minsize2 = 140; #サイズH
my $tmGeometry = "42x3+10+210"; #gnorm-terminal サイズ/表示位置
my $pVol = "50"; #初期ボリューム
my $font = "MS ゴシック 12 bold"; #フォント

my $bt0Img = "./raspA.gif"; #aplayボタン 画像
my $bt0Bac = "#fffacd"; #aplayボタン 背景色
my $bt0ABac = "#ffff00"; #aplayボタン アクティブ背景色

my $nextTxt = "▶"; #ネクストボタン テキスト(Aplay 専用)
my $nextFont = "MS ゴシック 18 bold"; #フォント
my $nextFore = "#333333"; #ネクストボタン 文字色
my $nextAFore = "#ffffff"; #ネクストボタン アクティブ文字色

my $stopTxt = "×"; #ストップボタン テキスト(gnorm-terminal を閉じる)
my $stopFore = "#333333"; #ストップボタン 文字色
my $stopAFore = "#ffffff"; #ストップボタン アクティブ文字色
my $stopABase = "#113355"; #ストップボタン アクティブ背景色

my $bt1Id = "215936"; #SHOUTcast1 ID
my $bt1Txt = "Jazz"; #ネットラジオボタン1 テキスト
my $bt1Fore = "#333333"; #ネットラジオボタン1 文字色
my $bt1Bac = "#da70d6"; #ネットラジオボタン1 背景色
my $bt1AFore = "#dedede"; #ネットラジオボタン1 アクティブ文字色
my $bt1ABac = "#333333"; #ネットラジオボタン1 アクティブ背景色

my $bt2Id = "15560"; #SHOUTcast2 ID
my $bt2Txt = "Cool"; #ネットラジオボタン2 テキスト
my $bt2Fore = "#333333"; #ネットラジオボタン2 文字色
my $bt2Bac = "#ffa500"; #ネットラジオボタン2 背景色
my $bt2AFore = "#dedede"; #ネットラジオボタン2 アクティブ文字色
my $bt2ABac = "#333333"; #ネットラジオボタン2 アクティブ背景色

my $bt3Id = "182137"; #SHOUTcast3 ID
my $bt3Txt = "Pop"; #ネットラジオボタン3 テキスト
my $bt3Fore = "#333333"; #ネットラジオボタン3 文字色
my $bt3Bac = "#98fb98"; #ネットラジオボタン3 背景色
my $bt3AFore = "#dedede"; #ネットラジオボタン3 アクティブ文字色
my $bt3ABac = "#333333"; #ネットラジオボタン3 アクティブ背景色

my $bt4Id = "TBS"; #Radico1 ID (http://www.norikistudio.com/station-id-list)
my $bt4Txt = "TBS"; #Radico1 テキスト
my $bt4Fore = "#333333"; #Radico1 文字色
my $bt4Bac = "#40e0d0"; #Radico1 背景色
my $bt4AFore = "#dedede"; #Radico1 アクティブ文字色
my $bt4ABac = "#333333"; #Radico1 アクティブ背景色

my $bt5Id = "FMJ"; #Radico2 ID (http://www.norikistudio.com/station-id-list)
my $bt5Txt = "FMJ"; #Radico2 テキスト
my $bt5Fore = "#333333"; #Radico2 文字色
my $bt5Bac = "#87cefa"; #Radico2 背景色
my $bt5AFore = "#dedede"; #Radico2 アクティブ文字色
my $bt5ABac = "#333333"; #Radico2 アクティブ背景色

#らじるらじるの再生は、Ubuntu でテストした時は出来たのだが、小生のラズパイではエラーになった。とりあえずSHOUTcastの再生にしておいた。
#と思ったら、単純なスペルミスでした。コメントアウトを変えれば、SHOUTcastにもなります。

my $bt6Id = "r1"; #らじるらじる ID=r1:NHKラジオ第1/r2:NHKラジオ第2/fm:NHK FM
#my $bt6IdSHOUT = "1074623"; #SHOUTcast6 ID

my $bt6Txt = "NHK1"; #らじるらじる テキスト
my $bt6Fore = "#333333"; #らじるらじる 文字色
my $bt6Bac = "#ffd700"; #らじるらじる 背景色
my $bt6AFore = "#dedede"; #らじるらじる アクティブ文字色
my $bt6ABac = "#333333"; #らじるらじる アクティブ背景色

my $bt7Txt = "◯"; #シャットダウン テキスト
my $bt7Font = "MS ゴシック 18 bold"; #シャットダウン フォント
my $bt7Bac = "#555555"; #シャットダウン 背景色
my $bt7ABac = "#b50008"; #シャットダウン アクティブ背景色
my $bt7Fore = "#dddddd"; #シャットダウン 文字色
my $bt7AFore = "#ffffff"; #シャットダウン アクティブ文字色

my $volFore = "#333333"; #ボリューム 文字色
my $volBac = "#fff0f5"; #ボリューム 背景色
my $volABac = "#da70d6"; #ボリューム アクティブ色

my $padxi = 2;
my $padyi = 2;

#####################################################################

my $bTi = 0;

$mw = new MainWindow();
$mw->minsize($minsize1,$minsize2);
$mw->geometry("$geometry");

$main = $mw->Frame();
$main->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);

$mainL = $main->Frame();
$mainL->pack(
-side => "left",
);

$image = $mainL->Photo( -file => "$bt0Img" );
$bt0 = $mainL->Button(
-image => $image,
-relief => "flat",
-background => "$bt0Bac",
-activebackground => "$bt0ABac",
-padx => 0,
-pady => 0,
-command => \&Ap,
);
$bt0->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$mainL2 = $mainL->Frame();
$mainL2->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$next = $mainL2->Button(
-relief => "flat",
-text => decode("utf8", "$nextTxt"),
-font => "$nextFont",
-activeforeground => "$nextAFore",
-foreground => "$nextFore",
-background => "$bt0Bac",
-activebackground => "$bt0ABac",
-padx => 0,
-pady => 0,
-command => \&Next,
);
$next->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);

$stop = $mainL2->Button(
-relief => "flat",
-text => decode("utf8", "$stopTxt"),
-font => "$font",
-activeforeground => "$stopAFore",
-foreground => "$stopFore",
-background => "$bt0Bac",
-activebackground => "$stopABase",
-padx => 0,
-pady => 0,
-command => \&Chk,
);
$stop->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);

$mainR = $main->Frame();
$mainR->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$mainR1 = $mainR->Frame(
-padx => $padxi,
-pady => $padyi,
);
$mainR1->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);

$bt1 = $mainR1->Button(
-relief => "flat",
-text => decode("utf8", "$bt1Txt"),
-font => "$font",
-activebackground => "$bt1ABac",
-activeforeground => "$bt1AFore",
-background => "$bt1Bac",
-foreground => "$bt1Fore",
-padx => $padxi,
-pady => $padyi,
-command => \&Nr1,
);
$bt1->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$bt2 = $mainR1->Button(
-relief => "flat",
-text => decode("utf8", "$bt2Txt"),
-font => "$font",
-activebackground => "$bt2ABac",
-activeforeground => "$bt2AFore",
-background => "$bt2Bac",
-foreground => "$bt2Fore",
-padx => $padxi,
-pady => $padyi,
-command => \&Nr2,
);
$bt2->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$bt3 = $mainR1->Button(
-relief => "flat",
-text => decode("utf8", "$bt3Txt"),
-font => "$font",
-activebackground => "$bt3ABac",
-activeforeground => "$bt3AFore",
-background => "$bt3Bac",
-foreground => "$bt3Fore",
-padx => $padxi,
-pady => $padyi,
-command => \&Nr3,
);
$bt3->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$mainR2 = $mainR->Frame(
-padx => $padxi,
-pady => $padyi,
);
$mainR2->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);

$bt4 = $mainR2->Button(
-relief => "flat",
-text => decode("utf8", "$bt4Txt"),
-font => "$font",
-activebackground => "$bt4ABac",
-activeforeground => "$bt4AFore",
-background => "$bt4Bac",
-foreground => "$bt4Fore",
-padx => $padxi,
-pady => $padyi,
-command => \&Nr4,
);
$bt4->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$bt5 = $mainR2->Button(
-relief => "flat",
-text => decode("utf8", "$bt5Txt"),
-font => "$font",
-activebackground => "$bt5ABac",
-activeforeground => "$bt5AFore",
-background => "$bt5Bac",
-foreground => "$bt5Fore",
-padx => $padxi,
-pady => $padyi,
-command => \&Nr5,
);
$bt5->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$bt6 = $mainR2->Button(
-relief => "flat",
-text => decode("utf8", "$bt6Txt"),
-font => "$font",
-activebackground => "$bt6ABac",
-activeforeground => "$bt6AFore",
-background => "$bt6Bac",
-foreground => "$bt6Fore",
-padx => $padxi,
-pady => $padyi,
-command => \&Nr6,
);
$bt6->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$mvol = $mw->Frame();
$mvol->pack(
-side => "top",
-fill => "both",
-expand => "yes",
);

$sc = $mvol->Scale(
-orient => "horizontal",
-from => 0,
-to => 100,
-variable => \$vol,
-command => \&Cv,
-activebackground => "$volABac",
-background => "$volBac",
-foreground => "$volFore",
);

$sc->set($pVol);

$sc->pack(
-side => "left",
-fill => "both",
-expand => "yes",
);

$bt7 = $mvol->Button(
-text => decode("utf8", "$bt7Txt"),
-font => "$bt7Font",
-relief => "flat",
-text => decode("utf8", "$bt7Txt"),
-font => "$font",
-activeforeground => "$bt7AFore",
-activebackground => "$bt7ABac",
-background => "$bt7Bac",
-foreground => "$bt7Fore",
-padx => 0,
-pady => 0,
-command => \&Sw,
);
$bt7->pack(
-side => "left",
# -fill => "both",
# -expand => "yes",
);

MainLoop;

#####################################################################

sub Ap{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"perl aplay-pi.pl -def -list\"");
}

sub Nr1{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=$bt1Id\""); #ID
}

sub Nr2{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=$bt2Id\""); #ID
}

sub Nr3{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=$bt3Id\""); #ID
}

sub Nr4{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"/home/pi/play_radiko.sh $bt4Id\""); #ID
}

sub Nr5{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"/home/pi/play_radiko.sh $bt5Id\""); #ID
}

sub Nr6{
if($bt6Id){
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"/home/pi/play_nhk-radio.sh $bt6Id\""); #ID
}else{
&Chk;
$bTi = 8;
system("gnome-terminal --geometry=$tmGeometry -e \"mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=$bt6IdSHOUT\""); #ID
}
}


sub Cv{
system("amixer -c 1 sset PCM $vol\%"); #ヴォリューム USB (ライン出力の場合は 1 を 0 に)
}

sub Sw{
if($msg eq "yes"){
my $msgbox = $mw->messageBox(
-title => "really",
-icon => "question",
-type => "OkCancel",
-default => "Cancel",
-message => decode("utf8", "シャットダウン!?"),
);
if($msgbox eq 'Ok'){system("sudo shutdown -h now");}else{return;
}
}
else{system("sudo shutdown -h now");} #Stop
}

sub Chk{
if($bTi){system("killall -s HUP gnome-terminal-server"); $bTi = 0;};
#Terminal Window Close
}

sub Next{
system("killall -s HUP aplay mpg321");
}

###########/home/pi/pi.pl##################ここまで

f0021035_10101025.gif
関連リンク

1 ラズベリーパイ 3
5 ラズベリーパイ Perl/TKで操作画面

[PR]
by digressive | 2016-09-13 10:21 | プアオーディオ | Comments(0)
 
ラズベリーパイで WAVEランダム再生
f0021035_12382091.gif
ラズパイのraspbianでWAVEファイルをランダム再生するperlスクリプトである。
下記をテキストファイルに保存して、aplay-pi.pl と名前をつけ、ホームディレクトリ(/home/pi)に置く。エンコードは utf8 でお願いする。

※9月13日に、pi.plに合わせて一部変更しています。pi.plと併用の際は新しいのを使ってください。

※12月10日 USBDACにひかかってメディアが開けないのを修正しました
(修正前)opendir(IN,$ndir) or die "opendir $dir エラー : $!";
(修正後)opendir(IN,$ndir) or return";

↓1行めが #!/usr/bin/perl になるようにする。

#!/usr/bin/perl

$player = "aplay";

## 使用プレーヤーを変更
#$player = "mpg321"; #mpg321でmpg3ファイル再生したい場合、コメントアウト(#)を取る。

## -def オプションで再生したいフォルダー。ほぼ必須。
$defaulturl = "/media/pi";

## 追加フォルダー。ここに書き込んだフォルダー内の該当音楽ファイルは必ず再生されます。
$defaulturls = "/home/pi";

$max = 0; #再生曲数 0で無制限

if($player eq "mpg321"){@type = (".mp3");}else{@type = (".wav",".wave");}
$dir = "./";
$udir = "0";
$list = 0;
$alist = 0;
$noran = 0;
$down = 0;


if ($ARGV[0]){
foreach $_ (@ARGV){

if($_ =~ /\-dir\=/i){
$_ =~ s/\-dir\=//; $dir = $_;
$udir = 8;
}

if($_ =~ /\-max\=/i){$_ =~ s/\-max\=//; $max = $_;}

if($_ =~ /\-def/i){$dir = "$defaulturl"; $udir = 88;}

if($_ =~ /\-list/i){$list = 8;}
if($_ =~ /\-alist/i){$alist = 8;}
if($_ =~ /\-noran/i){$noran = 8;}
if($_ =~ /\-down/i){$down = 8;}
}
}
else{
$dir = "./";
if($player eq "mpg321"){@type = (".mp3");}else{@type = (".wav",".wave");}
}

if($player eq "mpg321"){@type = (".mp3");}else{@type = (".wav",".wave");}
&getlist($dir);
if($defaulturls ne ""){&getlist($defaulturls);}


print "\n********************************************\n";
print "aplay-pi.pl は aplay でのランダム演奏用です。\n";
print "(初期設定の使用プレーヤー変更でmp3も可)\n";
print "ex: perl aplay.pl -alist -list -dir=./sound\n";
print "------------------------------------------------\n";
print "-def (設定したデフォルト\"" . $defaulturl . "\"を再生)\n";
print "-alist (再生一覧リストを表示)\n";
print "-list (再生リストを表示)\n";
print "-noran (ランダム再生しない)\n";
print "-down (逆順に再生)\n";
print "-dir=URL (URLのフォルダー内を演奏)\n";
print "-max=数字 (最大演奏回数、無指定で無制限)\n";
print "演奏中 次の局 Ctrl + C\n";
print "演奏中 中止 Ctrl + Z\n\n";


if($noran){@new = @files; print "\**NORANDOM**\n\n";}
elsif($down){@new = sort {$b cmp $a} @files; print "\**DOWN**\n\n";}
else{
foreach (@files){
my $r = rand @new+1;
push(@new, $new[$r]);
$new[$r] = $_;
}
print "\**RANDOM**\n\n";
}

if($alist){
$listii = 0; print "再生予定リスト\n------------------------------------------------\n";

foreach (@new){
$listii ++;
$wlists = $_;
$wlists =~ s/$defaulturl\//\//g;
$wlists =~ s/$defaulturls\//\//g;
if($player eq "mpg321"){$wlists =~ s/\.mp3//ig;}else{$wlists =~ s/\.wa.+//ig;}
print "$listii*$wlists\n";
if($listii == $max){last;}}

print "------------------------------------------------\n\n\n";
}

$listi = 0;
foreach (@new){
$listi ++;

$lists = " \"$_\"";

if($list){
$wlists = $_;
$wlists =~ s/$defaulturl\//\//g;
$wlists =~ s/$defaulturls\//\//g;
if($player eq "mpg321"){$wlists =~ s/\.mp3//ig;}else{$wlists =~ s/\.wa.+//ig;}
}

#if($list){print "------------------------------------------------\n\n";}

if($player eq "mpg321"){
if($lists){system("mpg321 $lists");}
else{print "--NoFile--\n\n";}
}
else{
if($list){print "NowPlay$listii*$wlists\n";}
if($lists){system("aplay -q $lists");}
else{print "--NoFile--\n\n";}
}

if($listi == $max){last;}
}

exit;
#-----------------------------------------------------------------------

sub getlist{
my $ndir = $_[0];
my @get;

#opendir(IN,$ndir) or die "opendir $dir エラー : $!";
opendir(IN,$ndir) or return;

@get = readdir IN;
closedir(IN);

foreach $files (@get){
next if $files =~ /^\.\.$/;
next if $files =~ /^\.$/;


foreach (@type) {
if($files =~ /$_$/i){
if($ndir =~ /^\.\/.+/i){push @files, "$ndir" . "/$files";}
elsif($udir){$ndir =~ s/\/$//i; push @files, "$ndir" . "/$files";}
else{push @files, "$files";}
}
}


if($ndir =~ /^\.\/.+/i){$nndir = $ndir . "/$files";}
elsif($udir){$ndir =~ s/\/$//i; $nndir = "$ndir" . "/$files";}
else{$nndir = $ndir . "$files";}

#print "$nndir\n";#TEST用
if(-d $nndir){&getlist($nndir);}
}

}

############################## ここまで

使用例

コマンドで

$ play-pi.pl -def -list

などで、ホームディレクトリとデバイスにあるWAVE(かMP3)を検索してランダム再生する。


[PR]
by digressive | 2016-09-08 22:35 | プアオーディオ | Comments(0)
 
ラズベリーパイでラジオ
f0021035_12382091.gif
Perl/TK で操作パネルを作るとして、ラジオの聞ける環境を準備しなければいけない。


などを参考にして準備した。

Raspberry pi でネットラジオの準備

諸々はMplayer で聞けるらしい。インストールする。

$ sudo apt-get install mplayer
$ sudo apt-get install rtmpdump swftools libxml2-utils

radiico、らじる らじるには専用のスクリプトがある。
play_radiko.sh、play_nhk-radio.sh を GitHub から入手する。

全て /home/pi に置き、パーミッションをつけ、エラーが面倒なのであらかじめ一時保存ファイルを作っておく。

$ sudo chmod 755 play_radiko.sh
$ sudo chmod 755 play_nhk-radio.sh
$ mkdir /home/pi/radio
$ sudo chmod 777 radio

再生のテスト

インターネットラジオは mplayer で ID を入力して聞ける。ID は SHOUTcast のホームペジで探す。

f0021035_21444653.jpg
矢印のところにカーソルを持っていくと、下にIDが表示されるので、メモする!
コマンドで再生してみる

$ mplayer -cache 700 -playlist 'http://yp.shoutcast.com/sbin/tunein-station.pls?id=xxxxx

radiko はコマンドで play_radiko.sh に放送局を指定する。IDは ノリキスタジオdcc-jpl.com などで調べられる。

$ play_radiko.sh TBS

らじるらじるは、play_nhk-radio.sh にID(r1: NHKラジオ第1/r2: NHKラジオ第2/fm: NHK FM)で、

$ play_nhk-radio.sh r1

と、端末でテストしてみる。

他には、小生謹製の aplay-pi.pl を使って、WAVE や MP3 をランダム再生する。
MP3 の再生には MPG321 も使用する。

$ sudo apt-get install mpg321

aplay-pi.pl の初期設定で aplay で WAVE か、MPG321 で MP3 か設定するようにしている。

## 使用プレーヤーを変更
#$player = "mpg321"; #mpg321でmpg3ファイル再生したい場合、コメントアウト(#)を取る。

で、タブン大丈夫だと思う。MP3ファイルをあまり使わないので、テストしていないが、そのうちテストして、不備があれば直しておくかもしれない?


[PR]
by digressive | 2016-09-08 22:21 | プアオーディオ | Comments(0)
 
ラズベリーパイに Perl/TK
f0021035_20482625.png
Raspberry Pi 3 をオーディオ的に使うには、やはり Volume と i2s の DAC との組み合わせがポピュラーだが、どうも再生に他のPCを立ち上げるのではラズベリーパイの面白さを半減する気がするので、3.5インチの安物のモニターを購入したが、感度の悪いタッチパネルをなんとか使うにはと考えた末に、使い道のよくわからない Perl/TK が使えるのではないかと思いつき、インストールしてみた。

sudo apt-get install perl-tk

上記は、小生の Raspbian ではうまくいかなかったので、CPANからインストールした。

cpan> install Bundle::CPAN
cpan> reload cpan
cpan> install YAML::Tiny
cpan> install Tk

ラズベリーパイを起動して、ログインした画面にデーモン小暮として Perl/TK による操作画面を表示するには、

/home/pi/.profile

の下の方に Perl/TK のスクリプトファイル( pi.pl )を起動するように記述する。

sudo -u pi perl /home/pi/pi.pl &

これで、テスト用の pi.pl を書き直せば起動してログインした画面に操作画面が現れる予定である。音楽のランダム再生や、Raspbian ならではのネットラジオ再生などをワンタッチ化したい。


testスクリプト例

#!/usr/bin/perl

use Tk;
use strict;
use warnings;

my $mw = new MainWindow;
$mw->title( 'Hello' );

$mw->Label( -text => 'Hello World' )->pack;
$mw->Button( -text => "Done", -command => sub { exit } )->pack;

MainLoop;



[PR]
by digressive | 2016-09-05 21:56 | プアオーディオ | Comments(3)
 



人間は、考える足である。
by ラーメン
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
カテゴリ
リンク

おやつ会

人との交流が人を育てます。


ホームページ作成
WEBデザイン(Perl PHP MySQL)
グラフィックデザイン
CI 各種印刷物 広告 SP
はじめました。

■□■□■□






RandomReading《読書記録》
通勤電車が私の書斎さ。
■□■□■□






WEBカラーネーム

WEBカラーチャート

「もう一つの日本」
どう展開するのか、見えませんが楽しみです。

放射NO! 防御プロジェクト
フェイスブック発、自分の身は自分で守ろう

植草一秀の『知られざる真実』
頑張れミラーマン

世に倦む日々
無料版です

奥の横道(写真)
携帯で写真を撮りだすとクセになる。

マニア・マニア
何が彼らをそこまで駆り立てるのか?

天木直人.com
多少偏向していそうだが、
文春よりは参考になる


きっこのブログ
謎のブログ、リンクしていいのかな?

とりまきメモ
ブログというより、日記帳ですね。

LINK MEMO
小生の勝手なリンク集


小金井市の地域SNSです
WEB デザイン モリ のページもあります。

アメブロもよろしく。

pixiv

twitterフォロー ミー

上のボタンが好きな背景色で作れます


青空文庫


お気に入りブログ
ライフログ
以前の記事
2017年 06月
2017年 05月
2017年 04月
2017年 03月
2017年 02月
2017年 01月
2016年 12月
2016年 10月
2016年 09月
2016年 08月
2016年 06月
2016年 04月
2016年 03月
2016年 02月
2016年 01月
2015年 12月
2015年 11月
2015年 10月
2015年 09月
2015年 08月
2015年 07月
2015年 06月
2015年 05月
2015年 04月
2015年 03月
2015年 02月
2015年 01月
2014年 12月
2014年 11月
2014年 10月
2014年 09月
2014年 08月
2014年 07月
2014年 06月
2014年 05月
2014年 04月
2014年 03月
2014年 02月
2014年 01月
2013年 12月
2013年 11月
2013年 10月
2013年 09月
2013年 08月
2013年 07月
2013年 06月
2013年 05月
2013年 04月
2013年 02月
2013年 01月
2012年 12月
2012年 11月
2012年 10月
2012年 09月
2012年 08月
2012年 07月
2012年 06月
2012年 05月
2012年 04月
2012年 03月
2012年 02月
2012年 01月
2011年 12月
2011年 11月
2011年 10月
2011年 09月
2011年 08月
2011年 07月
2011年 06月
2011年 05月
2011年 04月
2011年 03月
2011年 02月
2011年 01月
2010年 12月
2010年 11月
2010年 10月
2010年 08月
2010年 07月
2010年 06月
2010年 05月
2010年 04月
2010年 03月
2010年 02月
2010年 01月
2009年 12月
2009年 11月
2009年 10月
2009年 09月
2009年 08月
2009年 07月
2009年 06月
2009年 05月
2009年 04月
2009年 03月
2009年 02月
2009年 01月
2008年 12月
2008年 11月
2008年 10月
2008年 09月
2008年 08月
2008年 06月
2008年 05月
2008年 04月
2008年 03月
2008年 02月
2008年 01月
2007年 12月
2007年 11月
2007年 10月
2007年 09月
2007年 08月
2007年 07月
2007年 06月
2007年 05月
2007年 04月
2007年 03月
2007年 02月
2007年 01月
2006年 12月
2006年 11月
2006年 10月
2006年 09月
2006年 08月
最新のコメント
GoogleのAPIで叩..
by かえる at 16:27
たいていのブログに準備さ..
by digressive at 22:48
つまり、グーグル(全体の..
by かえる at 10:39
ワードからgoogleの..
by digressive at 19:06
googleの検索フォー..
by digressive at 18:59
これは...グーグル指定..
by かえる at 11:14
仕事でやらされたこともあ..
by digressive at 22:52
もしや、スカイプやってま..
by かえる at 15:19
プア派としては、100均..
by digressive at 22:11
ことしの夏には、グーグル..
by かえる at 11:20
最新のトラックバック
Macの音楽をオーディオ..
from ちょっとOldなMacの話
グランベリーモール町田
from アウトレットモール・パーク【..
「セオリー」アウトレット
from 町田アウトレット【グランベリ..
アロワナ
from アロワナ
進行中の環境問題
from バナナペーパー!?環境問題を..
バナナが地球を救う。
from バナナが紙に!?そんなバナナ..
インクジェットプリンター..
from ネット専用商社 特選館
【携帯】 アップルの「i..
from 【究極の宗教】Physica..
お得なえびの高原温泉に関..
from 宮崎エリアnavi
TOEIC勉強法
from TOEIC勉強法
検索
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧