ラベル 02.TV-Radio log の投稿を表示しています。 すべての投稿を表示
ラベル 02.TV-Radio log の投稿を表示しています。 すべての投稿を表示

2015年11月23日月曜日

Raspberry Pi 2 で RadioShark2(その2)

Raspberry Pi 2 で RadioShark2(その1)からの続き。

libhidapiに関して検索すると、HID API for Linux, Mac OS X, and Windowsを発見した。
 #というか、日本語で書かれたページが出てこない(^^;
上記ページと、hidapi APIを見ながら、しばし後悔(^^;

サンプルプログラムも付いているのでなんとかなるだろうと、久々にviでCのソースをいじる。
 #これまた、5年以上振りだと思う(^o^;

悪戦苦闘すること数時間。
なんとかコンパイルエラーがなくなるところまできたが、linkするファイルがわからない。
以前のバージョンのshark2.cは
gcc -g -o shark2 -lhid shark2.c
でコンパイルできたが、
今回は-lhidapiではダメだった。

インストールされたパッケージ名をもう一度よく見て、-lhidapi-libusbにしたところ、
なんとかコンパイルが通った(^^;;

その後、ちょこちょこ実行時エラーを修正し、なんとかLEDの制御が出来るレベルまできたのが下記。
/* This souce code written my Michael Rolig (email: michael_rolig@alumni.macalester.edu)
* This can be considered to be in the public domain
*/

/* Modified for Radio Shark2 2007-05-11
* This source code is written by Hisaaki Shibata (email: shibata@luky.org)
* Original Shark2 controll code in Delphi is written by
* Kawabe (email: mail.kwb@gmail.com)
* This can be considered to be in the public domain.
*/

/* Modified for Radio Shark2 on Raspberry Pi 2 with hidapi.h 2015-11-22
* This source code is written by Hisaaki Shibata (email: shibata@luky.org)
* This can be considered to be in the public domain.
*/

#define DEBUG false /* Set true for copious debugging output */
#define SHARK_VENDID 0x077d /* Griffin's Vendor ID */
#define SHARK_DEVID 0x627a /* The radioSHARK2's Device ID */

#define READ_EP 0x5 /* libhidapi read command? */
#define WRITE_EP 0x5 /* libhidapi write command? */
#define SEND_PACKET_LENGTH 7 /* size of an instruction packet: shark2=7 */

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "hidapi/hidapi.h"

void usage(int argc, const char** argv) {
printf("%s <command> <arg>\n\tchange state of radioSHARK2\n\n", argv[0]);
printf("commands:\n"
" -fm <freqeuncy> : set FM frequency, e.g. '-fm 80.7'\n"
" -am <frequency> : set AM frequency, e.g. '-am 730'\n"
" -blue <intensity> : turn on blue LED (0-127) '-blue 127'\n"
" -red <0/1> : turn on/off red LED '-red 1'\n");

/* Declare variables used later */
hid_device *handle;
struct hid_device_info *devs, *cur_dev;

devs = hid_enumerate(0x0, 0x0);
cur_dev = devs;
while (cur_dev) {
printf("Device Found\n type: %04hx %04hx\n path: %s\n serial_number: %ls",
cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number);
printf("\n");
printf(" Manufacturer: %ls\n", cur_dev->manufacturer_string);
printf(" Product: %ls\n", cur_dev->product_string);
printf("\n");
cur_dev = cur_dev->next;
}
hid_free_enumeration(devs);

}

int main(int argc, const char** argv) {

/* Declare variables used later */
int ret;
hid_device *handle;
struct hid_device_info *dev;

/* Build the instruction packet to send to the shark */
unsigned char PACKET[SEND_PACKET_LENGTH] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
unsigned short encodedFreq;
float freq;
unsigned int intensity;

if (argc == 3) {
if (strcmp(argv[1], "-fm") == 0) {
/* Tune to an FM frequency */
PACKET[0] = 0x81;
encodedFreq = 0;
freq = atof(argv[2]);
encodedFreq = ((freq * 10 * 2) - 3 );
PACKET[1] = (encodedFreq >> 8) & 0xFF;
PACKET[2] = encodedFreq & 0xFF;
PACKET[3] = 0x33;
PACKET[4] = 0x04;
PACKET[5] = 0x00;
PACKET[6] = 0x28;
if (DEBUG) {
printf("band = fm\n");
printf("freq = %.1f\n", freq);
printf("encoded freq = 0x%x\n", (unsigned int)encodedFreq);
}
} else if (strcmp(argv[1], "-am") == 0) {
/* Tune to an AM frequency */
PACKET[0] = 0x81;
encodedFreq = 0;
freq = (float)atoi(argv[2]);
encodedFreq = ((unsigned short)freq * 4 ) + 16300;
PACKET[1] = (encodedFreq >> 8) & 0xFF;
PACKET[2] = encodedFreq & 0xFF;
PACKET[3] = 0xF3;
PACKET[4] = 0x36;
PACKET[5] = 0x00;
PACKET[6] = 0x24;
if (DEBUG) {
printf("band = am\n");
printf("freq = %d\n", (unsigned int)freq);
printf("encoded freq = 0x%x\n", (unsigned int)encodedFreq);
}
} else if (strcmp(argv[1], "-blue") == 0) {
/* Adjust the blue LED */
intensity = atoi(argv[2]);
PACKET[0] = 0x83;
PACKET[1] = (char)intensity;
} else if (strcmp(argv[1], "-bblue") == 0) {
/* Adjust the blue LED's pulsing rate */
intensity = atoi(argv[2]);
PACKET[0] = 0xA1;
PACKET[1] = (char)intensity;
} else if (strcmp(argv[1], "-red") == 0) {
/* Toggle the red LED */
intensity = atoi(argv[2]);
if (intensity) PACKET[0] = 0x84;
else PACKET[0] = 0x84;
PACKET[1] = (char)intensity;
} else {
/* Bad command - display the program's usage instructions */
usage(argc, argv);
exit(1);
}
} else {
usage(argc, argv);
exit(1);
}

/* Initialize the hid library */
ret = hid_init();
if (ret != 0) {
fprintf(stderr, "hid_init failed with return code %d\n", ret);
return 1;
}

/* Open the shark */
dev = hid_enumerate(SHARK_VENDID, SHARK_DEVID);
handle = hid_open(SHARK_VENDID, SHARK_DEVID, 0);
if (handle == NULL) {
fprintf(stderr, "hid_open failed with return code %d\n", handle);
return 1;
}

/* Send the instruction packet constructed above to the Shark */
ret = hid_write(handle, (char*)PACKET, SEND_PACKET_LENGTH);
if (ret == -1) fprintf(stderr, "hid_write failed with return code %d\n", ret);

/* Close the shark */
hid_close(handle);

/* Close the hid object */
hid_free_enumeration(dev);

return 0;
}

上記をshark2-hidapi.cに置いている。
 #サンプルコードからまるっともらってきたりしてゴミが残っていたり、
 #見直しも何もできていないけど(^^;

これを
gcc -g -o shark2-hidapi -lhidapi-libusb shark2-hidapi.c

でコンパイルし、
shark2-hidapi -red 1

とやると、赤いLEDが点灯した(^O^)

サウンド出力はまだ確認していないけど、、LEDが制御できたのなら、チューナーも動いているはず。

もう今日は寝る!

続く。

Raspberry Pi 2 で RadioShark2(その1)

こっそり(?)、ヤフオクでRadioShark2をもう1台手に入れた。

 #現在、El CapitanでRadioShark2が動かない(対策その1)に書いているように
 #Mac miniにRadioShark2をつないで、FM福岡を録音しているが、
 #どうせならRaspBerry Pi 2で録音できるようにしたいと考え、
 #入手したものだ。
 #今やっている録音は中断できないので、もう1台ということで(^^;;;

LinuxでRadio Shark2 (その3:一応出来た編)に書いているように、
LinuxでのRadioShark2のコントロールは、もう8年ほど前になんとかできているので、
これを使えば一発だろうと考えた(^^)。

Raspberry Pi 2の4つもあるUSB端子に入手した2台目(二代目?)RadioShark2を接続してみた。

/var/log/syslogを見ると、
 #syslogなんて、何年振りに見るだろう(^^;;;;;
Nov 23 00:40:30 hispi kernel: [53265.439196] usb 1-1.2: new full-speed USB device number 7 using dwc_otg
Nov 23 00:40:30 hispi kernel: [53265.547632] usb 1-1.2: New USB device found, idVendor=077d, idProduct=627a
Nov 23 00:40:30 hispi kernel: [53265.547650] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Nov 23 00:40:30 hispi kernel: [53265.547660] usb 1-1.2: Product: radioSHARK
Nov 23 00:40:30 hispi kernel: [53265.547671] usb 1-1.2: Manufacturer: Griffin Technology, Inc.

てな感じに、きちんと認識されている。

さすが、Linux(^^)

これは思った通り楽勝だと思い、shark2.cをコンパイルしてみようとしたが、
そもそもlibhid.hのインクルードすらできない(@_@;;

うーん、と悩んでapt-cache search libhidでそれらしいパッケージを探してみた。
root@hispi:/home/pi# apt-cache search libhid
libhidapi-dev - Multi-Platform library for communication with HID devices (development files)
libhidapi-hidraw0 - Multi-Platform library for communication with HID devices (hidraw backend)
libhidapi-hidraw0-dbg - Debugging symbols for libhidapi-hidraw0
libhidapi-libusb0 - Multi-Platform library for communication with HID devices (libusb backend)
libhidapi-libusb0-dbg - Debugging symbols for libhidapi-libusb0
libhidrd0 - runtime library for parsing and generating USB HID reports
libhidrd0-dbg - detached debugging symbols for libhidrd0
libhidrd0-dev - development files for parsing and generating USB HID reports


「これだな」ということで、apt-get install libhidapi-devを実行すると、他にもあれこれインストールされた。
関係しそうなのは下記。
root@hispi:/home/pi# apt-show-versions |grep libhid
libhidapi-dev:armhf/jessie 0.8.0~rc1+git20140201.3a66d4e+dfsg-3 uptodate
libhidapi-hidraw0:armhf/jessie 0.8.0~rc1+git20140201.3a66d4e+dfsg-3 uptodate
libhidapi-libusb0:armhf/jessie 0.8.0~rc1+git20140201.3a66d4e+dfsg-3 uptodate


さて、これでコンパイル...とやってみたが、エラーだらけ(^^;;;
これも予想していたので、/usr/include/hidapi/hidapi.hを見てみたら、
なんとがっさりhid.hと中身が変わっていた(@o@;;

うーん、続く。

2015年11月2日月曜日

El CapitanでRadioShark2が動かない(対策その2)

しかし、Audacityでは指定日時の1回分の予約は出来るものの、
RadioShark2付属ソフトのような
「毎週日曜日の14時から55分間、山下達郎のSunday Song Bookを録音」
というような設定はできないようだった。

また、Audacityは機能がいっぱいありすぎて、
「バッチファイル的に、一定時間録音して、音声ファイルを出力しておしまい」
というシンプルな用途には向いていない感じだった。

「うーん、Mac OS Xでcrontabって使えるのか?」とか、
「Audacityをコマンドラインで起動して、予約録音のパラメータを引数にできるのか?」、
「いやいや録音だけなのだから、もっとシンプルなソフトはないのか?」など
あれこれ調べていると、用途にドンピシャなナイスな(^^;ソフトを発見した。

MacFeeling Software
マックな感じのソフト達
の
QTAir(キューティーエアー)
というもの。

録音設定で音源も設定できるので、RadioShark2を入力源にすると、それだけで外部に音声が流れてきた。
 #「プレビュー音を出さない」をチェックすると、聞こえなくも出来る。
 #ちなみに、QTAirインストール直後の初期設定では「プレビュー音」がありだったので、
 #すでに登録していたSondFlower+LadioCastの音声出力とmixされて、しかも微妙に時間にディレイがあり
 #エコーがかかったような音声で聞こえた(^^;
さらに、出力ファイル形式の指定もできて、至れり尽くせり。

試しにリアルタイムで録音してみたけど、タイムスタンプ付きのファイル名が出力され
いい感じです。

予約設定は「繰り返し」に曜日指定が出来るので、まさにドンピシャ!です。
テストで5分ほど予約録音してみましたが、裏でiTunesで音楽を聴きながらでも
全く問題なく録音できていました。

せっかくFMアンテナを立てたので、RadioShark2も、もう少し使っていけそうだ。

El CapitanでRadioShark2が動かない(対策その1)

Radio Shark2を接続してFM福岡録音専用機(ちょっと嘘)としているMac Miniを
よせばいいのに下調べもせずにEl Capitanにupgradeしました。

 #これがまた、普段と同じくディスプレイを接続しないまま
 #VNC経由でupgradeして、
 #途中でどうにもならんかったりした(^^;のですが、
 #upgradeそのものは無事完了

動作確認したところ、Radio Shark2のアプリそのものは動いていて、
選局などは動くのですが、どうにも音が出ません。

 #「システム環境設定」でも「Radio Shark2」は見えていて、
 #しかもレベルメータが動いているので、音声が出ていることまで
 #Mac OS Xからも認識している感じなのですが...。

あれこれ調べると、
OS X El Capitan: Working & Not Working Apps
の"Not Working"の欄にRadio Sharkの名前が...。
しかし
RadioSHARK (app works but gets no sound from device).
Workaround: Use Audio Hijack 3.1.1 to round sound from RadioSHARK input to Line Out

という、気になる記述があった。
なんとかなるのか!?...と思いAudio Hijackというものをダウンロードして
あれこれ操作すると確かに音声が流れてきた(^^)。

しかし、Audio Hijackは有償ソフトであり、フリーのまま使うと
10分ほどでホワイトノイズがミックスされた音声出力となった。

「現在の音声が聞こえないのはEl Capitanのバグであり、そのうち直る(^^;」と考え、
購入せず(^^;にできる方法はないかとあれこれ調べてみた。

Audio Hijackと同じように、AudioFlowerというものがMac OS X上の仮想オーディオデバイスとなり、
同じようなことができそうな気配であった。

これまたAudioFlowerもEl Capitanではすんなり動かないことがNet上で報告されていたが、
SoundFlower-2.0b2.dmgというものを探し出し、Audacityでのタイマー録音も出来たし、
LadioCastというmixerソフトをつかって、ライブでのラジオ聴取も出来るようになりました\(^^)/。
 #Net上にAudioFlower Audacityで検索すると、いっぱい出てきます。

その2に続く

2011年3月22日火曜日

今日は一日”大滝詠一”三昧...堪能しました

いやぁ、堪能した。新しい発見がいっぱいあった。
今日は一日”大滝詠一”三昧

最初の2時間程度の録音失敗は痛いけど、まぁ、ほとんど聞けたから良いか。

2011年3月13日日曜日

福島第一原発1号機に関する枝野官房長記者会見

枝野官房長の記者会見をまとめると、下記かな?
・爆発は発生した。建屋内の水素に引火し、建屋が爆発した。
・東電によると、格納容器は破損していない。
・現時点では、放射性物質が大量に漏れだす状況ではない。
・外部で計測されている放射能は爆発当時よりも低く推移している。
・格納炉の破損などによる今後の被害拡大を防ぐため、海水による冷却とホウ酸水による再臨界防止を行う。

長期視点というよりも、短期的に最悪の事態になることを防ぐために、
今出来ることのベストを尽くしているんだろうなぁ。

ちょっと修正。21:06

短期的な取り組みがダメというつもりではありません。
緊急時には緊急時に適した行いがあると思うから。21:23

2011年2月26日土曜日

聖地巡礼

映画やアニメに登場した場所を訪問することを「聖地巡礼」というらしい(^^;。(若女将談)

昨年末にNHKで放映されていた「劇場版MAJOR メジャー 友情の一球」という野球アニメを見ていたら、見慣れた景色があった。
CIMG0811.JPG

通勤路である(^^;
聖地巡礼という訳ではないが、ほぼ同じあたりで写真を撮ってみた。
CIMG0930.JPG

映画のワンシーンは夕方、私が写真を撮ったのは朝方ということで、
光と陰の向きが逆なのでおもむきが若干異なるがまぎれも無くこの辺りをモチーフにしたのだろう。

映画の中でも「室見川に行ってくる」という台詞も出ていた。

2010年9月1日水曜日

ちんさやリターンズ

しまった。いつの間にか復活していた。


しかも、今度はustreamありなのか。
これは、本当にラジオというジャンルなのか?(^^;
半年以内にスポンサーついてくれないかなぁ。

2010年8月3日火曜日

夫婦ゴルフのすすめ

サブタイトルは「妻は100切り・夫は90切りに挑戦」だそうな。
我が家の場合、前者は目の前、後者は先が長いなぁ。

とりあえず、今週から始まったので、じっくり視てみようと思います。

2010年6月15日火曜日

2010年4月18日日曜日

専門力

NHKの番組から。仕事学のすすめ:専門力が仕事をひらく
うーん、良い話だ。
CIMG7483.JPG
CIMG7484.JPG

小麦相場で苦しみ抜いてその道のプロになったからこそ、経営のプロにも成れたんだろうな。


CIMG7487.JPG
自分の得意分野の土俵に上がって考えることが出来れば、
他の分野でも自信を持って話が出来ると思う。
尖った専門性は、どの分野でも刺すことが出来るのかもしれない。

2010年3月20日土曜日

Global Niche vs. 「半径500m以内でシェア100%」

商売の仕方って、色々あるんだなぁ。
全て、顧客視点なんだろうなぁ。
顧客が誰なのかって考えるのは、難しいけど楽しそうだ。

NHKの「ビジョンe」にて。

2010年3月1日月曜日

尾花流チーム再建の方程式

ヤクルトの尾花監督のチーム再建の考え方が数日前のスポーツニュースで放映されていた。

分かりやすい式である。腑に落ちる。掛け算であるところも納得できる。

これは、パクらせてもらおう(^^)。

2010年2月7日日曜日

“言語力”が危ない

2009年11月にNHKクローズアップ現代で放映された「“言語力”が危ない」を改めて視てみた。

私の周りでも思い当たる節が多いのが、何とも言えない(^^;

CIMG7118.JPG
まず、「整理」の仕方が分かっていないんだろうなぁ。
また、「考え」が無い場合は、もっと深刻な問題であるが、これは別の話かもしれない。


CIMG7121.JPG
うちの若手社員にも当てはまるのだが、若手以外にも当てはまるところが問題だなぁ。
CIMG7123.JPG
CIMG7124.JPG
説明を端折る事によって、主語と述語にアンマッチが生じている典型的な例であると思う。
これがまた、しばしば目にする例である。
CIMG7125.JPG
会話では、許される可能性があるものの、文章では許されないのが、このような「頭の中に思いついた事を口に出すように書く」例だと思う。
これも、最近目にしたばかり(^^;。
CIMG7128.JPG
CIMG7129.JPG
CIMG7131.JPG
そうなんでしょうねぇ。

2009年7月1日水曜日

国土地理院 都市圏活断層図

NHKの朝のニュースによると、本日から都市圏活断層図が公開らしいが、まだ発表資料通りのページコンテンツになっていないなぁ。


2009年2月19日木曜日

NHK 出社が楽しい経済学

どうも、うちの若手(?)で、この番組を視ているものが多いみたいだ。
わたしは、たまたま2回程度視たぐらいなんだけど。

NHK 出社が楽しい経済学

本もでているんだ。買おうかなぁ。


しかし、経済学って、その実は心理学とか生理学(本能)だなぁ...って感じますね(^^;

2009年2月15日日曜日

My Funny Valentine

今日が誕生日の悪友に電話したところ、自分の歳のカウントが間違っていることが判明した(^^;
まぁ、この歳になると1歳や2歳は誤差の範囲なのだが、それにしてもいかんなぁ。

NHK FMのJazz Tonightでは My Funny Valentine 特集をやっていた。

Miles Davisが1曲目。