Archive for the ‘オーディオ’ Category

トヨタのおっちゃんじゃないけど、場所食って、重くて、電気も食って、ケーブルがスパゲティ状態の、そんな原始的なマシンが大好きでねえwww

てな訳で、ようやく新居でPCが使えるようになりました。もちろん、スマフォは引越しとか関係なく使えたけど、画面は狭い、文字入力も七面倒臭い、音も悪くていいことなしで(これは言い過ぎw)、全然使う気になれなかったです。ちょっとしたことならいいけど、腰を据えて文章を書くとかはできないです。

書きたいことはいろいろあるけど、PCを使えるようになったといえども体力の限界を超えることはできないので、おいおい書きます。ただ、とりあえず一つ書きたいのは、今のところ、「動物園の運動会」には遭ってないので、一安心してます。

 

PS. あー、PC、超重かったしめんどかったwww 梱包も設置もとんでもない手間だった。しかも、オーディオもまともな音なんて出やしなかったので、マイクも引っ張り出して暫定的な(「とりあえず」の、「テキトー」な)補正をして、なんとか、「聞くにたえない音」ではなくなった。こんなに手間が掛かるのは大っ嫌いだけど、僕にはなくてはならないようだ。

あー腰(どころか身体中)痛いw

  •   1
  •   0

僕は断然前者だが、やってみると結構失敗するので、やっぱり良く考えてからやった方がいいのかとも思うし、下手に考えても無駄かも知れないとも思う。あと、やってみれば、(失敗しても)思わぬ発見があることもありそうだ。実は、一見、それらは近くて相反するように見えるが、実際にはそうでもなく、間には広くて深い谷があるように思う。

つまり、「(細かいことを考えずに)とにかくやってみる」のも、「やるまえに良く考える」のも、「下手な考え休むに似たり」も全部正しいのだが、それらは同列にはない(カテゴリが違う?)と思うのだ。

  • とにかくやってみるのは確かに良さそうだけど、少し考えればやる前から結果が分かるとか全く無意味なことは、敢えてやる必要がない。
  • 上が正しいなら、やるまえに(ちょっと)良く考えるのは正しい。でも、考え過ぎて何もやらないのでは、何も生まれない。
  • 何かしようと考えるのはいいが、それが荒唐無稽だったり、考えが足らなくて、やってみたら失敗・無駄だったというのは、下手な考え休むに似たりなのだろう。

そして、こういう複雑な関係を逆手に取って人を誤魔化す(「詭弁」)手合いが実に多い(これについては今回は省略する)。逆に、天才とかは、一見何も考えずに荒唐無稽そうなことをやっても、最後は実にスパっと成功させてしまうのかも知れない。あと、個人的には、普通の人はしないかも知れないが、(前述の詭弁を真に受けるようなものだが、)字義通り実行すると意外にうまく行くこともある。だから、まあ、簡単に割り切れなさそうなことだとは言える。

 

先日買って失敗した、Bluetooth-FMトランスミッター(JF-BTFMEX)を改造する件は、まさにこれだった。スマフォからBluetoothで音を受けてアナログ信号にして、カーナビのライン入力に入れれば、FMでラジオに入れるより安定して音質が良くなりそうだと考え、実際にトランスミッターを分解して試したのだが、どうしてか失敗した。Bluetooth受信部の音声出力端子(と思われるもの)を見付け、確認のため、それに対応するFMトランスミッター部の入力端子に音を入れたのだが、FMラジオから音が出なかったのだ。

JF-BTFMEXを解剖してみたw

原因を考えたのだが、Bluetooth受信部(イヤフォン部)からFMトランスミッター部に送られる音声信号が、アナログでなくデジタルなのではないだろうかと思う。あの程度のものでわざわざそうするとは考えにくいことだが(オシロや信号発生器があれば、すぐ分かるのだが・・・)、今のところ、そういう仮説である。実際、この製品は何を考えているか分からないものなので、そういうこともありそうではないかw

原因はともかく、諦めたあとに気付いた。そもそも、カーナビのライン入力が使えるなら(調べた結果、使えそうだった)、スマフォのイヤフォン出力をそこに直接繋げばいいではないかと。確かにケーブルでの接続は鬱陶しいが、そうする方がシステムを作る手間が少ないし、構成要素も少ないから断然いい。

てな訳で、「細かいことを考えずにとにかくやってみた」ら、失敗どころか無駄の極みだった。が、まあ、おもしろかったのでいいことにしたw そして、前半に書いたようなことを思った次第である。

 

PS. 他にも、今朝は別件でやっぱり良く考えずにやったら、大失敗して大変だった。夜中にiVideoのルーターが落ちていた(LTEが切断されていた: 原因は確定していないが、夜中にAQUOSがディープスリープになり、Wi-Fiが落ちて、接続する機器が何もなくなったからのようだ)ようなので、それを何とかしたいと思って、どうしてか(今となっては理由が不明。寝ぼけたのだろうか?)TP-LinkのWi-Fiブリッジ(TL-WR802N)のモードを"WISP"というのに変えたら、全然繋がらなくなってしまって、困った。

Ethernet(PC)からもWi-Fi(スマフォ)からも管理webにすら繋がらず、初期化しても直らなかったので、初期化できない領域を書き換えてしまったために、交換してもらうしかないかと思った*。ただ、最後に、(ヘルプページ※に書いてあったが当てにはしていなかったものの、)別のスマフォから試したらようやく繋がったので、ブラウザのキャッシュが良くなかったようだ(クリアしても駄目だったので、再起動などが要るのかも知れない)。

交換だったら、少なくとも数日間はPCからネットに繋げられなくなってしまうので、まったく九死に一生を得た気分だった。

*口コミで「全然繋がらなくなった (クソが!)」と書かれている人は、こういうことも原因にあるのではないかと思った。なかなか奥が深いし、説明も再現も難しいから、普通の人は気付かないだろう・・・

僕は、別のスマフォで試す前に、中を開けて、電池があれば外して完全に初期化してみようとすら思った(ただ、ネジがシールの下にあって保証が無効になるので、止めた)。

※不思議なことに、外部に繋がっていないのに、Chromeで検索したらTP-Linkのヘルプページなどが出て来た。賢いキャッシュなのだろうか? 謎だけど、結構助かった。

  •   0
  •   0

大容量MVNO(iVideo)を用いた通信の完全無線化のための確認の一つに、「(車などでの)移動中の通信も問題ないか」がある。もちろん、元の回線は腐ってもSBMなので問題あるはずはないが、仮にSBMがクソだったり、僕の環境(使い方)では問題が生じたりする可能性があるので、一応確かめておこうと思った。

方法としては、車で移動しながら通信が途絶えたりしないかを調べればいいのだが、電話やブラウズしながら走るのは不可能で危険だし、今は違反になるからできない。あとは何か自動的に通信するプログラムを動かす手がある。そこで、ここは趣味を生かしてw、Spotifyを使うことにした。

最初は普通に(構成は以下のとおり)、スマフォ(AQUOS sense lite)でSpotifyを再生しながら(通信は通常どおり、Nexus 4でLTEをWi-Fiテザリングする)走り、途中で音が途切れないかなどを確認しようと思ったのだが、AQUOSのスピーカーの音はとんでもなくしょぼいから、走りながらイライラしそうな気がした。

Spotify → LTE(iVideo, SBM) → Nexus → (Wi-Fi) → AQUOS → 音

そこで、AQUOSの音を車のステレオから出せば、多少は音が良くなるかと思った。が、接続する手段がない。車のステレオ(ナビ)には外部入力(ビデオ・音声)はあるのだが、バックカメラで塞がっていて使えないようだ(カメラは映像だけなので、音は入るはずではある。が、それを再生できるかは不明)。そこで、FMでラジオに送信することにした。それにしてもFMトランスミッターはないので、買うしかない。

安いのを探したら千円くらいのがあったのだが、見ているうちに欲が出て来て、スマフォとFMトランスミッターを(ケーブルでなく)Bluetoothで繋ぎたくなった。そういうのは2千円くらいした。が、Amazonを丹念に探したら、なんと、千円以下のものがあった。J-ForceのJF-BTFMEXK(以下、BTFMEXK)というものだった。キャッシュレスの5%還元とポイントを適用したら約880円と、ケーブル接続のFMトランスミッターより安くなった。

当然落とし穴はあると思ったが、レビューを見てもそれほどひどいことはなさそうで、いろいろ駄目だったとしても、とりあえず通信の確認には使えそうだから注文して、今日届いた。

早速室内で試すと(これは電源が別体なので、車内でなくても手持ちのUSB電源アダプタが使えて便利だった)、ちょっと謎(リセットしないとNexus 4ではペアリングできなかった)があったものの、基本的な動作は問題なかった。ただ、早速思わぬ落とし穴があった。

これはイヤフォン・マイク(どういう訳か、これはBluetoothで通話もできて、そのヘッドセットになる)が付いているのだが、音をFMで送信している時も、そこからも音が出るのだ。全然思ってもいなかったのだが、FMに出る音は常にイヤフォンからも出て、消せないようだ(ボリュームを下げるとFMの音も小さくなってしまう)。イヤフォンの音は小さいけど気になるので、開口部をマスキングテープで塞いで小さくした。確認して実用になりそうなら、イヤフォンへの線を切断することなどを考えていた。

あと、イヤフォン部(実はこれが本体のようで、Bluetoothの処理をしている)とFMトランスミッター部が分離するのだが、それが結構軽くて、走行中に容易に外れそうだった(外れると、ラジオから音が出なくなる)ので、被覆付き針金で縛った

もう、届いた直後から見る陰もなく、散々なありさまだがw、とりあえず車で試してみた。実際の利用時を想定して、以下の構成にした。(なんか、狭い車内で電波(LTE, Wi-Fi, Bluetooth, FM)が渦巻いていて大丈夫かと思うが、実際にはどうなんだろう・・・)

Spotify → LTE(iVideo, SBM) → Nexus → (Wi-Fi) → iPhone 6s※ → (Bluetooth) → BTFMEXK → (FM) → 車のラジオ → 音

※iPhoneでなくAQUOSでもいいのだが、余っていたのと、ある程度車内に置きっぱなしにしたかったので、別にした。

すると、予想以上に音が悪い。まあAQUOSのスピーカーよりはいいけど、まさに「ラジオの音」だ(いや本当にラジオなのだが、FMなのにAMのように高音が出ず、電波状態が悪い時なのか、高音がシャキシャキすることがある)。FMの周波数を変えると音は変わるが、「バッチリ」にはならない。iPhoneのイコライザで高域が強まるようにしてみたが、やっぱり今ひとつだった(そうしたら、「シャキシャキ」の頻度が増えた気がする)。

音以外でとても残念なのは、車(エンジン)を停めても(= ACC off)再生が停まらず、エンジンを掛けても(= ACC on)再生が始まらないことだ。どちらも自分で操作しなければならない。この操作はイヤフォン部のボタンでできるので便利なのだが、いちいち操作するのはやっぱり面倒だ※。探している時は、BluetoothのFMトランスミッターは普通はエンジン(ACC)と再生が連動するそうなので、それを期待していたのだが、駄目だった。更に、イヤフォン部には電池が内蔵されているので、車から外している状態でも うっかりボタンを押すと再生が始まってしまい、不意にイヤフォンから音が出るという、悲しいことになる。

※今気付いたが、スマフォのAutomagicのような自動化アプリで、電源の状態に応じてSpotifyを再生・停止させることができるかも知れない(でも、できない気もするが、IFTTTとかならできそうな気もする)。

いずれにしても、BTFMEXKは全くのクソではないのだが、がっかりする(惜しい)ことが多かった。それから、BTFMEXKに限らず、FMラジオでの接続は音がひどくて使い物にならない※ので、最低でもオーディオ(アナログ)ケーブルでの接続にしたいところだ。そんな訳で、この構成で車内でSpotifyを聴くのは見送ることにした。

※なお、無線での音の伝送はLTE, Wi-Fi, Bluetoothでも行っているが、それらは(今回は)音質への影響はないと思う。というのは、音の劣化具合がいかにもアナログ的(例: 高音が出ない)だったからだ。音がブチブチ切れたなら影響が考えられるが、それは全くなかった。という訳で、アナログ伝送は脆弱なのを実感した。

ただ、そもそも今回の目的は、移動中もiVideo(SBM)の通信が問題ないかを確かめることで、約30km走って全く大丈夫だったので良しとする。

問題なかった理由の一つは、(回線の質がいいこと以外に、)Spotifyはリアルタイムに音のデータを取得しながら再生している訳ではなく、(最初などに)ある程度まとめて取得しておいたものを再生しているため、データ取得時でも再生時でも多少回線が切れたりしても、再取得する余裕があるからだと想像する。

電話(完全にリアルタイム)なら話は別だが、iVideoには電話サービスがないし、仮にIP電話にしたって、僕は滅多に電話はしないから、確認する必要はなさそうだ。

それにしても、BTFMEXKは「技術の極み」とうたっているが、僕に言わせれば「惜しい極み」だw 一体どういう考えで こんな奇想天外な機能・構成のシロモノを作ったのか想像もできないが、それぞれの要素の機能はちゃんとしているので、それらをもっとうまく連携して詰めれば結構売れたと思う(そして、こんなに安売りされることはなかっただろう)。もったいないことだ。

まあ、各要素が分離するので、気が向いたら改造したいと思う。トランスミッターとイヤフォンと電池は捨てて本体(Bluetooth→オーディオ変換機能)だけ使い、そのライン出力を取り出して、何とかステレオ(カーナビ)に繋がるといいが・・・※

※仮に改造できず、車で使えなかったとしても、USB電源アダプタ(2口、片方は大容量出力)は使えるから、それが880円と考えれば悔しくはないだろう(でも、実は既に持っている。まあ、今のは出力が小さいから、AQUOSの高速充電とiVideoのモバイルルーターに使えるだろう)。

それにしても、これって、まさに昔の車(VITA)でやっていたことだ。当時はiPodをケーブルで車のステレオに繋げていたのだ。やっぱり最初はFMで飛ばそうとしたのだが、音が悪かったので すぐに諦めたと思う。すっかり忘れて居たが、全然進歩がないものだwww

 

PS. BTFMEXKで一番感心したのは、USB電源ケーブルが柔らかくてしなやかだったことだ。ここまで柔らかいものは見たことがない。本当におもしろい製品だ。

PS2. カーナビで思わぬことが分かってしまった。アンテナは切断してB-CASカードも入れてないのに、なぜかTVが映ってしまったのだ。ワンセグが入ってしまうのだろうか? 全く危ないところだった。N○Kにしつこくカーナビのことまで聞かれたら、ドヤ顔で「映せるものなら映して下さい!」と言おうと思っていたのだw

それにしても、本当に迷惑だなあ・・・

  •   1
  •   0

実家で聴いたスマフォ(AQUOS sense lite)の音が大変悪くて、以前設定したイコライザを使ったり、再度耳で調整したのだが、どうも今ひとつだった。それで、もちろんスマフォに多くは求めないながらも、興味が湧いたので、どういう周波数特性なのか測り、その結果でイコライザを調整してみようと思った。

実は、そもそもは年末に修理から返って来たオーディオインタフェース(Focusrite Scarlett Solo)の動作確認に、PC(オーディオ)のスピーカーの特性を測定しようと思っていたのだが、スマフォの特性が気になったので、そっちをすることにした。なお、スピーカーの特性も測定したが、問題なかった。

手で持って聴く場合を想定して、(いつものように段ボールで)簡単なホルダーを作って測定してみた。すると、耳は全然あてにならないことが改めて分かって、毎度のことながら愕然としたw

なお、スマフォの特性を測定するには、PCの出すテスト信号をスマフォから出す必要があるが、PCのスピーカーと違って普通には出力できない。僕のスマフォでは(ネットのテザリングとは違って)AndroidがUSBのサウンドデバイスになることはなさそうなので、マイク端子に音を入れてスピーカーから出すアプリを使おうかと思って探したのだが、どうも直接的でなくて気に入らなかったので更に検索したら、すごく丁度いい方法があって助かった(→ 参照)。

それは、LinuxのPulseAudio(サウンド系)が出す音をネットでスマフォに送ってスピーカーから出すという、最も直接的な方法である。PulseAudioはなかなか高機能で、音をネットに出すこともできるようだ(JACK Audioでもできるようだが、やったことがないし、やるのは怖いし面倒だw)。スマフォ側は、それを受けるアプリ(Simple Protocol Player)をインストールして動かしたら、無事に音が出た。

ただし、使うイコライザ(例: Equalizer Pie(後述))によってはSimple Protocol Playerの音に効かないので、その時にはSoundWire (free)というのを使った。どうしてか、PulseAudioと違ってかなり(数秒)遅延があるのだが、特性を測定するソフト(REW)でトリガー音で測定開始するようにしたら、うまく測定できた。

SoundWireと同様の方法にVLCを使うのもあったが、やっぱり遅延が大きく、トリガー音で測定開始できることに気付く前だったので諦めた(トリガー音を使うなら、SoundWireよりも手軽でいいと思う)。エンコード用バッファの関係で遅延するのだろうか?

(1/4 4:50) スマフォの通信データ量をチェックして驚いたのだが、PulseAudioの転送はデータ量がとんでもない(測定のために1-数時間使っていただけで、1GB近くに達していた)ので、間違ってモバイル回線を使わないように注意が必要だ。圧縮していないせいはあるにしても、随分多い。また、SoundWireもPulseAudioの1/3程度と多かった。

耳で調整した時には、2kHzや4kHz辺りに山があるように感じた(その辺りを下げたら、感じが良くなった気がしたため)のだが、実際には山は7.5kHz付近にあった。。。

特性を見たら、2kHzや4kHz辺りなんて平らもいいところで、僕の耳は節穴かと言いたいが、聴覚特性に関係しているのかも知れない。等ラウドネス曲線では500Hz-4kHz辺り(特に4kHz)の感度がいいから大きく聞こえることや、錯覚のようなものがあるのかも知れない。

あと、うすうす感じては居たが、このスマフォは中低音が全く出ず、700Hz以下は期待できない。ここまではっきり出ないと、その割り切りに却って感心するw (某●ニー社とかだと、「何とかベース」とか言って、重低音を無理やりして出して宣伝しそうじゃないですか) 逆に、超高域(15kHz辺りまでは余裕だし、20kHz辺りまでも何とか)が出ているのが意外だし不思議だ。

それで、中低域は諦めるとして、イコライザアプリ(Equalizer Pro)で補正してみた。まあまあ山が下がったのだが、Equalizer Proは7.5kHz付近の調整ができないので、今ひとつ納得できなかった。それで他のイコライザを探したら、7.5kHzの近くの6.3kHzや10kHzが調整できる、Equalizer Pieというのが見付かって試してみたら、かなりいい感じに補正できた

ただ、どういう訳か、Equalizer Pieはイコライジングできるアプリが少ないようで、Spotifyには使えるのだが、YouTubeアプリやOperaには使えない。まあ、Spotifyに使えれば問題ないのだが、なんか気に入らないので、Equalizer Proを再調整してみたら、許せるくらいになった

最後に、実際にYouTubeにアップロードされていた曲(Sugar 「ウエディング・ベル」(1981))の冒頭に対して適用した例を示す(あらかじめ済みません(どうでもいいけど"Apology in advance."ってあるのだろうか?)。フリー音源を見付けるのが面倒だったので、好きな曲を使いました。権利者の方からクレームを頂いたら取り下げて入れ替えます)。

補正によって、高域のギラギラした感じ・うるささが大分改善された(でも、音量の違いやオーディオのスピーカーで聴くせいか、今聴くと余りうるさくない?)。ただ、オーディオのスピーカーでは中低域がちゃんと出ているので、そっちを聴くと「ああ、やっぱりこれだよなー」ってなってしまう。

てな訳で、このくらいの測定・調整なら、手軽にできて楽しいものだw

書いたあとで思ったが、楽器の音(調律ではない)は耳で作るのだと思うが(これはこれで、すごくおもしろそうだ!)、オーディオ機器・装置は耳では無理だろう。もちろん、後者は、あくまでも無色透明な音、平坦な特性を目指す僕の指向での話である。

 

PS. 測定中にスマフォがホルダから落ちてしまって、コネクタから着地して割れちゃったかなとか慌てたが、運良く無傷だった。

  •   0
  •   0

ここ数日、「例のトリッキーなやつ」(先日の投稿の、Spotifyアプリのログから音量正規化のための値(RG値)を抽出して正規化する方法)が諦めきれず、悪戦苦闘していた。何度も諦めたのだが、そのたびにアイデアが出て来てしまって再挑戦する羽目になり、今日は随分いい感じになったのたが、やっぱり駄目だった。

記念(または証拠)に、最良の状態での動作光景を載せる。画面左上はRG値取得用Spotifyアプリ、右上はミュート(上側)・ゲイン調整+リミッター(下側)用アンプ、左下はミニプレーヤー、中央から右下は再生用Spotifyアプリである。曲間でのアンプの設定の変化や、プレーヤーの切り替わり(アプリ下部の緑の帯)に着目されたい(もちろん、手で操作している訳ではないし、マウスなどを自動操作するツールを使っている訳でもない)。

Spotifyアプリから音量正規化のための値を抽出して音量正規化している画面

動作の流れは以下である。

  1. Spotifyアプリ(音量正規化: off)が再生を開始する(またはトラックが変わる)のを待つ。
  2. アンプでSpotifyアプリの出力をミュートする。
  3. プレーヤーをRG値取得用Spotifyアプリ(音量正規化: on)に切り替える。
  4. その曲のRG値が取得できるまで(再生して)待つ。
  5. アンプにRG値を元に計算したゲイン(増幅量)を設定する。
  6. プレーヤーを再生用Spotifyアプリに切り替える。
  7. 曲の先頭に戻る。
  8. アンプのミュートを解除する。
  9. 再生を開始する。

基本動作はできた※のだが、試しに少し(15分くらい)動かしていたら、RG値取得用アプリとSpotifyサーバの通信ができなくなってRG値が取れなくなってしまった。再生用アプリの動作は問題ないので、短時間(RG値取得用アプリに切り替わっている時間は約2秒)で切り替えるとうまく動かなくなってしまうのかも知れない。まあ、再生し始めたと思ったらすぐに切り替えるなんておかしな使い方を想定していないのはもっともだから、仕方ない。

※本方式での音量正規化処理自体は、全く問題なかった。性能(音量の揃い具合)はSpotifyアプリよりも良かった(とはいえ、大差ではない)。また、前回(「と思いきや」のあと)失敗した、プレビュー版のRG値とは異なる場合が多かったので、そちらには得体の知れない値が入っているようだ。

あと、不思議なことに、投稿用に動画を撮り直そうとして再度動かしてみたら、プレーヤー切り替えのタイミングがずれて※、曲間で余計な音(RG値取得中または曲の先頭に戻る前の音)が出るようになってしまった(上の動画はボツのテイクを投稿用に少し編集している。でも、ちゃんと動いていたのは確かで、夢や幻や捏造ではないw)。だから、SpotifyのアプリもWeb APIも、こういうタイムクリティカルな用途には無理があるようだ。

※アプリの切り替え時間(= RG値の取得・処理時間= 曲間)は最初は4秒くらいだったのだが、それでは遅過ぎるので(結構苦労して)高速化・最適化したら不安定になったようだ。元の遅い版ならもう少し安定なのだろうが、それでは気分が悪いw それどころか、最初は1秒以内にしたいくらいだった。

そもそも、(前回も書いたが、)これをやりたかった理由の一つはダイナミックレンジをなるべく減らしたくないことだが、再度計算してみたら、Spotifyの音量正規化のQuietモード(基準音量: -23LUFS)を使っても2ビットも落ちないことが分かった※ので、ポップ音楽でそこまでこだわる意味は全くないから無理する必要はない。

※先日の試算では、音量を-23LUFSにするのに23dB下げると考えたが、それは誤りで、SpotifyがRG値の計算に用いているReplayGainの基準音量は-14LUFSなので、(-14-(-23)=)9dB下げる程度であり、それは(9/6=)約1.5ビット相当である。

あと、RG値取得用アプリが駄目になる問題は、例えば、通信できなくなったらしばらく(数分?)待ってアプリを再起動すれば回復できるだろうが、たとえ自動的にするとしても、再起動されるまでは聴けなくなって気分が良くないし、音量正規化のon/off切り替え時にアプリを再起動したくないからこの方法にしようとしたのに、(再生用ではないけど)やっぱり再起動が要るのでは馬鹿らしい。それに、上に書いたように、タイミングが変動して安定して動かないのでは、とても実用にはならない。

そんな訳で、結果的には無駄なことをして疲れたが、いろいろ(細かい)発見があっておもしろかったせいか、余りがっかりはしていない。むしろ、事前の予想どおり駄目だったものの、基本的には目論見どおりに動作して満足したし、方が付いてせいせいしたw

 

最後に、開発中に分かったことなどを少し書く。

  • Spotifyアプリを外部から制御するにはWeb APIとDbusの2種類でできるが、プレーヤーを切り替えて使う場合はWeb APIだけを使った方がいい。Dbusで操作すると、どのプレーヤーが対象か分からなくなったり、意図したプレーヤーが操作されなかったり、プレーヤーの切り替えがうまくいかない場合がある。
    • Web APIはかなり遅い(数百ms/回)のでDbus(数十ms/回)で高速化したかったのだが、残念ながら駄目だった。
  • SpotifyのWeb APIを短時間に頻繁に使うとサーバがエラーを返すようだ(本文に書いたエラーもこれと同様)。HTTP 500なのでアクセス制限(rate limit)ではないようだが・・・
  • 更に、頻繁に使わなくても謎の動作をする場合がある。Dbusを使わなくてもおかしくなることがあるようだ。
  • 曲の開始直後に先頭にシークすると前の曲にジャンプしてしまうようで、少し待たないといけないようだ。
  • Linuxのサウンド系には謎の損失(音量低下)があるようで、どこかで4dBくらい音量が下がる。PulseAudio(実際にはALSA)からJACKに入るところか、JACKからサウンドカード(実際にはALSA)に出るところかと想像している。
    • ポップ音楽用の音量正規化の場合、目標の音量をReplayGainと同じ-14LUFSにしたので、理論上はアンプのゲインをRG値そのものにすれば良いはずなのだが、この損失を戻すためのゲイン(4.5dB)を加算した。
    • なお、クラシック音楽用ではその損失を加味して、4dB下げるだけで目標の音量(-23LUFS)になった。
  • (書いても誰も分からない気がするが、)本方式の制御プログラムでは、2つのイベント入力(SpotifyアプリのログとDbusのイベント)を混ぜて受信することで、両方ともタイムアウトなしの受信にすることができ、イベントに対するレスポンス時間の短縮と負荷の軽減ができた。でも、本文に書いたように、高速化したら逆効果だったようだw

 

PS. それにしても、昨日(12/29)までは年末という気がしなかったのだが、今日(12/30)になったら急に「今年ももう終わりか」モードになって、妙に慌ただしい気分になってしまった。そして、「年末なのにプログラミングなんてしている場合かっ?」て気もしたが、特に他にすることもないので問題ないw

  •   0
  •   0

Spotifyの音量正規化の改良では散々試行錯誤したが、ようやく自分が納得できるかたちで実現できた。もちろん、結果(性能)も全く問題なかった。音量(Integrated loudness)の値は全く問題なかったし、随分聴いてみたが、(自作とは全然違って、)我慢できないほどうるさい曲(演奏)※も小さ過ぎるものもなく、随分手を焼いていた曲もあっさり大丈夫だった。これなら気楽に聴いていられそうで、ようやく目的が達成できた感じだ。

※正確には、「うるさい」と感じる演奏はある。が、その音量値は全く異常でなかった。ということは、音作り(周波数分布や音質の悪さ? いわゆる「海苔波形」?)によるのか、僕との相性が悪い(音の好みや聴覚のラウドネス特性とのズレ?)のだと思う。実際、不思議なことに、アンプの音量を小さくしていても、いつもうるさく感じる演奏はやっぱりうるさく感じる。つまり、「うるさい」は音量が大きいだけではないということだ。まあ、語義からしても当たり前か。

以下に試行錯誤の経過や内容を書く。

前回の投稿ではSpotifyの音量正規化のNormalとQuietを手で切り替えて使うと書いた。そして、前回も書いたが、音量を揃える(増やす)ために増幅してもそれほど音質が劣化しないことが分かったので、その方法を詳しく検討した。基本的には、単に(ソフトの)アンプで増幅すればいいのだが、使う要素(アンプの種類)や増幅する量を最適にしようとしたのだ。

まず、以下を試した。増幅量は+11dB(-23LUFSを-12LUFSにしようとした)にした。

  • JACKのjack_mixerのボリューム:音は悪くない感じがした。 → その後、長時間聴いたら耳閉感が起こった。
  • PulseAudioのボリューム (Spotifyのsink-input):音が悪い感じがした。わずかに耳閉感が出た。

PulseAudioでの増幅で音質劣化がありそうだったので、何種類かの増幅量で歪率を測定したが、オーバーフロー(0dBを超える)しなければ(+15dBくらいまで)は問題なさそうだった。それで、実際の曲で試したら、ポップ音楽でも意外にダイナミックレンジが広いようで、+9dBでも簡単にオーバーフローした。

それで、リミッターでオーバーフローしないようにすることにした。PulseAudioで増幅してオーバーフローすると、その時点で歪んでしまうので、あとにリミッターを入れても無意味なので、JACKのアンプ+リミッターの構成にすることにした。リミッターにもいくつかの種類があり、以下でオーバーフローさせて試したが、いいものは少なく、結局、Fast Lookahead limiterを使うことにした。これには入力にゲインがあって、それがアンプの役割をするので丁度良かった。

  • Fast Lookahead limiter: 一番いい感じ。過大入力でも、自然な音で0dBを超えないように制限される。
  • Wave Shaper (Sine-Based): 過大入力(例: +17dB)で音が変わる(歪む)。
  • Simple Limiter (Peak Env. Track.): 過大入力(例: +17dB)で「ワウワウ」になる。
  • Calf Sound GearのCalf Stereo Tools: 最初は良かったが、長く聴いたら耳閉感が起こった。
    • 後述のNon Mixerにした時に、バイパス機能とSoftClip(リミッター)があるので試した。

それから、Spotifyの音だけを増幅したいので、SpotifyのJACKへの出力を独立にし、更に、ポップ音楽用とクラシック音楽用で増幅をon/offする必要がある。

その前に、いつも評価用に使っている曲をSpotifyの正規化(Quiet)+増幅(+9dB)で試したところ、殆どのポップ音楽は問題なかったが、"Speak to me"は駄目で、Normalと同様な不自然さがあった。原因を調べたら、前回の投稿の付録に詳しく書いたが、オーバーフローがリミッターでカットされる時間が長いためだと分かった。それで、増幅量を+6dBに減らし、リミッターの回復時間を長く(2秒)にすることで不自然さを緩和した。回復時間を"Speak to me"の鼓動の周期より長くすれば、ずっと音量が下がったままになるので、不自然さが緩和されるのだろう。完璧ではないが、"Speak to me"のような曲は例外的だから許容できると考えた。ただ、他の曲が不自然になるかも知れないので、その時に調整したい(今のところは問題ない)。

結局、以下の3つのモードを作ることにした。

ポップ向けでの増幅量について: 通常のReplayGainで正規化する(あるいは、0dBまで目一杯出す)他のプレーヤー(具体的にはgmusicbrowser, GMB)と音量を揃えるにはなるべく上げる方がいいが、前述したオーバーフローによる劣化も嫌なので、試行錯誤(勘?w)で決めた。+7dBだと、SpotifyのQuietモードでの基準音量 -23LUFSを-16LUFSまで上げることが期待できる(当初は+10dBして-13LUFSくらいにしたかったが、やり過ぎのようだ)。

3つのモードはミニプレーヤーのボタン(右端の"Sp", "S", "-")で切り替える。音量正規化の有無はSpotifyを再起動すればいいが(とはいえ、重いから避けたかったが、それ以外に方法がないので仕方ない)、JACKのアンプで外部から制御できるものがなかった(後述するように、実はそうではないが、当時はそう思っていた)ので、増幅の有無の切り替えが困難だった。それで、接続(配線)を変えることにした。簡単に書くと、以下のように切り替える。

  • 増幅あり: Spotify → アンプ → ミキサー → 補正用イコライザ → 出力
  • 増幅なし: Spotify → ミキサー → 補正用イコライザ → 出力

なお、なるべくSpotifyを再起動しないで済むように、右クリックで音量正規化モードの切り替えを逆順にできるようにしたのだが、順番を覚えていないためにやっぱり再起動になる羽目になるので、マウスオーバーでガイドを出すようにした。

なお、プログラム(xdotool)でリミッター(アンプも兼ねる)のEnableボタン(中央付近)を押すことでも、増幅の有無の切り替えが可能なので試してみたのだが、勝手にマウスが動くと(その後自動で元に戻しても)結構ストレスに感じるし、その時の操作状態によっては誤動作・操作することもあるので止めた。

その後、モード切替のたびに接続(配線)を変えるのは全然スマートでないし、遅いし、JACKサーバへの負荷が重そう(頻繁に繰り返すとおかしくなりそうな気がした)なので、避けられないか考えた。それで、以下の2種類を順に試した。

  1. OSC(Open Sound Control)という仕組みで外部プログラムから制御可能な、Non Mixer(エフェクタも入れられるミキサー)を使い、リミッターの増幅量を変える。
    • Non Mixerはエフェクタのon/off(Bypass)を外部プログラムから制御できないので、増幅なしの場合にはリミッターの増幅量を0dBにすることで、offの状態にした。
    • この方法には実用上は何も問題がなく、充分良かったのだが、微妙に気に入らないために別の方法を探して、次の項のjack-rackになった。例えば、以下が気に入らなかった。まあ、車で言えばトヨタのように、「ソリが合わない」ってやつだろうかw まあ、jack-rackが駄目なら戻ればいい。
      • 外部からBypassが制御できない。ゲインでもできるけど、何か直接的でない。
      • 大げさ: ウインドウが無駄に大きいけど小さくできない(確か、一番幅を狭くした状態がこれ)。
      • 名前が悪い(結構真面目に良くない)。「おフランス」なのだろうか?
  2. MIDIでjack-rack(エフェクタを入れるソフト)を外部プログラムから制御し、リミッターのon/offを切り替える。
    • 試行錯誤の結果(以前試した記録が役に立った)、MIDIを使う方法が分かり、どうにかjack-rackも制御できるようになったので、リミッターのon/offが外部から制御できるようになった(のEnableボタンを押すのと同じ効果)。
      • ただし、ちょっとしたバグがあり、jack-rackの起動後にMIDI設定のダイアログが出てしまうが、仕方ない(これを自動で閉じるようにしたら動作がおかしくなってしまったので、手で閉じることにしている)。
      • ↑面倒だし目障りなので、xdotoolで"OK"ボタンを押すようにして自動で閉じるようにした。ただ、ウインドウサイズが変わると予期せぬ事態が起こりそうだ。 (18:19)

MIDIについての特記事項を以下に列挙する。

  • JACKサーバ: MIDIドライバ(midi-driver)に"seq"を指定する。
    • 上記設定をすればa2j_control(a2jmidid)は不要と思われる。
  • MIDIの配線: 当然ながら、JACKで、外(ALSA?)からのMIDI情報の出口(僕の環境では"Midi-Through:midi/playback_1")と制御対象の要素(jack-rack)を接続しておく(図左側の赤線)。
  • MIDI制御情報の送信: sendmidiコマンドを利用した。他にもあるが、僕には一番使いやすかった。
    • 実行例: sendmidi dev "Midi Through Port-0" ch 1 cc 0 0: (僕の環境・設定において)jack-rackの"Enable"をoffにする。
      • 注: 上記MIDIデバイス名はJACKでのもの(一つ上の項に書いた)とは異なる(ALSAのもの?)。sendmidi listコマンドで名前を確認すること。
  • jack-rackの設定: 制御したい要素(例: ボタン)上で右クリックすると設定ダイアログが出るので、そこにチャネル番号(sendmidiのchに指定する番号)とコントローラー番号(sendmidiのccに指定する番号。正式な名称は不明)を設定する。
    • この方法がなかなか分からなくて諦めていたのだが、jack-rackのgithubのページでようやく分かった。
    • Enableについては、設定値に127以上を指定しないとEnable状態にならない(Disable状態にする時は0でいい)ので、0と256を指定することにした。
    • あとで使うかも知れないので、Input gainとWet/dryも設定できるようにした。
  • どうしてか、(音と違って)JACKでの正式なMIDIのポート名は"system:midi_playback_1"のような分かりにくいものになり、起動のたびに番号が変わる感じで(要確認: 思い違いかも知れない ← クライアント(jack-rack)側の名前の番号は、起動順序で変わるのかも知れない)、自動で配線を保存・復元する機能がうまく動かなかった。それで、現在使っているMIDIの線は1本と少ないので、自動保存・復元の対象にせずにJACKの起動スクリプトで個別に配線することにした。
    • JACKの設定などで直るのかも知れない。
    • ↑JACKの設定ではなく自動で割り振られるようなので、JACKサーバ起動時にMIDIポート名の変換テーブルを作り、接続の自動保存時に、そのテーブルを元に、クライアントの起動順序で変わらないポート名(alias)に変換して保存するようにした(変換後の名前でも接続できるので、復元は問題ない)。 (12/23 22:42)
  • MIDIではデバイスの設定状態を取得することができない(標準的な方法がない)ので、アンプの状態は常に「上書き」する(現在の状態と比較するようなことは行わない)ことにし、設定後に状態をファイルに保存しておき、ミニプレーヤー(minisp)の起動時に保存された状態を再設定することにした。
    •  (ソフトの)MIDIは高速だしデータ量も少ないから、これで大きな問題はなさそうだ(世の中の電子楽器は基本はそうなのだろう)。
    • また、再生停止中にJACKサーバが再起動することもあるので、再生開始時にそれを検出したら(サーバの起動後に起動時刻をファイルに記録しておく)保存された状態を再設定することにした。上で「問題ない」と書きつつも、毎回無意味に設定するのは気分が悪いので、ここでは無駄な設定を省くようにしたw

それから、Spotifyの音量正規化(改良版)の性能を自作の方式と比較した結果を書く。双方で共通する38曲(演奏)について比較した。

判定条件

  • 音量の許容範囲: 基準(中心)から±2LUFS以内 (幅: 4 LUFS)
    • 音量(Integrated loudness)が上記許容範囲内なら問題なし(○)とする。
    • 問題なしの外側2 LUFSを可(△)とし、可の外側を不可(×)とする。
    • 下記の「偏差」は、音量が許容範囲の外側(○以外)に出た量である。

Spotify (Quietモード)+増幅 (ポップ音楽用: "Sp")

  • 設定
    • 基準音量: -16 LUFS
    • 音量の許容範囲: -18 .. -14 LUFS
  • 結果
    • 範囲内(○): 35曲 (92%)
    • 可(△): 3曲 (7.9%)
    • 不可(×): 0曲 (0%)
    • 合計: 38曲
  • 統計量
    • 音量の平均: -15.8 LUFS
    • 音量の標準偏差: 1.39
    • 偏差の平均: 0.1 LUFS
    • 偏差の標準偏差: 0.39

自作の方式 (ポップ音楽用: "Pk")

  • 設定
    • 基準音量: -20 LUFS
    • 音量の許容範囲: -22 .. -18 LUFS
  • 結果
    • 範囲内(○): 25曲 (61%)
    • 可(△): 9曲 (22%)
    • 不可(×): 7曲 (17%)
    • 合計: 41曲
  • 統計量
    • 音量の平均: -19.5 LUFS
    • 音量の標準偏差: 2.80
    • 偏差の平均: 0.74 LUFS
    • 偏差の標準偏差: 1.54

はっきり言って完敗である。Spotifyには不可(×)の曲がまったくなかったのには感心する。しかも、範囲内(○)に収まっている率が1.5倍と高く、音量のばらつき(音量の標準偏差)は半分以下、偏差の平均は1/7以下である。(数値的には)充分に音量が揃っていると言える。

ただ、負け惜しみではあるが、Spotifyは必要なデータを使って「普通に音量正規化(ReplayGain)をしている」のだから、良くて当たり前だとは思う。が、自作で情報(RG値)が不足した状態でいくら頑張っても勝ち目はないし、意味がないことは確かだ。

最後に、今回分かったことなどを列挙する。

  • クラシック音楽は予想以上にダイナミックレンジが広い。例: チェロの演奏(「無伴奏チェロ」 "Suite No. 5 in C Minor BWV 1011: V. Gavottes I & II")でもピークが平均値+約18dBまである。
  • 思い込みかも知れないが、日本のポップ音楽は比較的音量が揃っている。正規化後の音量が申し合わせたかのように基準値付近だった。国民性?
  • どうしてか、Calf Studio Gear(JACK Audioのエフェクタのスイート)はやっぱり駄目だった。リミッターですら耳閉感が起こる。根本的に作りが悪いのだろうか? でも、誰も文句を言っていないようだから、僕との相性なのか・・・
  • 少しだけでもMIDIの使い方が分かったのは収穫だ。演奏はしないが、JACKの要素の制御に使えるのが便利だ。
  • 同様に、今回は使わないことになったが、OSCも制御に便利そうだ。ただ、手間を掛けてそういう新しいのを作らずに、Dbusを使えば良かったのにとも思う・・・

これにて音量正規化問題は一旦終了!

一段落して、心置きなく気楽に音楽が聴ける。

 

と思いきや、、、毎度のことながら、そうは問屋が卸さなかったwww

昨夜、複雑なために一旦諦めたトリッキーなSpotifyの音量正規化用の値(以下、RG値)取得の方法を、なるべく簡単に実現するにはどうしたらいいかなどと考えながらSpotifyのログを眺めていたら、思わぬ展開になった。すごく簡単に取れるかも知れないことが分かったのだ。

RG値はSpotifyアプリのログに出ることは分かっていたが、音量正規化をonにしないと出ないし、その仕様がいつなくなるかも知れないのだが、SpotifyのWeb APIのGet a Trackなどで取れるプレビュー(試聴)用のMP3ファイルに入っていたのだ。全くコロンブスの卵というか、灯台下暗しだ。

その前に、RG値も入っていると思われる、ヘッダ部("head file")取得用URLがログから分かり、その中身はBase64エンコードされたOggだったので、「もしや!?」と思ったのだが、曲のデータ同様中身が暗号化されていてお手上げだった。

ただ、プレビュー用のファイルを普通にsoxiやexiftoolやプレーヤーで情報を表示してもなぜかRG値(例: REPLAYGAIN_TRACK_GAIN)が出ないので諦め掛けたのだが、ffprobeでは"Side data"として出た。だから、通常のMP3での格納方法ではないのかも知れない。あるいは、僕がMP3に詳しくないだけか?

↑調べたら、MP3のRG値は「LAMEタグ」というものに入るようだ(MP3の標準タグ(ID3v2?)に入らないのかは分からない)。eyeD3というコマンドに--lametagというオプションを指定すると見られる(そうしないと見られない!)。あ、lameはフリーのMP3エンコーダだから、LAMEタグという名前からして、それが独自に付けているようだ。ということは、入ってないものも、将来なくなる可能性もありそうだ。MP3は随分使われているのに、RG値すら標準で入れられないのだとしたら、なかなか面妖だなあ。。。 (18:51)

それで、その値が正しいかを確認するため、数曲で全体(全曲)とプレビュー版のRG値(track gain)を比べた。なお、全体のRG値はSpotifyアプリのログから抽出した。

  • 夏の扉
    • 全体: -8.71 dB
    • プレビュー版: -9.30 dB
    • 差: -0.59 dB
  • どうにもとまらない
    • 全体: -8.64 dB
    • プレビュー版: -9.10 dB
    • 差: -0.46dB
  • Speak to me
    • 全体: +13.49 dB
    • プレビュー版: +14.10 dB
    • 差: +0.61dB
  • Born to be wild
    • 全体:-3.64 dB
    • プレビュー版: -3.40 dB
    • 差: +0.24 dB

一見、全体とプレビュー版で随分値が違っていたのでがっかりし掛けたが、差を求めたら1dB未満(0.5dB前後?)なので、使えるかも知れないと考えた。

最初はRG値の差は圧縮率の違い(全体: 160kbps, プレビュー: 96kbps)によるものだと思ったが、その後、プレビュー版は先頭の30秒だけで、RG値もその部分のものであるために異なっているのではないかという懸念が生じた。それで、先頭の音量は小さく、後半に大きくなる曲("Stairway to heaven")で確認したら、プレビュー版のRG値も全体ものらしいことが分かった。: プレビュー版のRG値は全体の値とほぼ同じで、更に、手持ちのもの(マスタリングが異なるかも知れない)の先頭を切り出してRG値を求めたら、(先頭は音量が小さいため、)プレビュー版や全体より随分大きな値になった。以下にそれらの値を示す。

  • Spotify
    • 全体: -5.26 dB
    • プレビュー版: -5.0 dB
  • 手持ちの曲の先頭(30秒)の切り出し: +5.2dB (GMBで求めた)

実際、手持ちの演奏のラウドネス(Integrated loudnessをebur128コマンドで求めた)は13.3LUFS違っていた。

  • 全体: -11.1 LUFS
  • 曲の先頭(30秒): -24.4 LUFS

念のため波形を比較すると、確かに先頭と全体の平均音量は10dBくらい違っていそうだから、きっと大丈夫だ。

"Stairway to heaven"の振幅: 上: 全体, 下: 先頭30秒 (縦軸はdB)

実際、Spotifyの立場で考えると、プレビューを提供するためだけに全部の曲のRG値を計算し直すのは馬鹿らしいし、プレビュー版の再生時に正規化するとしたら(実際にはしないと思う)、全体のRG値でする方が本来の雰囲気に近く、「試聴」の意図に合うから、全体のRG値を入れている(実際には全体の値を捨てずに残しているだけ?)のは腑に落ちる。想像だが、この値はレーベルから提供された試聴用ファイルに入っているものなのではないだろうか? (音源提供者向けの案内を調べれば分かるかも知れない)

プレビュー版内のRG値を使う場合には、以下のような手順で「普通の」(自分の好きな基準音量に合わせられ、Spotifyアプリのリミッターを回避する)音量正規化ができそうだ。

  1. Spotifyアプリが再生開始するのを待つ。
  2. API: Get a Trackを使い、プレビュー版を取得する。
    • Get a trackのpreview_url要素より。
  3. プレビュー版のファイル(MP3)からtrack gainを抽出する。
    • ffprobeを使う (exiftoolやsoxiでは出ない)
  4. 音量正規化処理を行う。
    • 抽出したtrack gainに従って、音量補正値をアンプに設定する。
      • 基本的にはtrack gain(dB)そのものをを設定すればいいが、オーバーフローを回避するために、適切にオフセットする(下げる)必要がある。

あとは作るだけ。だが、ちょっと疲れた。それに、寒いしお腹空いたしw

 

と書いたところで、思わぬ落とし穴に気付いた。: すべての曲に、あるいは、今後もずっと、プレビュー版にRG値が入っているか疑問だ。入ってない曲があったり、いつかなくなる可能性がありそうだ。上に書いたように、この値は使われることがないだろうし、意図的に捨てていないからあるだけで、Spotifyのサービスの仕様ではないからだ。

そうなっても、(今までのように、)いくらでも回避策は考え付くだろうが、結局、堂々巡りになりそうな感じだ。それだったら、(音質などが完璧ではないものの、)気楽に聴ける今の状態で満足するのが一番得策な気はするが・・・ うーむ。 まあ、興味本位で「お遊び」でやるなら ありかな(いや、全部遊びだがw)。

↑イマココ

(12/25 12:41) 「プレビュー版のRG値で正規化」をちょっと試してみた。結論は、やっぱり駄目だった。以下に理由を書く。

  • 予想どおり、RG値が入ってない曲がある。確率は5%程度ではあるが、少なくない。
  • 更に、RG値がおかしい曲もあった。こちらは10%程度と多い。
    • 数曲について、Spotifyアプリのログに出る全体(正式版)のRG値とプレビュー版のRG値を比較したところ、正規化後の音量が駄目だったものは大きく異なっていた。
    • 逆に、プレビュー版のRG値で正規化でも問題ない場合は近かった。
    • 当然ながら、全体のRG値で正規化した音量を計算したら基準範囲内だったので、問題なさそうだった。

どちらも致命的だ。評価用プレイリスト(ポップ・クラシック合計約90曲)で試したところ、ポップ音楽はまあまあだったが、クラシック音楽は惨憺たる結果だった。うまく行くものもあるから、その曲のプレビューのRG値が良くないのだが、どうしてそうなのかは分からない。プレビュー部分だけのRG値が入っているとか、元の版が違う(プレビュー用は初期のマスタリングなど?)とか、テキトーに計算したとかだろうか。いくら原因が分かっても、プレビュー自体すらなくてもいいような状態でSpotifyは全く保証していないので、対処してもらえる訳がない。

プレビューですらこんなことでは、以前書いた、ログからRG値を抽出する「トリッキーな方法」なんて余計駄目だろう。

いずれにしても、結果としてはイマイチだった。これがうまく行ったらすごくいいと思うが、やっぱり問屋が卸してくれなかった・・・ まあ、作るのはそれほど大変でなく、いつものようにおもしろかったからいいや。

そういう訳で、今は元の状態に戻して、「気楽に聴ける」状態になった(この音量正規化が破綻しないのには本当に感心するw)。これを試した一番の理由の、正規化をon/offする時のSpotifyの再起動を回避する件については、別の方法を考えたい。

一応、設定画面を開かずに、外部から音量正規化をon/offする方法はないかSpotifyに聞いたが、「ない」とのことだった。まあ、それは仕方ない。きっと、かなりニッチな要望なのだろう・・・ (12/25 15:38)

(とりあえずは、)本当に一件落着■

 

(題の漢字は、各自自由にご想像下さいw)

  •   0
  •   0

どっかの国の政府とか軍隊みたいに、勝算がないのに精神論(利権も?)で金・労力を投入して無理な行軍を延々と続けて、最後に、さまざまな言い訳をしながら形式上は「成功」などと発表してドヤ顔して(それどころか、首謀者が逃亡・知らん顔して、)煙に巻くのは愚の骨頂だ。駄目なものはなるべく早く気付いて切る(少なくとも、再検討や方向転換する)のが重要だ。

試行錯誤しているSpotifyの音量正規化処理の改良だが、ポップ音楽モードがそこそこ うまく行って、クラシック音楽モードも調整して目処が立ったものの、今朝寝ながら思い付いた(気付いた)。Spotifyアプリの(標準の)音量正規化機能がどのくらいのものなのか、それと今回の自作の方式にどのくらいの差があるのか確認しようと。特に、曲の特徴量のデータが誤っているのではないかというくらい大音量になるいくつかの曲(例: "Take My Breath Away", "Catacombae")は、Spotifyアプリの音量正規化ではどうなるのか興味があった。

やってみたら、多くの収穫があった。

  • Spotifyアプリの音量正規化の性能はいい。自作の方式よりずっと音量が揃う。ポップ音楽での音量幅(ラウドネスの不揃い度)は、自作の方式では、(試した数曲の音量の範囲が広かったとはいえ、)おかしい音量になる曲を除いても、目分量でSpotifyの2倍(LUFS値の幅)くらいだった。おかしい音量になる曲を含めれば数倍になる。
  • Spotifyアプリの音量正規化のうち、Quietモードでは、Normalモードと違い、すごく静かな曲(例: "Speak to me")を不自然にしてしまうコンプレッサー(のような処理)が働かないようだった。
  • Spotifyアプリの音量正規化用の値は、ログやコンソール出力から取得できる。ただし、音量正規化をonにしていないと出ない。

Spotifyアプリの結果を聴いたら悔しいくらいだった(上記の困った曲が何の問題もない音量で出ていた)。悔しいけれど、結局、自作の方式でいくら頑張っても苦労ばかりで余りメリットはなさそうだ(そもそも、目的はそこにない)。それよりは、Spotifyアプリの音量正規化をうまく使えばいい。

一番手軽なのは、音量正規化をする場合は常にQuietモードを使うことだ。これなら、ポップ音楽でもクラシック音楽でも切り替え不要で、静かな曲でも音が不自然になることはなさそうだ。ただ、目標音量が-23LUFS程度と小さいので、もったいない気がする。特に、ポップ音楽では、もっと音量を上げてSN比を向上させたりダイナミックレンジを減らさないようにできる(だからNormalモードを使いたいのだが、例のコンプレッサーが邪魔だ・・・)。が、そもそも、音量正規化して聴くというのは、BGMのように気軽に聴いている時であり、その時にSNだのダイナミックレンジだのと言っても無意味だ。逆に、真剣に聴く時には音量正規化を使わないから、これで問題ないとも言える。

少し前に試行錯誤中に知ったのだが、Spotifyアプリの音量正規化はトラックモードとアルバムモードを自動で切り替える(アルバム再生時は後者になる)とのことなので、自作しようと思った切っ掛けの一つの、アルバムモードがないことも解決できた(この機能は後から追加されたのか、最初からあったが公表されていなかったのか)。そういう点でも、特にモバイルなどで切り替えずに使いたいなら、Quietモードにしておけば不便はない(まあ、モバイルでは周囲が騒がしいので、すごく静かな曲が不自然でも問題なさそうだから、Normalでもいいとも言える)。

ただ、Quietモードのもう一つの問題は、音量が小さいので他のプレーヤー(僕の場合は、gmusicplayer, GMB)と合わないことだ。これは結構厄介だ。Spotify(音量正規化)からGMBに切り替えた途端に大音量(約+11dB, 3.5倍)になるので、常に注意が要るし(大抵忘れて驚くw)、アンプの音量調整が煩雑だ。アンプの音量を変える代わりに他のプレーヤーの音量を下げる手もあるが、やっぱり「もったいない」から避けたい。逆に、Spotifyアプリの音量を後で大きくして合わせる手もあるが、一旦小さくしているのを増幅すると音質が劣化するから嫌だ。

書いた後で気付いたが、小さくしたのを増幅すると音質が劣化するというのは本当だろうか? (アナログでなく)ディジタルなので、増幅でオーバーフローしない限り、小さくした時より劣化することはない気がして来た。あとで検討したい。 ← データフォーマットにも関係ありそうだ。 → 検討結果を付録に記載した。 (12/19)

調べると、-23LUFSというのはEUの放送の基準レベル、あるいは、クラシック音楽向けだそうで(USや日本の放送は-24LUFS)、それに合わせるのは悪くないとは思うものの、自分の閉じた環境なのに一律に低く合わせるのはやっぱりおかしい気がする(実際、SpotifyやYouTubeの基準は-14, -13LUFSと、-23LUFSよりかなり大きい)。

以下に、候補とそれぞれの欠点をまとめる。

  • 自作の音量正規化
    • 音量を揃える能力がSpotifyより低い。
    • 全然揃わない曲がある。
    • 原因: Spotifyから音量正規化のための値(ReplayGain)が取れないので、音響的特徴量から推測しているため。
  • Spotifyの音量正規化: Quietモードのみ
    • ポップ音楽でダイナミックレンジがもったいない。
    • 音量が小さいので、音質が劣化する?
    • 他のプレーヤーと音量が揃わないので不便。 → 増幅すると音質が劣化する(要確認 → 検討結果を付録に記載した。 (12/19))。
    • 原因: Quietモードは音量が小さいため。
  • Spotifyの音量正規化: Normal, Quietモードを切り替える。
    • Normalで不自然になる曲(静かなもの)がある。
    • 原因: Spotifyアプリの処理(コンプレッサー?)が入ることがあるため。

上述のとおり、自作の音量正規化が駄目なのはSpotifyからReplayGainが取れないためなのだが、どうにかして取る方法はないかと試行錯誤していたら、思わぬことで取れた! 既に書いては居るが、アプリのログやコンソール出力に表示されるのだ。以下に"Speak to me"での例を示す。太字がトラックのReplayGainである。

02:05:55.089 I [libvorbis_ogg_decompressor.cpp:401] track gain: (13.25Db), track peak: (0.409425dB), album gain: (-5.09dB), album peak: (1.02865dB), normalization: trackgain

ちなみに、それらはGMBでの同じ曲(同じマスターと思われる)でのReplayGainの値と概ね合っていた。

なお、peakの単位が"dB"と書いてあるが、誤りであろう(正しくは単位なし)。同じく"Db"もtypoだろう。ここら辺は そうなる状況が分かる。つい指が動いたとか、余計にコピペしたとか。「(見ると気になるけど、)デバッグ用だからまあいいか」、みたいなw

それで、自作の音量正規化にSpotifyのReplayGain(以下、"RG")値を使う(苦肉の)策を考えた。理論的には、RG値取得用と再生用の2つのSpotifyアプリを使えばできそうだ。以下に手順概要を示す。

  1. 再生用Spotifyアプリを音量正規化offにする。
  2. RG値取得用Spotifyアプリをログまたはコンソール出力ありで起動する。
  3. RG取得用Spotifyアプリの音量正規化をon(NormalまたはQuiet)、音量=0(-∞ dB)にする。
  4. RG取得用Spotifyアプリで再生開始する。
  5. ログまたはコンソール出力からRG値を取る。(すぐに出るはず)
  6. RG取得用Spotifyアプリを一時停止する。
  7. 得られたRG値で再生用Spotifyアプリの音量を調整する。(現在の自作と同じ方法)
  8. Spotify APIを使い、有効なプレーヤ(デバイス)を再生用Spotifyアプリに切り替える。
  9. 再生用Spotifyアプリで最初から再生開始する。

ちょっと手で試して、やればできそうな気はしたが、(すっかり忘れて居た)昔のGoogle play musicの時(→ )と同様に、余りにもトリッキーで嫌になるくらいだ。また、アプリが2個なのでメモリも2倍食いそうなのも嫌だ。そもそも、ログにRG値が表示されるのは仕様でもなんでもないので、出なくなったら元の木阿弥だ。。。

だから、やっぱり筋が悪い。

そして、作るのは面倒だw

それで、とりあえずは、Spotifyの音量正規化機能を使うことにし、ポップ音楽とクラシック音楽でNormal(ポップ)とQuiet(クラシック)を切り替えて使ってみて、Normalでどのくらい不自然な曲があるかで判断することにした。Normalで駄目な曲は(DBに記録しておいて)自動でQuietに切り替える手が考えられるし、多かったらQuietだけ使うとか、上のトリッキーな手を使うことも考えられる。

それにしても、「とりあえず」のNormalとQuietを手で切り替えて使うにも自作ミニプレーヤー(minisp)に多少の変更が要るので、「ちょっと疲れたから、まあ明日にするか・・・」と一休みしているw ← イマココ

相変わらず寄り道が多く、先は長いw

 

(12/19 16:40) 付録: (デジタルで)増幅すると音質が劣化についての検討

結論は、「理論的には劣化しないが、現実には劣化する」である。以下に理由を書く。

まず、本文に書いた状況での音質劣化は、音量を下げた時点で生ずるものが主である。音量を下げることによってデータの有効ビット数が減るため、振幅分解能が減る(例: ものすごく小さい音が消える)ためだ。音を格納するデータフォーマットが浮動小数点型であれば、おそらく分解能が減ることはないが、整数型の場合には減る。その程度は以下のように試算できる。

音量を-23dB下げた場合、1ビットは約6dBなので、23/6= 約3.8ビット減る。

これによるダイナミックレンジの減少量は、データフォーマットを16ビットとすれば、3.8*6= 22.8dBである(音量を下げた分(23dB)そのもの)。

(2020/1/2 12:28記) 注: その後、Spotifyが音量正規化値の計算に使っているReplayGainの基準音量は-14LUFS相当であることが分かった。そのため、実際に下がる音量は9dB程度で、減るビット数は1.5ビット程度と少なく、特にポップ音楽では、音質の劣化もダイナミックレンジの減少もほとんど問題にならない。

実害について考えれば、対象はポップ音楽であり、そのダイナミックレンジを高々18dB(約3ビット分)程度と推測すれば、音量を下げた残りのビット数は16-3.8= 12.2ビットで、音源の3ビットより充分大きいので、記録された振幅がよほど小さくない限り、問題ないと考えられる。

次に、増幅の影響を考える。増幅は乗算なので全く音質が劣化する要素はないが、現実には、処理系や出力のデータフォーマットは整数型で取り得る範囲が有限なため、大きく増幅すると上限を超えて(オーバーフローして)音質が劣化する。つまり、波形の超過分がカットされるので、音が変質する(例: 歪む)。

この検討中に気付いたのだが、私が"Speak to me"で感じた不自然な感じは、オーバーフローによるものだった。具体的には、音量正規化時に過大に増幅するとオーバーフローが生じ、その超過分をカットすると生じる(これはリミッターの動作であり、本文中の「コンプレッサー」は実際にはリミッターであった)。

不自然さが起こる原因を詳しく推測すると、この曲は低音(鼓動)が強いため、それがオーバーフローしてカットされるのだろう。カットされるのが単発的(不定期)や短時間(瞬間的)に起こるのなら気づきにくいからまだいいのだが、この曲の場合は、定期的に起こる鼓動で、テンポが遅いために比較的長時間音が大きい状態なので、カットされる期間が長く、その間の他の音の聞こえ方が変わって不自然になるのだろう。

この現象はSpotifyアプリの音量正規化だけでなく、私の環境でも起こったので気付いた。具体的には、次のような処理をした時に、Spotifyアプリの音量正規化(Normal)と同様の不自然さが生じた。

Spotifyアプリの音量正規化(Quiet) → アンプ(増幅率: 6-9dB程度) → リミッター

また、Spotifyアプリの音量正規化(Quiet)だけでは不自然さは生じなかったので、問題はリミッターに起因する可能性が高い。

なお、「リミッターが原因だったら使わなければいい」ということはない。リミッターがなくても、超過分はどこかで(例: DACで出力する時)カットされ、それはリミッターよりもひどい音質劣化を生じる可能性が高い。

(12/19 22:23) 補足: 上でデータフォーマットを16ビットと想定したのは、Spotifyアプリの出力がそう("s16le")だからで、通常のOSのサウンドシステムはもっとビット数の多いフォーマットをサポートする。例えば、私の使っているJACK Audioは32ビット浮動小数点である。だから、音質の観点ではSpotifyに音量正規化をさせるのは得策でない。上述の、音量を下げることによるダイナミックレンジの低下などが起こる。が、もし仮にJACKの中やその手前のPulseAudioで行うなら、劣化する可能性はほとんどない。

その後の増幅はJACKで行っているので、通常の増幅率ではオーバーフローしないから、音質劣化も発生しないはずだ。しかし、元々のデータが最大値に近いほうに詰められているためにオーバーフローするし、そうでなくてもDAC(サウンドカード)に出す時にオーバーフローする。それを防ぐには、リミッターを入れるか、音量を下げて(= 適当な値で除算して)全体的なレベルを小さくして(= 小さい方にずらす)DACに出すことが考えられる。

結局、後者はSpotifyの音量正規化(Quietモード)の小さい音のまま出力することと同等である。もちろんそれでも良かったのだが、他のプレーヤーと音量を合わせたいから増幅しようとした。

 

PS. SpotifyアプリからのRG値取得には、音楽圧縮フォーマット展開用ライブラリ(vorbisを使っているようだ)をすげ替えればできるかと思ったのだが、自前で作っているかスタティックリンクしているらしく、外部のものは使っていなかった。考えが甘かったが、まあ、そうれはそうだろう・・・ あとは、逆コンパイルしてバイナリエディットとかいう手もあるかも知れないが、「うーん」だ。それに、プログラムの改ざん検証をしているかも知れないから、できないかも知れない。

なんてことを考え出すから、寄り道が増える訳で・・・

  •   0
  •   0

使っているうちに不満(例: うるさい曲がある)が出て来たために、Spotifyの自作ミニプレーヤー(minisp)の音量正規化処理で、音量の補正量をやはり自作再生履歴DB(Mlhi)に記録しおいてそれがあれば使えるようにしようと思ったのだが、そもそも、元々の方式がいい加減では補正ばかりになって良くないことに気付いた。それで、まずは音量正規化処理を改良することになり、今は、その改良した方式の評価のために、Spotifyで再生している曲の音量を自動で測定する機能を作っている※。音量はできるだけ聴感に近い方がいいので、ラウドネス(Integrated loudness: "I", 参考)にした。随分目的から離れてしまった気がするが、きっと気のせいだろうw 自分でやり出したこととはいえ、なかなか面倒だが、いろいろな物を組み合わせて機能を実現するのはおもしろい。

※なぜ自動化しようと思ったのかというと、ラウドネスメーターはあらかじめ曲の先頭で計測開始しておかなければ、正確なIntegrated loudnessの値が出ないので、だらだらと評価がてら聴いていて「大き/小さ過ぎるかな?」(調整がおかしい?)と思ってからでは遅く、再計測しなくてはならないからである。再計測にしたって、曲全体を再度聴くのは苦痛なので、先頭だけなど一部になって、正確でなくなってしまう。曲間で自動リセットしてくれるような測定アプリがあればいいが、そういうものはなかった。また、GUIに表示された測定値を見て手で記録するのは面倒だし間違い易いから、自動でファイルに記録できれば好都合だ。

更に、複数の補正条件・設定の比較についても、それぞれの条件で評価用のプレイリストを再生しておけば(僕が聴いて居なくても、スピーカーで音を出さなくても)通して測定できるので、(この機能が完成した暁には)容易になるはずだ。

更に、普通に再生しながら、補正条件とその結果の音量を測定してDBに記録しておき、次回はそれに基づいて最適な音量に調整するってことも可能な気がしていて楽しい。

更に、今思い付いたが、AIみたいな機能で、長時間いろいろな曲を自動再生して勝手に学習させて、設定を自動調整するなんてのもいかにもおもしろそうだが、先は長いし、そもそもSpotifyを聴くだけなのにそこまでする必要があるのかと・・・w

こうやって風呂敷夢を広げるから、大変になるのだ。

詳しくは別に書くつもりだが、音量正規化の基本的な処理は、従来と同じようにSpotify APIで取得できる曲(トラック)の特徴量(loudnessとenergy)を組み合わせて、曲の本来の音量を推測(復元)し、それを元に正規化している。今回は、その推測の方法を改良しようとしている。今までは思い付きで対数あるいは指数関数を使っていたが、今は下のグラフのような、energyによって特性(係数)が変化する式を試している。グラフはいかにももっともらしくて うまく行きそうに思えるが、そんなことはないw それに、これは何かの理論に基づいている訳ではなく、やっぱり思い付きや試行錯誤からの経験によるものである。試すとまあまあうまく行く(しないよりはずっといい)のだが、やっぱり限界はあるし、値に問題はなくても聴覚に合わないことがある(合わないものが充分に少なくなったら、補正量をDBに入れようと思っている。が、いつになることやら・・・)。

あと、以前のように、公開DBに音量正規化用の値(再生ゲイン)などがないか探したたら、2つ見付かった。一つは前回も見付かったDynamic range databaseで、もう一個はAcousticBrainzだ。前者は、前回は(記憶している限りでは)APIがないのとレパートリーが狭そうなので止めた。後者は、言い方は悪いが「玉石混交」(「ゴ○屋敷」などもっとひどい言い方はあるが、それは言い過ぎだろう)で、全く手軽に使えないので却下した。確かにデータは多いのだが、全然整理されておらず、ただ数字があるだけで、同じIDなのにそれぞれ随分違っていてどれが正しいのか分からず、禄に検索もできなかったら、どうやって使うのかと思う。

作業の途中で分かったことも多かった。SpotifyのAPIから得られるloudnessは多くの場合はIntegrated loudnessまたはReplayGainと同様(同等)のものなのだろうが、そうでないことも多い。中で変・特殊な処理(音量(loudness)が小さいけどenrgyが大きい曲では更にloudnessを小さくしているフシがある)をしている可能性と、データが誤っている場合もありそうだ。そもそもSpotifyアプリで使っている再生ゲインを出してくれれば、こんな苦労をしなくて済むのだが(アプリの一時ファイルを見たりしたが、それらしい値は見つからなかった)・・・

そもそも、Spotifyアプリの音量正規化処理が「普通」だったら、こんな苦労は全くしなくていい(実際、したい訳じゃなくて、ただ音楽を聴きたいw)のだが、前回書いたように、やっぱり謎の処理をしていることが分かった(何人かの方が書かれていた: )。どうやら、アプリにコンプレッサーとかリミッターのような処理が入っていて、特にすごく音量が小さい曲(僕が気付いた曲: Pink Floyd: "The dark side of the moon"の"Speak to me")でおかしくなるようだ。再生ゲインの値がおかしい可能性はあるにしても、せめてその余計な機能がなければまだ良かったのに、どうもお節介な感じだ・・・

ラウドネスの測定プログラムは、GUIのものならいくつかあるのだが、測定・記録を自動化するのは困難なので、スクリプト(jack_captureで音を録り、ffmpegのebur128フィルタでラウドネスを計算する)を作ってミニプレーヤーに組み込んだ。基本的には、ただ再生しているだけでデータが貯まるから楽ちんなのだが、例によっていろいろ凝るから本末転倒になって、処理が複雑になればバグは増えるからデバッグが大変で、また勝手に疲れている。 ← イマココ

 

PS. 以前、「Spotifyには満足している」と書いたが、誤りではない。が、それはあくまでも曲目と音質についてであって、機能は別であるw

PS2. これを書いていて、技術バカにありがちな、「フラット(あるいはリニア)信仰(あるいは症候群、至上主義)」という言葉を思い付いた。やっぱり、こだわり過ぎは駄目なんだろうと思う。が、気軽に聴いている時に、曲のたびに「うるさい!!」とか「小さい・・・」とイライラしてボリュームを調整するのは嫌だってのは大いにある。

PS3. Evernoteやスマフォ・PCのおかげで紙やペンとは無縁の日々なのだが、さすがにグラフの形を考えるのはEvernoteでは無理で(タブレットなら手描きできそうだが、それも煩雑な気がする)、紙が必要だった。が、すぐに使えたのは小さい電話用のメモ帳しかなかったw

(12/14 13:11 少し修正)

  •   0
  •   0

午前中は血圧で内科に行った。血圧は定常状態で、非常に簡単な診察だった。血圧の値すら聞かないのは手抜きのように思えるが、もしかしたら、顔色を見ただけでいろいろ分かるようなすごい人なのかも知れない。あるいは、単に、月曜の朝で混んでいて面倒なのか(前回も同様だったので、今回は週明けを避けようと変更しようと思っていたのだが、面倒だったので止めた。でも、次回はそうした)。いずれにしても、僕は自分で管理していて、おかしかったら自分から言うから、大きな問題ではない。いつものように明るい医院で良かったのだが、なぜか妙に疲れたので、昼食後に少し寝た。

それで、午後に行こうと思っていた耳鼻科(耳の不調の件)は延期しようと思ったのだが、延々と延ばしていたので、頑張って行った。数年前に行ったきりだったので、すっかり場所や勝手を忘れて居たが、受付の方に見覚えがあって、雰囲気もその人らしくて懐かしかった。顔がどことなく鳥居みゆきに似ている(でも、あそこまで変ではないw 単に、色白とか顔の形が似ているとか美人的なだけなのかも知れない)。あと、雰囲気が大昔の知り合いにどことなく似ていたのも、良かった。

聴力検査*をしてもらったところ、左耳の低域の聴力が落ちていた(確かに、他より長く音が聞こえず、なかなかボタンが押せなくてちょっと焦った箇所があった)。ただ、病的というほどではないとのことで安心した。そのグラフは、以前測定した時却下したものに似ていた。ただ、そこまで曲がっておらず、中高域はその時の仮のオージオグラム2のように平坦で、左の最低の音(おそらく、125Hz辺り)だけ低く、20dBの「正常な線」より少し下がっていたから、以前の測定の後に状態が変わったのかも知れない※。

*ちなみに、聴力検査装置の防音は結構ちゃんとしていて、無音の時は鼓動や呼吸の音が聞こえて邪魔だった。「お前らのせいで聞こえなかったらどうするんだ」って感じだったw

※その投稿では右の聞こえ方がおかしいとあるが、実は左のせいだったのか、やっぱり状態が変わったのか。

結局、メニエール病ということで、以前罹ったものが再発したようだ。そう言えば、その医院には数年前に行ったのだが、その時も耳鳴りだった(すっかり忘れて居た)とのことだから、そういう火種はあったのだろう。あと、耳閉感は左右の聴力の差によるらしい。おそらく、夏に就職活動だの退職だので疲れたあとで、オーディオの配置で更に疲れ、しかも、悪い音に曝露したのが原因ではないかと思う。

なお、医師や看護師さんに、オーディオの配置とか「悪い音ガー」とか言ってもまず理解されないと思ったので、言わずにおいた。

ここは朝の内科とは違って、(コスプレじゃなく)至って普通ではあったが、受付の方や看護師さんが丁寧で良かった。あと、年始めに行った眼科のように、診察室に助手だか看護師さんたちがずらっと並んで居た。依然としてその理由は不明だし、僕は余り好きではないが(恥ずかしいとかいう訳ではなく、意味不明なのが嫌なのと、なんか無駄な気がするのだ)、まあ、そういうやり方があるのだろう。

そして、久し振りに、「まずい」と定評の薬(メニレットゼリー)を服用することになった。でも、僕は全然余裕で、(八名さんのように)おかわりできるくらいだw ブラックコーヒーを少し甘くした感じ、あるいは、コーヒーゼリーをちょっと苦くした感じで、もっと苦くたっていいくらいだ。それより、薬が一気に4種類に増えたのが面倒だ。飲み忘れないように、PCに定期的に「予定」を作った。

短距離だったが、久し振りの車の運転が とても気持ち良かった。耳鼻科に定期的に通うことになったので、乗る用事ができたのは好都合だ。

帰宅してから、なぜか耳の調子が良い。久し振りに、曲が綺麗に(しかも、耳閉感が起こらず、疲れもせず)聞こえるのがうれしい! 少し休ませたせいか、病名や原因が分かって安心したせいか、車に乗って気分が良かったせいか、医院のはしごで元気が出たせいか?w

 

PS. カテゴリ名と親子関係を、以下のように変更・更新した。

  • 高血圧? → 高血圧
  • 突発性難聴 → 耳の不調 (+「過去の話題」の子からトップレベルへ)

PS2. 低域の聴力が低いということは、バスレフポートを調整したら低音がわずかに減った(「すごく」はなくなった)ように感じたけど、実はそれでも充分なのかも知れない。いずれにしても、状態が落ち着くまでは余計なことを考えない方がいいだろう。

  •   0
  •   0

人でなく電気・電子機器やコンピュータ関連の話だが、「相性」の問題は確かにあるようだ。正確には「ないとは言えない」だし、実際にはもっと正確な表現はあることが多いと思うが。

単に「相性」と言ってしまうから、原因が伝わらず、謎に包まれて、多くの人が思考停止して納得したり、逆に訝しむ人が出るのだ。実際にはちゃんとした原因があって、もっと正確な表現があるはずだ。ただ、それを簡潔に分かりやすく説明するのが難しいから、「相性」と言うのだろう。もちろん、言う本人が原因を分かってなくて、「相性」と言えば素人を誤魔化せそうだからそうしている場合もある。世の中ではそれが多いのかも知れない。

先日、使う機器によって測定結果の超低域が増えるあるいは減る問題を「相性」と書いたのは、まさにそれだった。そして、上に書いたように、原因が分かっていない。「原因が(分からないのでなく、)ピンポイントで突き止め切れなかった」と言うのが正しいが、まあ、似たようなものだ。

以下にその経過と仮の結論を書く。

現象

オーディオ再生系の周波数特性の測定に使う機器が違うと、超低域(40Hz付近)の振幅が変わる。現在の測定結果(現在の測定系を使用)は昔の測定結果(昔の測定系を使用)より3dB程度大きい。

原因の候補

  • マイク(Dayton Audio EMM-6)の劣化 (劣化して低域が増加するとは考えにくい)
  • 昔の測定系
    • マイク電源(Behringer PS400)の特性 (最初は候補に入っていなかった)
    • マイクアンプ(オーディオテクニカ AT-MA2, 以下、「旧マイクアンプ」)の特性
    • サウンドカード(ASUS Essence STX II)の特性
  • 現在の測定系
    • オーディオインタフェース(Focusrite Scarlett Solo 3G, 以下、"Scarlett")のマイクアンプの特性

調査と結果(概要)

  • サウンドカードのライン入力にテスト信号を入力して、特性を測定した。 → 問題なし。
  • Scarlettのライン入力とマイク入力にテスト信号を入力して、特性を測定した。 → どちらも問題なし。
  • 旧マイクアンプにテスト信号を入力して、特性を測定した。
    • Scarlettのライン入力に繋いで測定した場合 → 問題なし(低域はほとんど下がっていない)。
    • サウンドカードのライン入力に繋いで測定した場合 → 低域が下がった(40Hzで2dB程度)。
  • 昔の測定系と現在の測定系でスピーカーの音で特性を測定し、比較した。 → 昔の測定系では低域が減少した(40Hzで約2.3dB)。
  • マイク電源にテスト信号を入力して、特性を測定した。 → 外付けの直流カットコンデンサの容量によって特性が変化した。
    • ここまでで候補が出なかったので、新たに検討した。
      • 実際には旧マイクアンプ-サウンドカード間で現象が出ていたが、最初に気付いた3dBには足りないので、他にも要因があると思った。
    • マイク電源の回路を見てみたところ、単純にコンデンサ(47μF)で直流カットをしているようなので(→ 類似の回路: 基本的にはこれの上側と同様。ただし、2種類の電圧(12, 48V)用の回路が並列に繋がっている)、その影響を疑った。
      • 測定の前に、直流カットコンデンサとGNDへの抵抗でCRハイパスフィルタになっていると考えて、特性や定数を求めても(→ 計算ツール)、なかなか腑に落ちるものにはならなかった(47μFで40Hzをカットオフ周波数にするには、R(100kΩ)が大き過ぎた)。
    • 入力端子には電圧(48V)が掛かるから、そのままサウンドカードの出力端子に繋ぐと壊れる可能性があるので、まずは電源offで測定した。 → 問題なし(低域はほとんど下がっていない)。
    • 次に、マイク・電源間にコンデンサを入れて電圧をカットして測定した。 → コンデンサの容量によって特性が変化した。旧マイクアンプ経由でサウンドカードに入力した場合、20uFでは40Hzで2.6dB減少した(容量が小さいと、減少度はもっと大きくなる)。
      • コンデンサの影響が出るのでしたくなかったのだが、上で変化がなかったので試した。

測定結果のまとめ

  • サウンドカード → サウンドカード(ライン入力): 問題なし → サウンドカード単体では問題ない。
  • サウンドカード → Scarlett(ライン・マイク入力): 問題なし → Scarlettには問題ない。
  • サウンドカード → 旧マイクアンプ → Scarlett(ライン入力): 問題なし → 旧マイクアンプ単体では問題ない。
  • サウンドカード → 旧マイクアンプ → サウンドカード: 40Hzで2dB程度減少 → 旧マイクアンプとサウンドカードの関係に問題あり?
  • 昔の測定系と現在の測定系でスピーカーの音で特性を比較: 昔の測定系では40Hzで2.3dB程度減少(問題の現象(3dB減少)に近い) → マイクは劣化していない。
  • サウンドカード → コンデンサ → マイク電源(48V on) → 旧マイクアンプ → サウンドカード: 超低域が減少(コンデンサの容量による) → 旧マイクアンプの入力条件によっては問題がある?
    • マイク → マイク電源 → 旧マイクアンプ → Scarlettでは40Hzで1dB未満減少する? (現在の差は2.3dBなので、ほとんどなさそう)
    • マイク → マイク電源 → 旧マイクアンプ → サウンドカードでは40Hzで3dB前後減少する?

※マイク電源からScarlettのマイク入力に入れて測れば、マイクとマイク電源間の状況が分かったかも知れないが、Scarlettが故障したので今はできない。

仮の結論(推測)

  • マイク、マイク電源、旧マイクアンプ、サウンドカードそれぞれの間の結合状況(例: 直流カット処理やインピーダンス)によって低域が減少する。減少度が一番大きいのは、旧マイクアンプとサウンドカード間。
    • マイク → マイク電源 → 旧マイクアンプで1dB未満旧マイクアンプ → サウンドカードで2dB前後、それぞれ減少し、合計3dB前後の減少となるのではないか。(いずれも40Hzにて)
    • なお、旧マイクアンプとサウンドカードの入出力インピーダンスは公開されていない。
    • また、旧マイクアンプの周波数特性(仕様)は20Hz-20kHz -3dB、サウンドカードは10Hz-90KHz -3dBなので、充分にそれらの範囲内なのかも知れない。ただし、サウンドカードの入出力を直結した場合や旧マイクアンプをScarlettに接続した場合には低下しないので、「相性」の問題ではある。
  • Scarlettは問題ない。

その他

  • マイク電源は予想外に大雑把な作りだった。
    • 直流カットはコンデンサのみで行っており、アンプなどの能動素子は使っていない。
    • 2種類のマイク電源電圧(12, 48V)出力をスイッチで切り替えるのだが、それぞれの電圧を掛ける2つの回路がマイクの信号経路に並列に接続されていた。
      • そのせいで、パターンを追って回路を調べる時に戸惑った。
      • Off側の影響はないのかと思うが、分からなかった。
      • 個人的には2つの電圧で同じ回路・配線を使う(使えるように工夫する)方が綺麗でいいと思うが、そこは国民性なのか設計者の思想なのか。
    • それでも、マイク接続時の超低域の低下は1dB未満と推測される(しかも、これは電源と旧マイクアンプとの関係によるものが大きそうだ)ので、実用上は問題なさそうだ。
      • これは、マイクの静電容量が小さいとかインピーダンスが高いことと関係があるのかも知れないが、分からない。
  • 10uF程度のコンデンサでも、充電状態で端子をショートすると、「パチッ」と音が出る。びっくりした。
    • 耐圧(35V程度だった)を良く調べずに使ったので、それで壊れたのかと思ったが、幸い、膨らまず、煙も出なかった。
  • そもそも、数値的には3-4dB(約1.4-1.6倍)で、客観的にはすごく大きい訳ではないのだが、共鳴で強調された音が耳に悪さをしているのではないかと考えているし、超低域はいかにも耳にガツンと来そうなので、そういうちょっとした増加も気になって調べた。あと、グラフで見ると結構大きくなっているように見えることもある。それに、1.4-1.6倍といったら「50%増し」なので、本当に影響が大きいのかも知れない。

(11/24 12:41 若干加筆・修正)

  •   0
  •   0