信助さんのオーディオ

いい音で音楽を聴きたい

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

Afplayはターミナルから手入力した方が音が良い

2010-05-31 16:43:02 | オーディオ
色々やって分かったことは、iTunesからAfplayDropletに曲を送って再生した音は。ターミナルから手入力でAfplayを再生した音にかなわないと言うこと。iTunesを立ち上げることが悪いのかなと思い、Finderから曲を選択するようなAutomatorアプリを作ったが、それも音が悪かった。同じAfplayを呼び出すのでもターミナルからでないと音が良くないと言うこと。理由はよく分からない。

追記: Muse Lab toolも同様にTerminalからの音にかなわなかった。

いろいろやっかいなことがあって、まず、AfplayDropletで一度再生すると、ターミナルからの音も悪くなってしまう。再起動すると元に戻る。

さらに、ターミネーターに手入力でたくさんの曲を入れていくと、どんどん音が悪くなる。一度に入れられる命令の数も限られていて、全曲分のデータを入力できるようなアルバムは限られる。

したがって、アルバム全曲分のデータを一曲にまとめて、それをターミネーターで再生させるようにするのが良いのかもしれない。前、アップルスクリプトで一曲にまとめるプログラムを作ったが、Snow Leopardでは動かないし、データを保存すると音が悪くなった。うーん。八方ふさがり。
ジャンル:
ウェブログ
コメント (38)   この記事についてブログを書く
この記事をはてなブックマークに追加
« Afplayの再生で分かったこと ... | トップ | Stanton H4SV2は金属製だった »
最近の画像もっと見る

38 コメント

コメント日が  古い順  |   新しい順
Unknown (RE3noRE)
2010-05-31 18:29:34
手入力の方がよいのですか。難しいですね。

どうしてもファイルを一つにまとめたければxldでリッピングしたらどうでしょうか。
「一つのファイル(+cUE)として保存する」 を選択して下さい。

今やってみたら
/usr/bin/afplay -q 1 の後にコマンドラインにD&dで再生できました。お試しあれ。

XLDの所在↓ Macで現在一番正確なリッピングができるものだそうです。

http://tmkk.hp.infoseek.co.jp/xld/

ターミナルのコマンドは単語登録に登録しておけば簡単に処理できます。
Unknown (232)
2010-05-31 21:18:19
はじめまして。
2chのスレで cat "$f" > /dev/null 入れるといいかも、と発言したものです。
Automatorや、Applescript と組み合わせると音が悪くなるみたいですね。

やはりターミナルで全部やった方がいいのかもしれません。
AfplayDropret は中身はただのシェルスクリプトなので、
スクリプトをテキストエディタにコピーすれば、簡単にターミナルで使えます。
以下手順です。
1 スクリプトをテキストエディタにコピペ。一行目に #!/bin/sh を書き加えます。
2 afplayshell.sh みたいな名前を付けてHomeディレクトリに保存。
3 ターミナルを開いて、
chmod 755 afplayshell.sh
とコマンド入力して、スクリプトを実行形式にします。
4 ./afplayshell.sh
の後にファイルをドロップ(複数でも可、ただしフォルダは駄目)して、リターン
で再生を開始します。

これでどうでしょうか?
これで駄目なら最終手段として、GUI自体黙らせるしかないですね。
「mac consoleログイン」で検索して見つかる方法で、consoleログインして下さい。
完全なCUIの世界です。GUIでいろいろやっていたのが馬鹿らしくなるほどの
音がします。
Unknown (信助)
2010-06-01 08:52:48
RE3noREさん、XLDで取り込んだファイルを再生できました。ありがとうございます。
Unknown (信助)
2010-06-01 09:04:44
232さん、はじめまして。
私のブログで番号を間違えて書いていました。すいません。

ターミナルからの再生をトライしてみたのですが、動きませんでした。以下のファイルを作ってafplayshell.sh (標準テキスト, 拡張子はsh)で保存して、
chmod 755 afplayshell.shと入力したのですが、何も起きず、./afplayshell.shとは表示されませんでした。chmod 755の後ろにafplayshell.sh以外のファイル名を入力すると、ファイルがないと言ってくるので、ファイルの指定はうまくいっていると思います。私の方法が間違っていると思うのですが、どこが間違っているか分かりますでしょうか?

#!/bin/sh
for f in "$@"
do
cat "$f" > /dev/null
/usr/bin/afplay -q 1 "$f"
done
Unknown (Unknown)
2010-06-01 09:25:52
>AfplayDropletで一度再生すると、ターミナルからの音も悪くなって・・・

一度再生するとキャッシュメモリにデータが残るのでキャッシュメモリを
クリアしないと同じ音が出ます。

>一度に入れられる命令の数も限られていて、

このあたりはシェルをcshに変えると解決します。
Unknown (信助)
2010-06-01 11:07:37
mac consoleログインで再生してみました。これは凄い。今まで、歪んだ音を聞いていたんだと言うことが分かりますね。これを聞いてしまうと、CUIで行きたくなりますね。問題は、Goldberg Variationsの32曲をどうやって入力するかです(泣)。
Unknown (信助)
2010-06-01 11:12:56
Unknownさん

たぶん、再生方法が違っても、同じ曲の再生であればデータは同じはずなので、悪い音のデータがキャッシュに残っていると言うわけではないと思います。

なぜか分からないですが、たくさん命令を書き込むと音が悪くなります。おそらく、cshでも同じことが起きる気がします。
Unknown (Unknown)
2010-06-01 11:35:12
信助さん

音質の件は解りませんが、cshのばあいは一度に命令を送っても
一行ずつしか処理しないので、命令が入らなかったりエラーがでたり
ということはなくなると思います。

音を良くする方法としては、曲名を取得せずに「Audiofile1」とかの
名前のままにしておいて、その音楽ファイルが
あるディレクトリに
CDして、そこでafplayを動かすのが最良です。
Unknown (Unknown)
2010-06-01 11:45:10
信助さん

あと、Macの場合は「↑」キーで直前のコマンドをリピートできるので
上記のようなファイル名で再生してリピートし、数字だけ入れ替えれば
何曲目を再生するのも手軽にできます。
Unknown (232)
2010-06-01 13:22:49
説明が足りずすみません。
手順4の ./afplayshell.sh は自分で入力します。
以後このスクリプトを使いたい時は、./afplayshell.sh で呼び出します。
(最初の ./ は「現在のディレクトリ」という意味なので、
./afplayshell.sh は「現在のディレクトリにある afplayshell.sh という
スクリプトを実行する」という意味になります。
なので、ホームディレクトリ以外の場所で実行したい場合は、
~/afplayshell.sh 「ホームディレクトリにある afplayshell.sh を実行」
とします。 )
ターミナルではtabキーによる、ファイル名の補完が行なわれるので、
./af ぐらいまで打ったところで、tabキーを入力すると、
./afplayshell.sh と即座に補完されるはずです。

ディレクトリ単位で再生したい場合は、シェルスクリプトを改造すれば良いです。
スクリプトの
for f in "$@" を
for f in "$1"/*
に書き換えて、別名(ここでは dirafplayshell.sh とします)で保存して下さい。
chmod 755 dirafplayshell.sh で実行形式にするのを忘れないように。
あとは、例えば Goldberg Variations というフォルダを GUI で、ホームディレクトリ
に移動しておいてから、CUIに移り、
./dir(tabキーで補完)Gold (tabキーで補完)
としてやれば、
./dirafplayshell.sh Goldberg\ Variations
と入力されて、全曲再生できます。

CUI は慣れないと大変ですが、書籍やWeb上のシェル入門の最初の方を見ながら
小一時間もいじっていれば、ファイルを見つけて再生できるようにすぐになると思います。
Unknown (T・B・)
2010-06-02 00:03:55
はじめまして。AfplayDroplet -q 1ファンです。iTunesとの連携ソフトはわずかに曇り気味ですが、オリジナルは優れものだと思いますが・・・、まあいろいろ試してみます。
Unknown (信助)
2010-06-02 13:45:57
232さん

親切に教えて下さりありがとうございます。ばっちりです。ターミナルでもコンソールでも動きました。夜遅くになってしまったので、音のチェックは、メインのMacBook+Yoshii9ではなくて、MacPro+ヘッドホンHD 595で行いました。ターミナルの場合、本当に、本当に、本当に、もの凄く小さな差ですが、afplay手入力で一曲再生した場合の方が、232さんの連続再生プログラムよりも良かった気がしました。しかし、コンソールからですと、さらに差が小さくなった気がしました。ブラインドだとこの差は分からないかもしれません。私としては大満足です。これを音楽再生に使わせていただきたいと思います。本当にありがとうございます。

フォルダからの再生は本当に助かります。フォルダの何番目の曲から再生という形に出来ると、すごく使い勝手が良いと思うので、私の出来るスピードでプログラムをモディファイして見ようかと思っています。しかし、私がやるとかなり時間がかかってしまいますので、もし簡単に出来るようでしたらモディファイしていただけませんでしょうか?

例えば、5曲目からですと、./dirafplayshell.sh -n 5 Goldberg\ Variationsの様な感じ。

• -nの指定がなかった時は、n=1
• n=0やn>曲数の場合は停止

みたいな感じで。

T・B・さん
ブログへの書き込み以外にも、いくつかソフトの音質のついての情報を頂いています。私の感想としては、使っているシステム(OSやオーディオ)でソフトの評価が全く変わってくるようです。私の使った範囲での感想ですので、あまり気にしない方が良いと思います。色々、選択肢が増えてきましたので、皆さんが一番好みの音のソフトを使えばいいと思います。AfplayDroplet -q 1も試してみたのですが、私としては232さんのソフトをコンソールで使いたいなと思いました。
Unknown (信助)
2010-06-02 13:48:59
Unknownさん

「↑」キー、便利ですね。使わせていただきます。
Unknown (T・B・)
2010-06-02 21:19:19
おっしゃる通りでした。選択肢が増えるのはとても良いことです。それでは、私はAfplayDroplet -q 1で頑張ってみたいと思います。ありがとうございます。
Unknown (Unknown)
2010-06-02 22:28:08
信助さん

キャッシュに送る場合には、パイプを使うよりも事前に送っておいてから再生したほうが
良いと思います。

一行のコマンドは、できるだけシンプルなほうがいい音がでます。
Unknown (信助)
2010-06-03 10:49:19
今日、メインのシステム(Macbook>>>Yoshii9)で聞いてみたのですが、232さんの方法で連続再生するよりも、コンソールから手入力で一曲再生した方が、解像度が高く良い音に感じました。家ではヘッドホンよりYoshii9にシステムの方が解像度が高く、音の差が分かったのだと思います。あれだけシンプルなプログラムなのに音に影響するなんて... 難しいです。
Unknown (信助)
2010-06-03 13:10:15
恐らく、shellが次の命令待ちいている状態がいけないのかもしれない。
Unknown (RE3noRE)
2010-06-03 13:11:02
私も時間をかけて232さんのご指導どおり実行,試聴しました。
私の場合はHOMEディレクトリにplayというホルダーを作り,そこにaudiofileをまとめて移動するのでコマンドラインはいつも同じです。また1ファイル再生時にもファイル名をMS.aiffに統一することにしたのでやはりコマンドラインはいつも同じです。

Consoleからのafplayの音はいいですね。抽象的かつ概括的にいえば精密な音です。
Console使用前のafplayの音が水底の小石がくっきり見えるレベルであるとすれば,Console再生は水底の砂粒まで見えるレベルです。

今のところCubase ST4を必要としません。Nuend4でさえいらないという人もいるくらいですから,Cubaseは当然かもしれません。

Console再生の難点はFirewire接続のFireface400から音が出せない(出す方法がわからない)ことです。FF400には専用のドライバが必要ですし,GUI環境下で接続すると自動的に設定用のアプリケーションが立ち上がって接続を認識するのでCUIでは無理かもしれません。

Console再生時USB(Prodigy Cube)からは特別な操作なしで音が出ます。こちらは単純なUSBデバイスとして認識されるからでしょう。

Consoleという再生手段を選ぶときは,1アルバム中の3曲目から聴きたいときはトラック3以後のファイルを所定のディレクトリに移動し,又は,聴きたい曲だけを1ファイルにリッピングして聴くという手間のかかる方法でもよいと感じています。
Unknown (232)
2010-06-03 23:07:48
Muse labs Tools を開発している方によると
http://muselabs.weebly.com/
シェルを利用する場合、sh や bash よりも csh の方が良いらしいです。こちらでも Unknownさんが何度か csh の優位性について書かれているので、試しに先のスクリプトを csh に書き直してみました。

cafplayshell.sh (ファイルバージョン)

#!/bin/csh -f

set i = 1
while ( $i <= $#argv )
cat "$argv[$i]" > /dev/null
/usr/bin/afplay -q 1 "$argv[$i]"
@ i++
end

cdirafplayshell.sh (ディレクトリバージョン)

#!/bin/csh -f

set files = ( "$argv[1]"/* )
set i = 1
while ( $i <= $#files )
cat "$files[$i]" > /dev/null
/usr/bin/afplay -q 1 "$files[$i]"
@ i++
end

注意:スクリプトをテキストエディタにコピペして保存する際は、必ず最終行の end の後に改行を入れて下さい。でないと、ちゃんとループしません。僕はこれで一時間ぐらい嵌りました。

これで信助さんの環境で試してみて、感想をお聞かせ下さい。

スクリプトの拡張の件ですが、実のところ、シェルスクリプトをいじりはじめたのは、今回の afplay が話題になってからなので、まだまだ全然です。信助さんのアイデアはスクリプティングを勉強するにあたって、良い課題なのでやってみたいと思います。
Unknown (232)
2010-06-03 23:24:13
うまくいきました。失礼しました。そちらで消せるようでしたら、上の二つは削除して下さい。

それでは正しいソースです。

cafplayshell.sh (ファイルバージョン)


#!/bin/csh -f

set i = 1
while ( $i <= $#argv )
cat "$argv[$i]" > /dev/null
/usr/bin/afplay -q 1 "$argv[$i]"
@ i++
end



cdirafplayshell.sh (ディレクトリバージョン)


#!/bin/csh -f

set files = ( "$argv[1]"/* )
set i = 1
while ( $i <= $#files )
cat "$files[$i]" > /dev/null
/usr/bin/afplay -q 1 "$files[$i]"
@ i++
end


Unknown (信助)
2010-06-04 00:02:57
232さん

cshのスクリプト、ありがとうございます。試してみようと思います。上の2つを削除しておきました。取り急ぎ。

皆さん

23:24:13のスクリプトが文字化けしてない正しいものです。23:07:48のは文字化けしているので使わないで下さい。
シェルの種類 (toposcope (Muse Labs))
2010-06-04 00:12:58
シェルの種類は sh の方が良いという人もいます。
csh は音が締まりすぎるおそれもあります。
このあたりは環境や好み次第ですので、
音楽を楽しめる方で遊んでくださいな。
私的な妄想です (ハラペーニョ (Muse Labs))
2010-06-05 00:39:12
全くいいかげんな類推でしかありませんが、純粋なピストンモーションで
低音を再生する環境のばあいは(38cmウーファーとかですね)cshが合う
と思われます。
逆に、箱をうまく使って鳴らすスピーカーではshもしくはbashのほうが
合うような気がしますね。
Unknown (信助)
2010-06-05 04:40:05
Muse Labsのお二人様、こんにちは。

Muse Lab toolsを使った場合の、シェルによる音質の変化を仰っているのですよね。コンソールやターミナル上でのシェルの音の違いは、とりあえず分けて考えた方が良いと思います。
Unknown (RE3noRE)
2010-06-05 09:45:31
Muse Lab Tool はそれ自体がafplayコマンドを実行するための「専用ターミナル」じゃないかと思いますが,私の理解不足でしょうか。
Unknown (toposcope - Muse Labs)
2010-06-05 10:24:20
信助さん
シェルの音の違いは、最初はターミナルで確認して分かったことです。
(環境設定でシェルを変更できます)
MLT、コンソール、ターミナル、どれもやっていることは一緒です。

RE3noREさん
> それ自体がafplayコマンドを実行するための「専用ターミナル」
その通りですよ。
Unknown (信助)
2010-06-05 11:55:27
ターミナルの音は、3つのMuse Lab Toolの音と明らかに音が違います。Muse Lab Toolはターミナルへ指令を出すソフトなのかなと私は想像しています。命令は同じでも裏で動いているシステムファイルが違う、その結果、音が違うのではないかと。Muse Lab Tool「専用ターミナル」というよりは、ターミナルに指令を出すソフトだと思っていたのですが、違うのでしょうか?

先の書き込みをした理由は、コンソール、ターミナル、Muse Lab Toolの3つに対して、3つのシェルを組み合わせると9通りあり、どの組み合わせの音について言っているのか分からないと、話がごちゃごちゃになりそうだなと思ったからです。
Unknown (信助)
2010-06-05 12:04:01
忙しくて232さんのシェルを変更したソフトを聴けてません。すいません。Yoshii9で聞かないと分からないので、夜になってしますと試聴出来なくなってしまいます。
Unknown (toposcope - Muse Labs)
2010-06-05 12:43:49
信助さん
> 命令は同じでも裏で動いているシステムファイルが違う

いえいえ、裏で動いているシステムファイルも同じなのに音が違うんです。

デジタル再生の音の違いは「まだ解明されていない不明などこかが決定的に影響している」と考えないと、実際に生じている現象の論理的整合性が保てなくなります。

ジッターがいい例です。ジッターもかつては「まだ解明されていない不明などこか」だったわけですから。

> ターミナルに指令を出すソフト

ここで言うターミナルは「Terminal.app」のことですよね。MLT は Terminal.app にまったくなにもしていませんし、勝手に Terminal.app が動作することはありえません。MLT が指令を出している先はシェルです。
コードとしては以下のような感じです。
dim sh as new Shell
sh.Backend="/bin/sh"
sh.Excute "………"

> どの組み合わせの音について言っているのか分からない
どの方法で指令を送っても、シェルの「音の相対的な違い」は一様です。
相対的な違いを話題にしています。

MLT は、まだ公表していない再生方法でやっとその真価を発揮しますから、現時点では MLT のことは考えなくてもいいですよ。
Unknown (信助)
2010-06-05 13:33:00
MLTがシェルに命令を出す場合、ターミナルは動いていないので、ターミナルからシェルに命令を出す場合とは裏で動いているシステムへの負荷のかかり方は違うと思うのですが...。 コンソールについても、例えGUIのシステムファイルが動いていたとしても、GUI処理の負荷は低い訳で、そのシステム負荷の違いが音に出ている可能性は考えられませんでしょうか?

公表していない再生方法楽しみにしています。あれのあれも楽しみにしていますよ。
Unknown (toposcope - Muse Labs)
2010-06-05 13:41:13
信助さん
システムへの負荷が音の違いの要因になっているということでしたら、その通りだと思います。とくに大きな要因であることは確かですよね。

> 公表していない再生方法楽しみにしています。
諸事情でなかなか公開できないのですが、お楽しみに!
Unknown (232)
2010-06-05 22:09:08
タイムドメイン界隈でも、MLTを中心として、afplay で盛り上ってますね。
信助さん、csh 版の感想はいつでも良いので、のんびり試してみて下さい。日本語のフォルダだと、たまにうまく動いてくれないことがあります(単に動かないだけなので、システムには何の影響もありません)。MLT の Black だとちゃんと動いているんですよね。何かコツのようなものがあるんでしょうか。csh のスクリプティングは難しいです。
ついでに、こちらの方も試してもらえますか?
シェルスクリプトを使うと、どうしても afplay 単独の音とは変ってくるので、スクリプト無しで、ディレクトリ内のファイルを一括再生するコマンドを用意してみました。

find . -name \*.aiff -exec cat {} > /dev/null \; -exec afplay -q 1 {} \;
(円記号として表示されてしまうところはバックスラッシュに直して利用して下さい。)

このコマンドを再生したいファイルがあるディレクトリで実行すると、全てのファイルが再生されます。長いコマンドですが、一度書いてしまえば、二度目以降は矢印キーでのコマンド履歴を利用すればいいと思います。たぶん afplay 本来の音が出ていると思います。
Unknown (232)
2010-06-05 22:13:39
ちょっと補足して置くと、上記のコマンドでは、ディレクトリ内のaiff ファイルを再生するものです。wav ファイルを再生したい場合は、.aiff を .wav に書き変えて下さい。後はお好みで、-q 1 オプションをはずしたりしてみて下さい。
Unknown (信助)
2010-06-06 07:42:55
232さん、いろいろ作って下さりありがとうございます。シェルスクリプトを使わないというのは、凄いアイデアですね。スクリプト無し連続再生とコンソール一曲再生を比較したのですが、やはりコンソール一曲再生の方が良いように思いました。曲の同じ部分を聴いて、色々な音を聞けたなという充実感に大きな差があったように思いました。しかし、実はちょっと自身がないところもあるので、他の人の意見も聞いてみたいです。リスタート(ログアウトではなくて)しないとコンソール一曲再生、本来の音にならない気がしたので、何度もリスタートして聞き直しました。

cdirafplayshell.shを聞いてみました。うーん、やはり、コンソールからのAfplay入力とは大きな差があると思いました。shとcshの比較は、体力が切れてまだやってません。

タイムドメイン界隈でもafplayは盛り上がっていますか。良いことです。
Unknown (信助)
2010-06-07 02:34:28
shとcshの比較をしてみました。shは高域まで伸びが良い、cshは高域の伸びはshほどではないが、音のダイレクト感があると言う感じでした。ただ、shは高域に癖があるため、伸びていると感じているだけという可能性もあります。どちらか私には判断できませんでした。
Unknown (たくぼん)
2010-06-08 22:36:08
タイムドメイン界隈からやってまいりました。

232さん
すばらしいスクリプトありがとうございました。
自分にしか使えないと思いますが、RAMDiskを作成し、csh,sh,aplayをコピー、ファイルもRAMDiskにコピーしてからキャッシュをつくって、RAMDisk上のapflayでディレクトリ再生をするスクリプト群(3つ)を作成しまして、>consoleで音楽を再生してます。直接コマンド入力よりは音質は若干劣りますが(殆ど判りません)がすばらしい音質です。

toposcopeさん
blogにコメントありがとうございました。タイムドメインの世界でもMLTはかなり話題になっています。すばらしいツール群を公開していただき感謝しております。Muse Labのサイトにリンクさせていだだきました。これからもよろしくお願いたします。

信介さん
Yoshii9ですと違いがはっきりわかりますね。これからも楽しく拝見させていただきます。勝手ではありますがリンクさせていただきました。

afplayの音質って本当に凄まじいですね。
Unknown (信助)
2010-06-09 10:15:20
たくぼんさん

初めまして、リンクありがとうございます。初めてのリンクしてもらいました。私からもリンクさせて頂きました。これからもよろしくお願いします。

GS-1は昔良く行っていた輸入レコード屋さんにあって、いい音だなと思っていました。今、その店はもうなくなってしまいましたが。私もいつか手に入れたいです。

RAMDiskにafplayを置くアイデア、良いですね。そんなこと出来るんですね。afplayはコマンドだから出来ないと思っていました。これからもいろいろ教えて下さい。catコマンドで音楽ファイルを送るとしばらく待機時間がありますよね。リスタートしてから同じファイルをcatで送った時は、ほとんど待ち時間がないんです。このことから、キャッシュはハードディスク上に出来ているような気がします。キャッシュをRAMDisk上に指定できたらなと思っています。
Unknown (たくぼん)
2010-06-09 22:11:13
信助さん

私もよくわからないのですが、RAMDiskにコピーしたファイルとメモリー上にキャッシュを作った場合は異なるのでしょうか。

あくまでも感覚的な判断ですが、RAMにファイルを置いた場合は、キャッシュを作らないほうが音がクリアなような気がします。

afplayのみならず、同じシェルスクリプトでも、ルートで実効する場合よりも、RAMDiskにコピーしてから実効したほうがなぜかクリアです。

微妙なちがいなのですが・・

これからもよろしく御願いいたします。

コメントを投稿


コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む

トラックバック

この記事のトラックバック  Ping-URL