プリアンプ自作が大体一段落してきたところで、送り出し側のDDCをUSBインターフェースのAmanero Combo 384から、I2SインターフェースのHifiberry Digi+ Pro に変更してみました。
結果からいうと良い方向に進化したため、久しぶりにエア録音する時間がとれたので、Youtubeに動画2つアップしました。ヘッドホンで聴いてください。
01~02_LadiesVocal
https://www.youtube.com/watch?v=lErQGVnBUpM
04~07| Fusion&Classic
https://www.youtube.com/watch?v=D32A4iKKemk
今回も、FaceBookのRaspberry Piでオーディオしま専科 グループで、ごとうさんがお勧めの Hifiberry Digi+ Pro です。
Hifiberry Digi+ ProのマスタクロックをRasPi側に入れることでスレーブモードでI2S信号を取り出し、純粋にI2SトランスポーターとしてDACに入れてあげる、ということのようです。
信号の流れとしては。
RasPi3 -->(I2S)--> Hifiberry Digi+ Pro -->(I2S)--> ES9023黄色基板DAC改 -->(アナログRCA)--> 自作プリ -->(アナログバランス)--> UcD32MPパワーアンプ
となってきます。
購入
上のHifiBerryのオンラインショップでポチってから、国際郵便で10日ほどで届きました。Amanero combo 384 が1万円超えだったのに比べて半額以下なのはうれしいです。
取付け前の事前準備
まず、1年半前に買ったRasPi3のファームウエアが古いと思われ、Hifiberry Digi+ Proに対応できていないだろうからアップデートが必要。
やり方は、ここのページに書いてあるのでそのまま参考にしますが、注意点としては OSがVolumioやMoodeAudioの状態でやらずに普通のRasbianイメージのOSが入ったmicroSDで実行すること。 終わってから元のVolumioなりに戻します。 こうしないとVolumioなどのOSが立ち上がらなくなるリスクが高いそうです。
念のため手順をここにも書いておくと、
- RasbianイメージのOSが入ったmicroSDを作り、RasPiを立ち上げる。このためだけに高価なmicroSDXCを買う必要はなく、Lite版イメージなら安い2GbのmicroSDで足ります。
- rootパスワードを設定する。(下記sudoコマンドを実行するため)
- 下のコマンドを順次実行しそれぞれ完了を待つ。小一時間はかかります。
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get dist-upgrade $ sudo rpi-update
- オーディオイメージのmicroSDXCに戻す
I2S信号の取り出し
続いて、HifiBerry Digi+ ProからI2S信号を取り出すためのピン5本をはんだ付けして、ES9023黄色基板改DACのコネクタ線にコネクタを付けて、接続します。 接続順は、「P6」と書いてあるほうが1番として、
- GND(黄)
- MCLK(橙:接続しない)
- BCLK(黒)
- LRCLK(赤)
- DATA(白)
の順です。
MCLK(橙)を接続しない理由は、DACのクロックをHifiBerry Digi+ Proのマスタークロックで動かすにはES9023側のクロックの回路を1か所改造しないといけないことと、音の面でも若干ES9023側のクロックに軍配が上がるようですので、私もここは繋がず行きます。
試聴
今回、プレイヤーOSはVolumio2.378を試しています。
MoodeAudioの刺激の少ないサウンドとは違って、割とエッジがしっかり立って、音像がかっちりしたHiFiオーディオ的な音ですね。 Hifiberry Digi+ Proとの相性も良いのでしょうね。音場感が向上したため、妙な録音がすぐにわかってしまうようになりました。(汗)
しかし残念ながら、PCでは動くソフトボリウムがスマホでは操作できません。アップデートすれば治るのかな。でもアップデートもトラブルの可能性もあるし。。 →訂正、単なる勘違いでした。。
ということで、今年の集まれ!塩ビ管オフ会の私のデモは、これに自作プリ+UcD32MPパワーアンプ+トルネードフライの組み合わせで行きます。しかしエントリーはしたものの、そもそも仕事で参加が危うい状況なのですが。。
mbedで色んなことが簡単に出来るだろうことはわかったけど、遊びと勉強ばかりでは面白くないので、仕事に何か応用できないかと考えた。
そこでこの時にVB.netで作ったRS485通信のPC内シミュレータを、mbed LPC1114に移植できれば複数台の通信確認が取れるなと考えて、RS485通信トランシーバIC (TE)SN75176BP とブレッドボードその他を購入しやってみました。
今回は、3台分の機器側に成りすますシミュレータをブレッドボード上に配線します。 ブレッドボード上に1台ずつ、計3枚の普通のブレッドボードが必要。
- 購入部品 (LED、抵抗、配線材などは手持ち品を流用)
名称 型番 購入先 数量 単価(税抜) 普通のブレッドボード EIC-801 スイッチサイエンス 3枚 257円(税込) mbed対応マイコン LPC1114-FN28
生産中止(?)品秋月電子通商 3個 120円 RS485/RS422トランシーバIC (TE)SN75176BP 秋月電子通商 3個 80円 ディップSW 5P 秋月電子通商 3個 60円 タクトSW 各色 秋月電子通商 3個 10円
- 配線図
- 電源はトラ技ライタ経由USBから取る。
- ディップSWで局番(今回は1~3)設定可能とする。
- SN75176BPのDE端子は、機器1台なら3.3V印加しておくだけでOKだが、機器2台以上マルチドロップの場合は、マスタからのコマンドに返信するとき以外はバスを解放する必要があるため、マイコンのdp4を返信直前にHigh、返信後20msec後にLowとするソフト処理を行う。
- マイコン側は3.3Vなのでこのままで良いか不安もあったけど動いてるから大丈夫?
- マスタ側ソフトは、このディレイ時間20ms分の待ちが必要。
- この信号のHighの時に赤LEDを点灯させる。
- RS485バスラインのプルアップ抵抗(R5)、プルダウン抵抗(R6)の抵抗値は、実際の路線長で決める必要があると思うのだけど、今回はテストなので小さ目の抵抗を入れてみた。
- 生存確認用にLED1を点滅。 UARTポートと共に割り込みプログラムとする。
- プログラム
- 今回は、仕事の秘匿義務の兼ね合いもあるので非公開です。すみません。
- コーディング・デバグは、ある程度の段階でmbedオンラインコンパイラからエクスポートして、μVision4にて行いました。
- 配線状況
テストなのでヒドイ状態ですね。(汗) 下記動画の際には少しだけ整理しました。
- 動画
PLC側のテスト画面と共に映してみました。ボーレートは38,800bps。
機器1→機器2→機器3と通信先を切り替えてサイクリックに通信します。 機器側が受信し送信中に赤LEDが点灯します。 1回のコマンドで1点灯で、点滅回数分のコマンドを処理しています。
今後も仕事で通信案件が来た時には、こんな感じでシミュレータを作って事前テストするですね。 部品単価が安いので、USB/RS485コンバーターを買うよりずっと安価にできますし。
ここまでテストばっかりやってきたけど、そろそろ実際に動かす何かを作るかなあ。。
まずは現物から
- LPC1114FN28とFT232RL USB/serialコンバーターで、シリアル通信+サーボモーターを回してみる。 以下、準備から実際のプログラムソースまでメモっておきます。
まず頭に入れてくべきこと
- mbedオフィシャルサイト 全てはここから始まる。
- mbedとは:Wikiedia
- mbed と Arduino の違い
準備したもの
- mbed対応のマイコン。今回は、LPC1114FN28 を、秋月電子で購入。 1個たったの120円!(税込)
- USB-シリアル変換モジュール FT232RL 秋月で購入。
- Arduinoスターターキット SGK-ARD-KIT 千石電商で購入 arduino uno 付きで4,940円。 arduino unoの他に付属のセット品が色々入っていて、初めてには良いですね。 arduinoからいじり始めてみたものの、mbedを教えていただいたら断然そちらが面白くなってます。
配線
- 参考
- mbed LPC1114でLチカしてみた(1):しなぷすのハード製作記
マイコンとFT232RLの接続が参考になります。 プログラムを書き込んだあとリセットしなくても済みます。 なお、書き込みソフトはこのページの要領ではなく、LPC1114限定で下記ページのものが使いやすいです。 - mbed LPC1114でLチカしてみた(2):しなぷすのハード製作記
LPC1114限定で「LPCISP」というソフトを公開しておられます。USB/serialコンバーター経由で一発書き込み、即座にリセットが働くので、楽ちんです。
- mbed LPC1114でLチカしてみた(1):しなぷすのハード製作記
- ハード図
ブレッドボードを使うとテストは楽にできるけど、一度バラしたら再現するのが面倒になっちゃいますんで、ちゃんと図面を書くクセをつけたいですね。今回は資料への使いまわしがしやすいようにEXCELでこんな感じで書いてみました。- LPC1114のLED回路はソース出力(PNP)でプラスコモン、FT232RLのLEDモニタ回路は、シンク出力(NPN)でマイナスコモンになっているみたいで、ちょっと混乱します。
工業用制御部品に関していえば、日本国内やアジア圏ではシンク(NPN)でマイナスコモン、欧州ではソース出力(PNP)でプラスコモン が多いですが、欧州への輸出時にはCEマーク表示の関係で本質安全の考え方から必ずPNPにしないといけなくなるため、国内でもPNPへの変更が徐々に進んでいる・・ のかなあ?
組み込み部品での状況は全くわからずです。
- LPC1114のLED回路はソース出力(PNP)でプラスコモン、FT232RLのLEDモニタ回路は、シンク出力(NPN)でマイナスコモンになっているみたいで、ちょっと混乱します。
プログラム
mbedはarduinoと違い、ほぼ素のC/C++で書けます。 オンラインコンパイラでビルドが通ったプロジェクトをエクスポートして、外部のIDEで編集・コンパイルできることからもそれを実感できます。
とはいえまずはオンラインコンパイラで。
使用ライブラリ
- Servo
mbedのオンラインコンパイラ上の「Import」でキーワード「Servo」で検索し、sford cstyles さんの mbed R/C Servo Libraryを試しに使ってみました。 - MySerial
自作ライブラリ MySerial です。mbed標準のRawSerialクラスを継承し、受信文字列のchar配列格納を簡単にできるようにしてみました。 現時点でのソースを貼っておきます。- GetString メソッドは、テンプレート化でオーバーロードしてあり、引数にポインタ変数指定でも char配列指定の参照でも使えるようにしました。
- Wait時間の設定を追加してあります。
その他APIは、こちらを参照。
- MySerial.h
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
- | | | | | | | | | ! - | | | | | | | | | | | | | | | | | | | | | ! - | | - | | | ! | | - | | | ! | | - | | | | ! | | - | | | | ! | - | ! | | | | | !
/** mbed Serial Library extend RawSerial * Copyright (c) 2014 Naoki Okino * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef MBED_MYSERIAL_H #define MBED_MYSERIAL_H #include "mbed.h" /** MySerial control class, based on a RawSerial * * Example: * @code * #include "mbed.h" * #include "MySerial.h" * * MySerial pc(USBTX,USBRX); //instance of MySerial Class * char cWord[16]; //receive chars or cWord[256], cWord[1024] etc.. * * void readbuf() * { * // int iRtn = pc.GetString(6,&cWord); //Serial received chars by pointer cWord * int iRtn = pc.GetString(6,cWord); //Serial received chars byref of cWord * } * int main() { * pc.baud(9600); //set baud rate * pc.format(8, MySerial::None, 1);//set bits for a byte, parity bit, stop bit * pc.SetRxWait(0.01, 0.001); //set wait getting chars after interrupted, each char * pc.attach( readbuf, MySerial::RxIrq ); //Set Interrupt by Serial receive * } * @endcode */ class MySerial : public RawSerial{ public: /** constructor to get chars received by serial * * @param PinName tx * @param PinName rx */ MySerial(PinName tx, PinName rx); /** set wait getting chars after interrupted * * @param float _fRxStartWait wait getting a 1st char after interrupted * @param float _fRxEachWait wait getting each char */ void SetRxWait(float _fRxStartWait, float _fRxEachWait); /** function to get chars after received chars by serial * * @param int size for get chars * @param *cWord returns got chars by pointer * @param returns success by 0 */ virtual int GetString(int size, char *cWord); /** overload function to get chars after received chars by serial * * @param int size for get chars * @param cWord returns got chars by ref * @param returns success by 0 */ template <class X> int GetString(int size, X cWord) { return GetString(size, &cWord); } protected: float fRxStartWait; float fRxEachWait; }; /* class MySerial */ #endif
- MySerial.h
- MySerial.cpp
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 31 32 33 34 35 36
- | | ! - | | ! - | | | | | | - - | ! | - | - ! | | ! !
#include "MySerial.h" MySerial::MySerial(PinName tx,PinName rx):RawSerial(tx,rx) //constructor { fRxStartWait = 0.01; //wait getting a 1st char after interrupted fRxEachWait = 0.001; //wait getting each char } void MySerial::SetRxWait(float _fRxStartWait, float _fRxEachWait) { fRxStartWait = _fRxStartWait; //wait getting a 1st char after interrupted fRxEachWait = _fRxEachWait; //wait getting each char } int MySerial::GetString(int size, char *cWord) //by pointer { int i=0; int ichar; memset(cWord, '\0', strlen(cWord)); //initialise chars wait(fRxStartWait); while(1) { if(!readable()) { break; } ichar = getc(); if(i<size) { cWord[i] =ichar; //putc(ichar); } i++; wait(fRxEachWait); } return 0; }
- MySerial.cpp
メイン
- シリアルコマンド
ただの実験なので、<STX><ETX>などの制御コマンドは一切無しです。(汗)- 「start」で開始
- 「pxxx」(xxxは角度)で位置決め
- 「stop」で停止
です。
- 受信の割り込みと、50ms定時タイマ割り込みを受けてメインで動作及びLチカさせてみました。
- 割り込みのIRQ変数名は、シリアルが「UART_IRQn」、定時タイマが「TIMER_16_0_IRQn」でしたので、割り込み優先度や割り込み禁止を個別に管理できます。 この辺の定義は、こちらに全部書いてありますね。
- まだ試していませんが、フロー制御を入れないと9600bps以外では取りこぼしが発生します。
- ソース
volatile のつけ方などわかっていないので、まだ適当です。- main.cpp
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
- | | ! - - ! ! - | | - ! | - | | - | | - | | | - | ! - | | ! ! - | | - | ! | | | | | | | | | | - | | | - | | | ! | | - | - | | ! | - ! ! !
#include "mbed.h" #include "Servo.h" #include "MySerial.h" Servo myservo(dp18); MySerial pc(USBTX,USBRX); //instance of MySerial Class Ticker timer; DigitalOut led2(LED2); //alive check LED volatile int cntRx=0; volatile int cntRx_old=0; volatile int timeUp=0; volatile int timeUp_old=0; char cWord[6]; //receive chars or cWord[256], cWord[1024] etc.. char *pCword = cWord; //pointer for cword const char ccStart[6] = "start"; const char ccStop[5] = "stop"; const char ccMove_[2] = "p"; int readSize = 5; int doStatus; int iDeg; void atRx() { NVIC_DisableIRQ(UART_IRQn); cntRx++; } void atTimer() { //NVIC_DisableIRQ(TIMER_16_0_IRQn); timeUp++; } void readbuf() { pCword = cWord; //pointer for cword //int iRtn = pc.GetString( readSize, &cWord[0] ); //Serial received chars by pointer of cWord int iRtn = pc.GetString( readSize, cWord ); //Serial received chars byref of cWord if(strcmp(cWord, ccStart)==0) { // start doStatus=1; printf("started\n"); } else if(strcmp(cWord, ccStop)==0) { // stop doStatus=0; printf("stopped\n"); } else if(cWord[0]==ccMove_[0]) { // 1st char matches pCword++; // increment pointer to get after 2nd chars iDeg = atoi( pCword ); printf("%d\n",iDeg); } else { //no action except for start/stop printf(" no match %s\n" , cWord); } if ((doStatus == 1) && (0 <= iDeg) && (iDeg <= 180)) { wait(0.01); // waits for the servo to get there myservo.position(iDeg - 83.0); } } int main() { pc.baud(9600); //set baud rate pc.format(8, MySerial::Odd, 1);//set bits for a byte, parity bit, stop bit //pc.format(8, MySerial::None, 1);//set bits for a byte, parity bit, stop bit //pc.set_flow_control(MySerial::RTSCTS,dp26,dp25); pc.SetRxWait(0.01, 0.001); //set wait getting chars after interrupted, each char wait(0.25); //startup wait pc.attach( &atRx, MySerial::RxIrq ); //Set Interrupt by Serial receive NVIC_SetPriority(UART_IRQn, 120); timer.attach( &atTimer, 0.05 ); NVIC_SetPriority(TIMER_16_0_IRQn, 10); myservo.calibrate(/* range */ 0.00099, /* angle +/- */ 90.0); while(1) { wait(0.01); if(cntRx != cntRx_old) { readbuf(); cntRx_old = cntRx; NVIC_EnableIRQ(UART_IRQn); } if(timeUp != timeUp_old) { if( 10 <= timeUp ) { led2 = !led2; timeUp=0; } timeUp_old = timeUp; //NVIC_EnableIRQ(TIMER_16_0_IRQn); } } }
- main.cpp
引き続き、mbedをいじってます。
先日入門したばかりでもとても便利と感じるmbedのオンラインコンパイラ。
オンライン上で先人の公開したライブラリやプロジェクトをさくっとインポート出来たり、自分のPC環境に依存しない、デバイス毎に異なる設定などは予め設定済みで、マイコンの種類を変えても少しの変更ですぐに移植できる、などなどとても良くできていて、私のような初級者には大変ありがたいものであります。
しかしですね、、やっぱりIDEでオフラインコンパイル、ステップ実行デバグをやりたいですね。 ということでmbedと先人の知恵を頼ってやってみました。
- 概要
トランジスタ技術2014年3月号には付録にトラ技ライタが付いてくる。 これをEIL-MDK(μVision4)でコンパイルしたバイナリをCMSIS-DAP経由でマイコンにロードするのと、デバグで使います。 UART(USBシリアル)は同時に使えなかったので(やり方がまずかった?)相変わらずFT232RLを繋げています。
もっと楽をしたい方は、素直にSwitchScienceでLPC1114のmbedボードを買ったほうが良いと思います。。たぶん。
→その後、UARTもCMSIS-DAPも同時に接続できるようになり、FT232RLは不要になりました。
- 接続図
左図ではUART(USBシリアル)用にFT232RLを入れていますが、これは不要になり右図のようにトラ技ライタ側のUARTポートからTx,Rxに繋ぎます。
- 現物
左図のブレッドボードの上段左側がトラ技ライタ。右側がLPC1114マイコンとUSBシリアルFT232RL。 右下のは次回テスト予定のRS485ドライバチップとディップSW。 右図はFT232RL無しの最終状態。
- μVision4でデバグポートにトラ技ライタを指定したところ。 速度は10MHzでも行ける。 μVision5では100KHzまでしか出なくて断念した。 →その後、トラ技のファームウエアではなく、このページのファームウエアに書き換えた後で、トラ技ライタをUSB接続した状態でこのページのUART最新ドライバをインストールしたところ、無事に全て使えるようになりました。 μVision側設定画面はこうなりました。 Windows8.1上のデバイス表示に、3つの接続が出現していればOK。 1つしか出ない場合は、USBドライバがインストール出来ていないです。
- 割り込みイベントが発生すると、デバグがここで止まってしまい再開不能でマイコンをリセットすることになる。
今のところ解決策がありません、どなたかご存じの方、Help me。もしかするとリアルタイムOS使っていないとだめなのかな? デバグしなければきちんと動くんだけど・・
→これもトラ技のファームから変えて、さらにnRESET配線1本をきちんと結線することでOKになりました。 nRESETを結線すると、LPC1114に付けたタクトSWでリセットできなくなるので、その際には毎回ライタからのnRESET結線を外してSWを押す、という操作が必要になります。
→上のほうの接続図のようにnRESET中間に1KΩの抵抗を入れることで、そのままリセットも効くようになりました。正しい回路ではないと思いますが、実用上は今のところ問題ありません。
参考:
- トラ技ARMライタを mbed interface にする(LPC1114FN28編)
まさにこれ!と思ってここのファームウエアを試してみましたが、UART(comポート)が出てこない、CMSIS-DAPが出てこない、という状態で断念。 PCがWindows8.1だからかなあ。。
→再度試したところ、下記ページにあるUARTドライバをインストールしたら全てOKになりました。
但し上のページの結線は、何かおかしいです。nRESETの配線が別のところへ行っている気がします。- μVision4でデバッグ!(mbed-MACRUM)
トラ技ライタでは無くファームウエアはここのものは使いませんが、作業の流れはこれが近いです。ファーム書き換え後のUARTドライバはここからダウンロードしてインストールします。 - Keil MDK-ARM v4 のダウンロード
このページのv4のリンクより。 ライセンスフリー版では32Kbの制約があります。v5は通信速度が出なかったです。→これも再度確認したら問題ありませんでした。 - mbedをIDEで使う(野良2-mbed)
μVision4のあたりが詳しいです。
- μVision4でデバッグ!(mbed-MACRUM)
- トラ技のページ
ファームウエアはここから「トラ技ARMライタ基板をCMSIS-DAP(デバッガ)として使うときのファームウェア」をダウロードして流し込みます。→当初はこれでやっていましたが、後で別のファームでOKになり不使用です。- トラ技2014-3月号
ここでまだ買えます。(マルツパーツ館) - 部品セットはここで買えます。(マルツパーツ館)
- トラ技2014-3月号
次回は、この時に仕事で作ったPC上のVB.NetなRS485シミュレータを、LPC1114マイコンに置き換えて通信してみるテストです。
昨日の2017年stereo誌自作スピーカーコンテスト授賞式・試聴会の会場で12/19発売予定の書店より早く販売されていた、「極上の音質改善機器シリーズ」Pioneer製USB型ノイズクリーナー「APS-000T」を買ってきて試しています。4,600円。 今回発売される2機種には、USBジャックが付いておりスルー接続が可能となっています。
実は最近、あまり音楽を聴く気になれずアンプに火を入れることすら少なく、耳が元の音に慣れていません。 そんな中でこれをRaspberryPi3+のUSBポートに差してDDCのAmanero Combo 384の間に入れて試聴しているわけですが、そうしたエクスキューズを前提とした上で言えば、音質が向上していると感じています。
具体的にどこが変わったか?というと、ノイズフロアの低下、高域のフォーカス向上、音像周辺の空気感(?)。
まあこれは私の耳のプラシーボ効果もあるので、興味のある人は12/19以降に書店に立ち寄ってみて購入し、ご自身の耳で確認してくださいな。
5月の日記で、緑基板のDACの出力部分の改造をして、満足のゆく音が得られていました。
ただ、Raspberry Piでオーディオしま専科 グループの改造作者の方は、黄色基板の改造で実施しています。
実は、黄色基板も2枚ほど買ってあって、在庫していました。 1枚1,000円ほどですんで、これでよい音が出ればすばらしいです。
改造前は、緑基盤の時と同様にざらついた感じでしたが、改造後は滑らかさが出ていい感じです。 緑基盤との比較では、高域が少し押しが強く、低域は伸びを抑えてキレが良い方向です。
好みは分かれるところだと思いますが、現段階ではこの黄色基盤のほうが音がフレッシュで良いですね。 1個千円程度で買えるので、改造費がその半分くらい上乗せでかかりますが、それでもコスパは最高。
なお、Raspberry Piでオーディオしま専科 グループの後藤さんの改造個所に倣っていますが、コンデンサメーカーが違ったり、タイプが違ったり、容量が少し違ったり、一部取り付け位置がわからず付けていないものがあったりしています。 完全にコピーすればきっともっと良い音になると思うのですが、これ以上良い音になってもスピーカーがボトルネックで違いがわからないと思います。
なお、出力RCAジャック手前の抵抗は560Ω、ポリエステルフィルムコンデンサは2700pFです。
1曲、ソフィーミルマンの曲を録音してみました。
https://www.youtube.com/watch?v=1C5nk9GqbYg
また中途半端な状態ですが、私はこの時点ですでに満足しています。 ありがとうございます!
オリジナルの投稿
https://www.facebook.com/groups/rasp.audio/permalink/481413312052018/
5年間、安定稼働を続けていた、我が家のVMware ESXi 仮想化サーバー。 ところが去る2月15日に、マザーボードが突然死。
2日後に、中古で暫定版のマザーボードをどうにか探して買ってきて、何とか立ち上げました。
しかしその後、1週間に数回ほどサーバーが落ちる現象の原因がわからず。 単身赴任先から自宅に連絡して、家族にリセットしてもらっていました。
しかしこんなことを続けているわけにもいかないので、今後は構成を一気にシュリンクして、オーディオプレイヤーとしても使っているワンボードコンピューター、RaspberryPi3 へ移行することを決めました。断捨離です。
有難いことに、このサーバーで稼働中の、集まれ!塩ビ管スピーカーの経費でハード費用を支出いただけることとなり、1万円に収まる金額ですが有効に活用させていただくことにして、現在移行作業中です。どうもありがとうございます。
既に、なーお'nWEBと集まれ!塩ビ管スピーカーのWEBサイトは移行済み。WEBサーバーはApacheではなく軽量高速なnginx。 それでもハードのスペックが低いため、少しレスポンスが遅いですがどうぞご容赦を。 他のアーカイブサイトも今日中に移行完了の見込みです。 その後、メールサーバー移転に着手・・
それにしても、いくつものXOOPS Cubeサイトを動かしてしまうRasPiサーバー、恐るべき実力ですね。
(追伸)
運用開始後、サーバーダウンが頻発。再起動しても立ち上がらない。
php-fpmのログを見ると、
WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
これは、子プロセスの設定がうまく行っていないということらしい。
参考:php-fpmのエラーにぶつかりながら設定の最適化を図る
/etc/php/7.0/fpm/pool.d/www.conf
; pm.max_children = 5 pm.max_children = 20 ; pm.start_servers = 2 pm.start_servers = 4 pm.min_spare_servers = 2 ; pm.max_spare_servers = 3 pm.max_spare_servers = 6
これで安定してくれることを願います。。
...
Android なスマフォ IS11CA。
出張時に持ち歩くとき、オーディオプレイヤーとして使い、できるだけ高音質で聴きたい。
ところが、IS11CAにインストール済みのオーディオプレイヤーでは、愛用してきた (SanDisk) SANSA e280 + RockBox で使えていた、WMA v9(VBR)フォーマットが再生できないことが判明。。
右往左往して試した結果、最後はRockBoxに緊急着陸した話のメモ。
標準のプレーヤーで再生できないなら、マーケットプレイスでもFreeなプレイヤーが沢山あるさ。 そう思ってあれこれインストールしては試してみたが、 ほとんどの「wma再生可能」と書かれたプレーヤーでも同様に再生できなかった。。
試した中で再生できたのは、こちらの記事にも書かれていたように、以下の2つだけだ。
- RockPlayer
- yxPlayer
いずれも音質はまあまあ、強いて挙げればRockPlayerの方が上か。
しかし、残念なことに、どちらも再生中にホーム画面や他の画面に遷移すると再生を中断してしまう。。 これじゃ使えないじゃん。
ネットを彷徨い、 まさかね、と思って 「RockBox Android」で検索してみたら、このページがひっかかった。
Android版Rockbox - 試行錯誤的知的生活blog
なんと、ファームウエアとして作られてきたRockBoxを、Androidのアプリにしてくれているとな! うっひょー。
インストールの前に、プログラムの入手。 方法は
- Rockboxのページからapkを手に入れる。
- 開発中のプログラムを自力でapkにコンパイルする
- 個人配布のapkを使ってみる(人柱用)
当然のように、-3の方法で「rockbox_110315_480x800_v110409.apk」を有り難くダウンロードさせていただくことにした。
microSDHCに.apkファイルをコピーし、別途インストール済みのファイルマネージャアプリ上でこのファイルを選択することで、無事にインストールできた。
起動すると、日本語が全部豆腐になっていて読めない。 上記ページにあるようにフォントをインストールすれば問題無くなった。(文字がちと小さすぎるけど、許容範囲) WMA-V9、VBRフォーマットも無事に再生できた。
フォントの変換が便利。 このページがわかりやすい。
で、肝心の音質は、聞きなれたRockBoxの音の匂いがする。 これですよ、これ。 まあ、ファームウエアそっくり入れ替えたわけではなく、Android上で動いていることもあって、e280の音質には敵わないのは仕方のないことろか。
そして、ページを遷移してもしっかり再生を継続することと、 電話の着信時には問題無く通話に切り替わり、通話終了で勝手に戻ってきてくれる点、3種類のウイジェットまで準備されている点など、予想以上に完成度が上がっていて嬉しい。
ということで、32GBのmicroSDHCをぽちっとしてしまったのである。
KORGのDAC,DC-DAC-10を買いました!
早速、サーバーの仮想ゲストWindowsXP pro-SP3にインストールし、 CDをDSD5.6Mbpsにリアルタイムアップサンプリングして聴いてみました。
元々、(Javs)X-DDC -(S/PDIF光)- (Accuphase)DC-61 で聴いていたので、それとの比較になります。 アンプは、(Marantz)PM-14SA-v2、及び、stereo誌付録の(Luxman)LXA-OT1(オペアンプ変更)で聴いてみました。
音出し当初は、PCM-44.1Khzで、ちょっと透明感・音場感が減った感じ。 高域のキツさはDC-61よりは軽減。 よくも悪くもあっさりしている気がした。
次に、DSD5.6Mbpsにリアルタイムアップサンプリングで。
PCが仮想PCなのでパワーが心配だったけど、20%程度で収まっている。 けれども、結構な頻度でプチプチノイズが入ってくる。 リソースの関係なのか、それとも仮想PCであることでのジッターノイズなのかは不明。
試しに、Windows7-proの実PCで聴いてみたが、こちらはCPUパワーも余裕があるので、ノイズはほとんど入らない。
さて肝心のDSDアップサンプリングの音はどうかというと、確かに清涼感漂う音に変化し、ボリウムを上げて長時間聴いても疲れない音だ。
DACチップに、(Cirrus Logic) CS4398 が使われている。この石は、(Marantz)のSACDプレーヤーSA-13やSA-15あたりでも使われているもので、何となく音の傾向が似通っているような気がしないでもない。まあそちらもしっかり聴いたことがあるわけではないので、そんな気がするという程度の話だけど。
低域は実に歪感の少ない音に変化した。 自作スピーカー「スター」の低域の傾向もあって、そのあたりが良く分かって、これはかなり好印象。
現時点では、PC - USBハブ(セルフパワー) - DC-DAC-10 という接続でUSBバスパワーで聴いている。
巷では、(Aurorasound) BusPower-Pro を電源として挟むと良くなるとの情報があるし、USBケーブルも手持ちのものを仮につないだだけなので、SUPRA USB2.0 ケーブルあたりを試してみようかとも思っている。
本当に満足できる音がでれば、DC-61を手放せるのだが・・ 思った以上にDC-61の音は透明感が高いということがわかってしまったので、ちとハードルが高くなったかも。
USBサウンドカード、(JAVS) nano/V を試しに買ってみました。
結論からいうと、既に所有していたUSBサウンドカード、(AudioTrack) PRODIGY CUBE に首の差で若干届かない程度の音でした。(光アウト+ASIO4ALL 限定比較)
実は、今日の今日まで、PRODIGY CUBEの音質はあまり高くないと思っていました。 その理由は、日頃使っていたノートPC (ThnkPad T42)にUSB接続して光アウト、AccuphaseのDC-61に入れた時、ジッターレベル1(±50ppm)でロックされず、レベル2(±1,000ppm)となりSFC(Sampling Frequency Converter:44.1KHz→48KHz)が働いて音が悪くなっていたからです。
ところが今日、試しに(ASUS)M2NPV-VMマザーで組んだPCにUSB接続してみたところ、なんとレベル1でロックしているではないですか!
これって、PCが悪かっただけって事だよね。。
それでは物は試しと、仕事で取引先から貸与していただいているLet's Note CF-Y8 から繋げてみたところ、こちらもレベル1でロックしました。 やっぱりT42が悪かったのか?
で、届いたばかりのnano/Vでも試してみたところ、Cubeと同じ結果。結論がでました。・・
冷静になってまとめておきます。
PC | T42 | Y8 | M2NPV-VM |
Chipset | i855PM | GM 965 Express | GeForce6150 +nForce430 |
サウンドカード | |||
Prodigy Cube | Level2 | Level1 | Level1 |
JAVS nano/V | Level2 | Level1 | Level1 |
Onkyo SE-90PCI(参考) | - | - | Level1 |
教訓としては、PCオーディオは繋げてみないとわからないんだ、ということ。 何か事前にわかる指標のようなものは無いのだろうか。
今後のオーディオPC選定が難しくなったなあ。