2014年2月26日水曜日

音の事

最近スピーカーで個人的に革命が起きたのでふーん程度で流していたところを少しぐぐり直してみた。


先ず、音の形式について
「wav」が無圧縮音源。詰まる所最高音質である。ただし容量は大きい。
「mp3」不要な音を削いでいき聴ける音質の範囲内で圧縮。基本的に128kbps程度で大体wavの1/10程度の容量。ビットレートのkbpsが大きいほど音質が良い。
位にしか思ってませんでした。

それで、良い音を聴くには?という事から考えて順を追う。
「音の録音⇒データ化⇒出力」基本的流れはこうである。

------
■一番良い音データは?その1(高音質=元の音に近い)

今までの一般的な流れだと
「CD⇒PCで取り込む(wav)⇒PCで圧縮(mp3)」

順番で言えばCDで聞けば最高にも思えるがどうやら再生機器による影響もあるにしてもリアルタイムでの再生の場合(一般人的に恐らくききとれないレベルの些細な音飛びやノイズの)エラーの修正は効かない。
では、音が悪いの?と言われるとそうではなくどちらかと言えばより音を良く聴く方法がある。

それはデータ化する事である。「読み込むときにその些細なエラーとかはどうした?」となりますがwavにする際にCDには訂正用のデータがありリッピングする場合情報を修正して書き込むようになっている。結果的にCDから直接音を聴くよりもwavで聴いたほうがより元の音源に近い。

------

さて、頭に「今までの一般的な流れだと」と書いたが現在はさらに音質を求める事が出来る。
何かと言えばハイレゾである。
上で書いた一つ手前で実は分岐がある。
「レコーディング・ミックス・マスタリング」したものをどのように人に届けるかである。

・一般CD(CDマスター音源)はマスタリング時点ではビット深度が「24bit」の音源をCDに書き込むがCDの規格の仕様上「16bit」で圧縮される。

・ハイレゾ(スタジオマスター音源)はマスタリング時点では「24bitの音源をそのまま」ネット等で配信している。無論データ配信で無圧縮音源でだから形式はwavである。

つまりハイレゾはCDでは販売されておらず大容量ゆえにデータ配信が現状一般的のようである。
違いはbit数で、この16bitと24bitでどれほど変わるかというとCD音源より3~6倍程度の音の表現幅の違いある。

------

要約しよう。 CD音源であるならばリッピングしてwavで聴くのが最も良い。 ハイレゾでのwavがあるならそちらの方がCDのwavより数倍音が良い(元の音源により近い)。
※良くわからない人が勘違いしては困るのはあくまでも元データwavで有る事。たとえばmp3などのすでに圧縮したデータをwavに変換したからと言って音が良くなるわけではない。
------
■一番良い音データは?その2(一般的な圧縮音は?)
さて、ただまぁ上で話したのは一般的ではない。 だってwav大きいし普通はmp3などに圧縮している事だろう。 まぁ一般的に普及してそうなのは「wmv mp3 m4a ogg」あたりだろうか?
・mp3 mp3は昔から普及しており大抵はこの形式ではないだろうか。携帯プレイヤーなどでも複数のフォーマットに対応しつつもmp3プレイヤーと言った名称になる場合も多く音の圧縮形式の代名詞ともいえる。
・m4a(aac) m4aはmp3の後続のような形式でしばらく普及していなかったイメージですが最近ではApple社製品のiTunesやipodにより光が当たり一気に普及した感じです。 mp3形式よりも1.4倍ほど圧縮率が高く、サンプリング周波数も、mp3が48KHzまでだったのに対し、AACは最大96KHzまでをサポート。
・wma(Windows Media Audio) Microsoft社が開発したWindows標準の音声圧縮形式。Windows Media Playerでエンコードできるため使っている人もいるかもしれない。ただmp3と違い汎用性に欠けたため個人であえてwmaで保存している人は少ない気がする。
・ogg(ogg) oggはMP3コーデックが特許ライセンス問題でひと悶着しているときに流行っていた気がする。 現状では拡張子はogなんちゃらと分けられているようで拡張子のoggは互換用に残っている。 圧縮は同ビットレートならmp3より高かった気がするが最近あまり見ない気がする。
大まかにはこんなところだと思います。 細かいところはwikiや別のサイトで調べてください。
------

それで結局何が良いの?と言う話になるのだけれど正直好きな形式でよいと思います。 でもPC内のプレイヤーや機器の対応を考えればmp3が無難です。 ただmp3の後継にあたるm4aの方が圧縮率高く良く最近の普及率も合わせてお勧め。
ビットレートが128kbpsが音質的に最低限とされており、どれも320前後から恐らく一般的には耳を凝らしてもほぼわからない気がします。満足できんって人はそもそも圧縮せずにwavでどうぞ。
------

要約するとmp3が最も普及していて無難で、最近だとm4aだと。
それでそのビットレートって何?

簡単に言えば1秒間にどれほどの情報があるかです。 128kbpsが音質的に最低ラインとして320kbps前後でほぼわからないと言いましたがちなみにCDはじゃぁどれくらいなのかと言えば1411.2kbpsです。 おいおいじゃあハイレゾってどんだけなの?と言われると9216kbpsです。
故に・・・正直音楽が好き過ぎる人たちを除けばハイレゾはそんなに良い気はしない。 聴き取れる気がしない。・・・これは音だけが原因ではない再生機器の問題もある。



------
ビットレートの計算方法は
ビットレート = (ビット深度)×(サンプリング周波数)×(チャンネル数)
となります。

上記の数値は「サンプリング周波数 44.1kHz、ビット深度 16ビット、2チャンネル(ステレオ)」
16×44100×2 = 1411200 ビット/秒 = 1411.2 kbps
------

エンコードするときに固定ビットレートと可変ビットレートってのがあるんだけどどっちが良いの?

固定ビットレート
固定値でエンコードするので容量がほぼ一定に保てます。
音楽データに対してよさそうな利点はその程度で、複雑なデータほど必要な場所にデータを取れず、その上不要な場所にまでデータ領域を使うので良いことがありません。

可変ビットレート
固定とは逆に、容量にバラつきが出てしまいますが必要な場所に必要なだけデータを割り振るので音質はこちらのほうが良くなります。

となるので、可変が良いです。

------
データを劣化しないで圧縮できる音楽形式はないの?

ある!あえて一旦おいていたけれど有名な所でflacである。 大抵はOggコンテナに格納され「Ogg FLAC」と呼ばれます。ハイレゾもこのflacかwavで大抵配信されていてflacの方が(元の音質に戻せる状態で)圧縮されているので(wavよりはだいぶ)軽い。ついでに楽曲のタイトル・アーティスト等メタデータ、ジャケット写真などをファイル内に埋め込み可能。

一応同じ音になるはずですが再生する際のデコードで音が変化するするという意見もあります。なので、途中でも書きましたがとにかく良い音で聴きたいという人はwavでどうぞ。
------

■一番良い音を聴くには?
さて、上でもちらっと書いたけれど音データが良いだけではいけない。 そもそもこの記事を書くにあたって何もなければ書く予定なんてなかったのだから。
そう、再生機器である。元の音がどれだけ良くても再生機器がしょぼくてはそもそも音が潰れて全然聴こえないのです。
少し前の記事でスピーカーは「JBLPEBBLESWHTJN」を買いましたよと書きましたが本当に別物でした。 記事にも書いていますがもともと千円もしない安物で聴いていたせいが大きいとしても今まで聞いていた音はなんだったのか・・・。 おかげでヘッドホンまで買ったのは完全に誤算です。そのあと携帯プレイヤーも安物からウォークマンへと変更へ。
ただ、プレイヤーを変更したりしたものの革命には至りませんでした。ポタアンことポータブルヘッドフォンアンプも試し聴きに行ったのですがこれまた革命には至りませんでした。 基本的に再生機器にはお金をかけた方が世界が変わるとしても個人的にはさらに求めるほど耳が良いわけではないようです。



と、言うわけで話がバッサリ切れる感じになるのですが、機器については音データと違い好みや構成や方式によって上が天井知らずなので語りません。




2014年2月14日金曜日

FizzBuzz for VBS

講座用に適当な課題さがしをしていたら「Fizz Buzz」なるものがあったのでやってみた。
自分のツイートを見た限り取り敢えず動くのを出すのに15分の間があったけども実際はもうちょこっと早いかな?
実行はCscriptです。そのまま実行すると100回ポップアップしますので注意。


たしか初回コードがこれ。ルールをまんま処理した感じですね

For i = 1 To 100
    s=""
    if i mod 3 = 0 then s = "Fizz"
    if i mod 5 = 0 then s = s & "Buzz"
    if s="" then s=i
    wsh.echo s
Next  


出来た11分後に3・5倍数は15でいいと気づくが何とも・・・。


整理したのがこれ

for i=1 to 100
s="FizzBuzz":if i mod 15 then s="Fizz":if i mod 3 then s="Buzz":if i mod 5 then s=i
wsh.echo s
next

modで余剰を出していますが「余剰値=0」の比較記述は入れていません。
過去の記事でも軽く触れていますがif内処理は数値で言えば0がfalseとnot0がtrueと言った感じで処理できます。
処理順はツイートした通りです。




一行版はこれ

for i=1 to 100:s="FizzBuzz":do while i mod 15:s="Fizz":do while i mod 3:s="Buzz":do while i mod 5:s=i:exit do:loop:exit do:loop:exit do:loop:wsh.echo s:next

まぁ私のソースだとちょくちょくあるソースですがかなりおすすめしません。見ずらいですからね。
こっちは140字にまとまらなかったのでツイートしていないので少し説明。基本的には上と同じです。


ネストはこうなります。

for i=1 to 100
    s="FizzBuzz"
    do while i mod 15
        s="Fizz"
        do while i mod 3
            s="Buzz"
            do while i mod 5
                s=i
                exit do
            loop
            exit do
        loop
        exit do
    loop
    wsh.echo s
next

do whileもif同様0はfalseと同じように処理されます。
15で割れない、3で割れない、5で割れないとネストが深くなり最終的に割れなければループカウンタを格納します。


猫でもわかるスクリプティング

略して猫スク。
いやなんというかただのネタで、元々猫耳スクール水着を描こうとかそういう話だったはずなのだが・・・サイトのエイプリルフールかなんかのネタ用に少しまともに文章を作ろうかななんて・・・。

Windowsを使っている人」で「プログラムはコンパイラ導入から諦めた」方や良くわからないけどなんとなくロジカルというかプログラミング的思考の仕方をかじってみたい人向け。
※上級者お断り。訂正、中級者もきっと知ってる事しか無いのでお断り。圧倒的初心者向け。
※一番大切な前提【作業は全て自己責任です


さて、言語選択ですが「Windows Script Host(以後WSH)」より「VBscript(以後VBS)」を扱います。
WSHにはほかに「Jscript」がありますがVBSの方が圧倒的に習得が楽です。
詳細はこちら⇒「Clinick's Clinic on Scripting #1: VBScript それとも JScript?

まぁ、今後はWSHは廃れ「Windows PowerShell」に変わっていく気はしますが、標準搭載windows7からですし、まだ使える言語で記述自体はVBAなんかにも流用できますしね。


■よくある質問

Q.何かインストールする必要はありますか?
A.ありません。windowsに標準で搭載されている言語です(マックの人はさよなら)

Q.何かソフトを使いますか?
A.しいて言えばwindows標準搭載のメモ帳を使います。

Q.スクリプトってプログラムと何が違うの?
A.若干区分けし辛い言語もありますが大枠はコンパイルが必要なのがプログラムで必要ないのがスクリプトです。



さて、前置き終了。


ステップ1:表示 - msgbox
先ずは、メモ帳を開いてください。以下のように記述します。

msgbox "はろーわーるど"

記述できたら「名前を付けて保存」を選びファイル名「*.txt」を「ねこすく.vbs」(ファイル名はなんでもいいですが拡張子はvbs)にして保存してください。
保存したファイルをダブルクリックしてください。すると「はろーわーるど」と表示されたOKしか押せないポップアップボックスが出るはずです。OKを押せば終了します。

おめでとう、これであなたもスクリプトマスター!
は、流石に早いですがこのステップでは「msgbox後のダブルクォーテーションで囲んだ文字が表示される」とだけ理解すればよいです。




Q.メモ帳を閉じてしまいました!もう一度編集するにはどうすればいいですか??
A.保存したファイルを右クリックして「編集(E)」を選択してください


ステップ2:変数
変数はデータを一時的に格納する紙切れみたいなものです。先ほどの内容を以下のように書き直します。

abc="はろーわーるど"
msgbox abc

これを上書き保存してもう一度実行してみてください。先ほどと同じ動作をしますね?
コードの内容を見て既に理解できる人もいるでしょうが説明します。
「abc」は変数で「はろーわーるど」と言う文字を代入しました。
コードの通り「=」の右側の値を左の変数に一時的に保存させる事ができます。

処理を追ってみましょう。
──────────────────────────────
先ず変数abcに文字が代入されます。
abc="はろーわーるど"
msgbox abc

abcは今後文字と同じように扱われるので、一行目が処理されるとこうなります
"はろーわーるど"="はろーわーるど"
msgbox abc

次の二行目もabcは代入した文字ですので二行目はこのように処理されます。
すると結果的にステップ1で記述したコードと同じになる事が解ります。
"はろーわーるど"="はろーわーるど"
msgbox "はろーわーるど"
──────────────────────────────
Q.「abcはなんでabcなの?」
A.「今回は変数名をabcにしましたが変数名は基本なんでも構いません今回は適当につけましたaでもbでもaaaでもなんでもOK」

・・・何でも良いですが命名規則はあります。MSDNより抜粋となりますが命名規則は以下の通り。
・変数名の先頭文字は、アルファベットであること。
・変数名には、ピリオドを使用しないこと。
・変数名は、255 文字以内 であること。
・変数宣言を行った適用範囲内で同じ変数名を複数使用しないこと。
・変数名には関数名と同じ名前を使用しない事。

このステップで覚える必要があるのは「変数名は好きなようにつけてよい、変数に好きなデータを代入できる」です。


ステップ3:コメント
そろそろコード中にメモ書きしたくなってきました。コメントとはコード中に書いても無害な情報の記入です。主に注釈などに使います。vbsでは「' (シングルクォート)」より後ろがコメントになります。

'↓abcに文字列を代入
abc="はろーわーるど"

'↓abcの中身を表示
msgbox abc

このステップで覚えるのは「『' (シングルクォート)』より後ろがコメント」です。


ステップ4:ユーザ入力

さて、こんどはユーザに値をいれてもらい表示してみましょう。
'↓abcにユーザが入れた文字を代入
abc=inputbox("文字を入れてください")

'↓abcの中身を表示
msgbox abc


実行させると入力ダイアログがでますね(その時の文字列「"文字を入れてください"」は書き換えれば任意に変更できます)
そして入れた値は変数abcに格納されて最後にメッセージボックスに渡されて表示されて処理を終了します。

このステップで覚えるのは「『変数=inputbox("文字いれて")』を使うと文字を入力できて変数に代入できる」です


ステップ5:条件分岐 - if

ついに来ましたメインステップ!言語の処理において何より大切なのがこの条件分岐です。
条件分岐は

 「条件1の場合」
 「条件1ではなく条件2の場合」xN
 「上記条件以外の場合」

の三種類しかありません。
'↓abcにユーザが入れた文字を代入
abc=inputbox("文字を入れてください")

'↓abcの中身をを比較
if abc="a" then
    msgbox "a が入力されました"
elseif abc="b" then
    msgbox "b が入力されました"
elseif abc="あ" then
    msgbox "あ が入力されました"
else
    msgbox "どれにも一致しない"
end if

さて、実行してみると入力した結果と文字を比較しているそれぞれの結果がでるだろう。
「if abc="a" then」これは入力した文字列と"a"が一致しているか比較している。

つまり割り当てられている場所をそれぞれ日本語に訳していくと
if abc = "a" then
もし 変数abc が同じか 文字列"a"と そうならば

ただ、これだと日本語的に見ずらいのでもう少し塊で訳すとこうなる
if abc = "a" then
もし 変数abcと文字列"a"が同じ ならば
こうなる

さて、ステップ2の変数代入では
abc="はろーわーるど"
この様に何もないところで「A=B」と書いた場合はAに対してBが代入される(上記例では変数abcに対して文字列"はろーわーるど"が格納される)事を説明したが

if abc="はろーわーるど" then
「if 条件 then」の「条件」部分で=を使用した場合比較処理(上記例では変数abcと文字列"はろーわるど"が一致するか)になる事がわかっただろう。

比較処理は「A=B(AとBが同じか)」の他にもにも色々あるのだが、取り敢えずは逆である「A<>B」でAとB一致しない場合を覚えよう。

以下のように書き換える
'↓abcにユーザが入れた文字を代入
abc=inputbox("文字を入れてください")

'↓abcの中身をを比較
if abc<>"あいう" then
    msgbox "あいう 以外が入力されました"
else
    msgbox "あいう が入力されました"
end if
実行すると「あいう」という文字を入力しない場合「それ以外が入力されました」と出る。
elseはその条件に満たない場合なので「あいうと一致しない」以外の場合とはつまり「あいう」なので「あいうが入力されました」と決め打ちしている。

さて、ではここでのまとめ。
基本記述は以下のようになり

if 条件1 then
    処理1
elseif 条件2 then
    処理2
else
    処理3
end if

ifの条件部分において「=(等号)」は代入ではなく比較の記号(演算子)として扱われる事
elseifは追加していくらでも条件と処理を追加できる事
一致するは「=」で一致しないは「<>」を使う事
elseはどの条件にも一致しない場合の処理を追加できる事

を、このステップではひとまず覚えてください。

ステップ6:繰り返し処理 - for

主な用途は「回数制限のある」繰り返し処理に使います。
ループカウンタ用の変数を必要とするのでそのカウントアップ(又はカウントダウン)される変数を使う場合が多いです。


for i = 0 to 5
    msgbox i
next
さて、実行してみましょう。0~5が表示されたかと思います。
for~nextの間に書かれている部分が繰り返し処理される内容です。

for i = 0 to 5
一行目のこれは処理を繰り返しながら変数「 i 」に0~5を代入します。という意味です。
結果、一周目のiは0でmsgboxで0が表示され、二回目のループではiが1になる為1が表示・・・となり、それが5まで繰り返されます。

また、途中で抜ける場合は「exit for」を使います。

for i = 0 to 5
    msgbox i
    if i =3 then
        exit for
    end if
next

このようにすればifで変数iが3と同じになった瞬間に処理を終了させたりできます。

このステップで覚えるのは「
『for ~ next』の間が繰り返し処理される事
ループ回数は一行目『for 変数=A to B』で変数がA~Bの間処理される事
『exit for』で途中でforを終了できる事
」です


ステップ7:繰り返し処理 - do loop while

forと違い、主な用途は条件を満たしている間(又は条件を満たすまでの間)処理を続ける為に使います。

i=""
do while i=""
    i=inputbox("文字を入力すると終了します")
loop
さて、実行してみましょう。文字を何か入力するまで終了できないinputboxの出来上がりです。
do~loopの間に書かれている部分が繰り返し処理される内容です。

do while i=""
一行目のwhileは「~である間」と言う意味で、上記の場合条件が『i=""』なので『変数「 i 」が空である間処理する』という事になります。

今度は指定の文字を入れるまで実行するように書き換えてみます。
while条件の指定を下記のように後ろに変更することができます。
do
    i=inputbox("end と入力すると終了します")
loop while i<>"end"
さて、実行してみましょう「end」を入力しないと処理を終了できないinputboxの出来上がりです。

先ほど違い一行目のdoに対して条件が無いため無条件でループに突入します。
ですが今度はloopの後に条件を指定している為その条件を満たさない限りdoの位置から処理が繰り返されます。

途中で抜ける場合は「exit do」を使います。
do
    i=inputbox("end と入力すると終了します")
    if i="end" then
        exit do
    end if
loop
こんどはwhileを抜きました。そうする事で無条件無限ループになります。
代わりにdo loop内のif文で「end」が入力されたら「exit do」で終了する記述をしました。

ここではexit doの効果を見るためにwhileを抜きましたが基本的には「while 条件」を指定しておくことを推奨します。そうしないと簡単に無限ループに陥る為です。

このステップで覚えるのは「
『do ~ loop』の間が繰り返し処理される事
ループ条件は『while 条件』で指定した「条件」の間処理される事
条件を満たしている間処理したい場合doの後に、満たすまで処理したい場合loopの後にwhile文を書く事
『exit do』で途中でdo loopを終了できる事
」です


Q.無限ループに陥りました助けてください!
A.タスクマネージャーを開き「wscript.exe」を選択し「プロセスの終了(E)」押してください。

Q.「開かれているプログラムが~システムが不安定になる可能性が~」とかでて怖いです!
A.「メッセージ内容が『'wscript.exe'を終了しますか?』ならそれであっています」


ステップ8:配列変数

配列はひとカテゴリを同じ変数名で扱いたい場合に利用します。
と言ってもい解りずらいでしょう。

たとえば「佐藤」「鈴木」「田中」という文字を表示したい場合
sato="佐藤"
suzu="鈴木"
tana="田中"
msgbox sato
msgbox suzu
msgbox tana
とこのような感じになりますがこれを
user=array("佐藤","鈴木","田中")
msgbox user(0)
msgbox user(1)
msgbox user(2)
先ずは実行してみてください。名前を全員分表示できます。

array()の括弧内で「,(カンマ)」で区切る事で複数のデータを格納する事が出来ます。
また、利用するときは代入した変数名の最後に「変数(数値)」で取り出すことができます。
注意するのは配列で扱われる最初の要素は0からなので三つ代入した場合は0と1と2に値が格納されています。

配列変数にいくつの配列要素が格納されているかを確認するには「ubound」を利用します。
user=array("佐藤","鈴木","田中")
msgbox ubound(user)
実行してみましょう。ここでは2が表示されます。配列の要素数なのでデータがいくつ含まれているかと考えた場合0と1と2に格納されているという事なので3つのデータが含まれている事が解ります。

配列を使うことでコードも短くなります。
たとえば先ほどの単純列挙も下記のようにすると
user=array("佐藤","鈴木","田中")

for i = 0 to ubound(user)
    msgbox user(i)
next
実行するとわかりますが、「user」に入っている情報を連続で取り出すことができます。まぁ三人程度だと対してわかりにくいですがarrayのデータ100とか1000とかになってもforの三行でデータを取り出すことができます。

事前に配列を宣言しておく事も可能です
dim user(2)

msgbox ubound(user)
実行してみましょう。配列の要素を事前に領域を確保できたのが解ります。
毎回「array(データ,データ,データ,データ,データ,データ,データ,データ,データ,データ,データ)」みたいに一行で書くのは可読性が良くありません

先ほどは連続したデータを表示に使っていましたが今度は連続で代入してみましょう
'配列を0~10の11個分の領域を確保
dim con(10)

'0~10までの数値をconに代入
for i = 0 to ubound(con)
    con(i)=i
next

'ためしに適当な所を表示
msgbox con(3)
実行してみましょう。配列を宣言してその要素すべてに数値を格納し最後に格納されているか表示しています。
もちろん要素も数値も0から順番にデータを格納したので表示されるのは3になります。
今回は単純に数値を格納しましたが別の配列を格納したりも可能です。






ステップ9:関数

関数とは処理をまとめて一つにしておくことができます。
VBSではsubとfunctionの二種類が存在します。
まずはsubを使い違いは戻値のステップで説明します。

'関数を呼ぶ
test

'関数内容
sub test
    msgbox "関数が実行されました"
end sub



sub 関数名
処理
endsub


ステップ10:関数 - 引数

'関数を呼ぶ
test "でーた"

'関数内容
sub test(val)
    msgbox val
end sub


sub 関数名(引数)
処理
endsub


ステップ11:関数 - 戻値

'関数を呼ぶ
msgbox test2("でーた")

'関数内容
function test2(val)
    test2= val & "データ"
end function



ステップXX:課題!

※ゲームの仕様を調べるのも課題です。

・50までの「Fizz Buzz」
 ヒント:割り切れるかどうか

・数値を入力させてそれがうるう年かを算出しよう
 ヒント:条件さえわかればきっと簡単

・0~9までの数値を一つずつ使い10ケタのランダムの数値を作りそれを0からソート
 ヒント:ひとまずバブルから
 応用:バブルより早く並べるには?

・素数を100までの素数を列挙しよう。
 ヒント:素数の条件は何?
 応用:高速化できそうなら

・じゃんけんする処理を考えてみよう
 ヒント:相手の手がばらけるなら方法は問わない

・石取りゲームの処理を考えてみよう
 ヒント:常に最善手とは?(あとランダムいれればゲーム性がますかもね)

・数当てゲームの処理を考えてみよう
 ヒント:大きいか小さいかで詰めて同じなら終了

・1~9(3x3マス)の転置行列
 ヒント:二次配列必須






わかる人だけ、もしくはもっと詳しくなりたい方。動作の理解を優先させるために一部省いた箇所等。

表示は「wsh.echo」じゃないの?
結果を表示させる方法として「msgbox」を使いましたが「wsh.echo」を使った方が「Cscript」でも文字を流せて楽です。wsh.echoを説明するにはwscriptオブジェクト、echoメソッドなど説明が必要になるので省略しました。同様に途中終了させる場合のquitメソッド等他のメソッドも省略しています。

forのstepは?
ひとまず覚える必要がないので省略しています。

for eachは?
コレクション列挙はVB系特有のものなので省略しています。

あれ?「createobject」は?
VBAと違いVBSではcreateobjectを使わないと便利な事はほとんど何もできません。ですがこれまたオブジェクトの説明になるためここでは省略しています。



※答えるかはわからないし、内容を変更するかもわかりませんが
「ここがわかんなーい」や「初心者にはこのステップの前にこれを教えた方が」等あれば

黒い野良猫ツイッターへどうぞ:https://twitter.com/black_stray_cat
内容が疑問が長文になる場合は使い捨てオンラインメモ帳が便利です:http://notepad.cc/


2014年2月10日月曜日

思考

この前のツイートそのまままとめ時系列順

2014年2月9日日曜日

そういえば

そういえば、USBスピーカーとヘッドホンをつなぐ様になって再生デバイスを切り替える事が多くなりました。
流石に毎回タスクトレイのスピーカーを右クリックして再生デバイス切り替えは面倒ですね。
と、言うわけでスクリプト化。
まぁ非表示で動かすような事は出来なかったので動作は汚いです。
コンパネのサウンドを呼びだしsendkeysで無理やり選択させています。
nについては切り替えるデバイスが何番目にあるかです。


if wsh.Arguments.count then n=wsh.Arguments(0) else if msgbox("スピーカーにする?",vbyesno)=vbyes then n=1 else n=4
with CreateObject("WScript.Shell"):.Run"control mmsys.cpl":do:wsh.Sleep(100):loop while not .AppActivate("サウンド"):wsh.sleep 500:.SendKeys"{DOWN "& n &"}%{s}{TAB 3}{ENTER}":end with


まぁ、わかる人だけ使ってください。拡張子はvbsです。
そのままだとyesnoで選択で、引数がある場合その引数の分だけ移動してデバイスを選択します。
batファイルから呼んでもいいですがそれよりもショートカットに引数を付けると楽ですよ。

一応wmiで生きてるデバイスだけ選ぶようなのにしたかったんですがぱっとみ「http://www.wmifun.net/library/win32_sounddevice.html」それらしい方法が見つからなかったのであきらめました。


基本的にわかる人だけ使ってもらえばいいと思っていますが、良くわからない場合ツイッターでリプライでもくれればもしかしたら反応があるかもしれません。

スピーカーとヘッドホン

買っちゃいました。

スピーカーは「JBLPEBBLESWHTJN」です。
元は「BSPKMA01BKA」っていうバッファローの安物のスピーカーを使っていたんですが店頭でデザインに惹かれて購入してしまいました。

本当はPC背面のコード数を減らすためにワイヤレススピーカーを買おうと思っていたんですがまぁほらUSB接続でAC電源分コード一本は減りますし良いかなと思って。

音についてですがかなり良いです。
と言っても元のスピーカーが安物なので比較するまでもなくそりゃそうなんですけども「あれ?こんなに変わるの??」と思うぐらいいい感じでした。
もともと絵関係以外であんまり出費したくない人でしたが大満足です。

値段についてはこれだけ音がでて五千円台なのはコスパはいいのではないのでしょうか?まぁ音については無頓着な私の意見では参考になるかはわかりませんが・・・。

デザインについては頭にも書きましたが個人的にはとても良いです。基本的にデザイン買いでして結果的に音も良かったみたいな感じですw
丸くてワンポイントでオレンジのラインも可愛いというかカッコいいなーと思います。
 それと店頭で触ってみて音量変更のつまみ(?にあたる部分)が内側についていましてこうなんというかターンテーブルのような感じなのも機能的デザインで非常によかったです。
 このスピーカー横置きで使うことも想定されていて側面のオレンジ色の場所がインシュレータになっていてそこらへんも機能美ですね。
 ただこの音量調整の回転部分は右手側の内側にあるので右手で腕をひねって回す(もしくは手を置いて親指で回すとか)感じになるので横置きしてそれこそターンテーブルのように回した方が使いやすいです。
まぁでも元々オレンジラインがいいなぁと思って購入したので私は立たせて使っています。

他に機能美としてはコードを足に巻く事ができ、先っぽのジャックとUSB部分を溝に嵌める構造も良いです。
左手側スピーカーですが入力ジャックがあってそこから外部入力できます。音はジャック側が優先されます。
残念なのは入力ジャックがあるけどヘッドホンのジャックが無いのが個人的には非常に残念です。
 もう一つ物凄く個人的で残念な所があってスピーカー同士をつなぐケーブルが「Cintiq 24HD」をまたぐにはほんとあと少しだけってくらいに長さが足りませんでした。まぁこんな事で困る人は限られすぎるのであれなんですけどもオレンジのオーディオケーブルがほんとどこにもないんですよねコードだけ単品で買えないかなぁ・・・。



さて、続いてヘッドホンは「M1BO/00」を購入しました。

購入してから「JBL PEBBLES」にはヘッドホン刺す所がない事に気づきましたがまぁさしたる問題ではない・・・ないですorz

携帯プレイヤーで使う分には長さは十分ですがPCで使う人はスピーカーにジャックがない場合コードが短いです。
そして、先ほども書きましたがオレンジ色の延長オーディオケーブルホントどっかに売ってないかなぁ・・・。

さて、気を取り直してこれもほぼほぼデザイン買いです。ただまぁ「JBL PEBBLES」と違って若干値段が張ります。「JBL PEBBLES」の音が良かっただけに少しいいものが欲しくなってしまい。

音ですが上にも書いてますが基本音に無頓着な私が百均のイヤホンでもいいやと思っていた私ですのでもうなんか音が別物でした・・・はい。
なんか聴こえてなかった音が普通に聴こえておおおってなりました。ただまぁこれも先ほどと同じで比較もとが悪すぎてなんとも言えませんが・・・。

装着感は結構きつめですが耳当てが柔らかいので長時間聴いても大丈夫かなぁ、それと大きさとしては案外小さいと感じました。
遮音性・音漏れは殆どない感じです。まぁ音量上げ過ぎた場合は知りませんけど・・・。

デザインについては・・・まぁそのために購入したので良いです。コードがオレンジ色でワンポイントで這う感じ結構良いですね。ヘッドホン側はオレンジで編み編みしてあるのと内側がオレンジ色です。箱の下にヘッドホンをしまうためのポーチが付いてくるのですがそれも手触りも良くデザインもシンプルで良かったです。



ついでに不要なものの整理をしていたのですが『充電式ワイヤレスホリパッド3 』が見つかりました。
 ホールド機能は良かったんですがたぶん一か月くらいでダメになったので破棄かな。完全放電したのかなんなのかUSBを指しても反応しないし充電もできません。あと最初数日使えていた時はスリープモードが猛烈に邪魔でした。
 3580円・・・いやまぁサポートに問い合わせても良かったんですが直ぐに使いたかったので駄目だなと思った日で新しいコントローラーを購入したからもういいかなと。






次に購入したのが『CYBER・アナログ連射コントローラ3(PS3用)』です。まず、無線は駄目だとイメージから有線で有る事、ぼっちプレイ前提だったので連射機能がある事、あとゲームにお金をあまり使いたく時でしたからさらに安いこれにしましたお値段2230円。
 ケーブル3.5mと近い時は非常に邪魔ですが離れたときはやはり有線だとこれくらいは必要ですね。
LRのボタンが後ろにへこんでいるため輪ゴム固定が楽でした。