電子ガジェットいろいろ

電子系のガジェットやアプリ開発等の話題を書いてます

SONY NW-A55 低価格ながらDSEE HXは優秀です

圧縮された音楽ファイルをハイレゾ相当の音質にアップサンプリングするDSEE HXが気になりNW-A55を買いました。

Xperia XZ1も持っているので、DSEE HXの実力は分かっているのですが、DAPと根本的な音質が違うのと、AIを搭載してさらにパワーアップしてるので気になっていました。

巷で絶賛されている機種ですが、個人的な率直な感想を書きます。

最近市場価格2,3万円クラスのDAPは良いものが多いので、総合的なハイレゾプレイヤーとしての音質の評価は同価格帯のものの中では特段目立つほど良いものでは無いと思います。音の傾向は違いますが、所有しているHiBy R3SHANLING M2Sと総合的な音質では同レベルで、後は好みの問題だと思います。
個人的には今でもSHANLING M2Sが一番解像度がも高く感じ、立体感もあり好きな音です。
DP-S1Aと比較すると、さすがにランクが違うというか、全体的に劣ります。

Xperia XZ1と比較すると、やはり専門プレイヤーなので音は太くなり立体的に感じるようになります。

他のDAPと比較すると少し全体的にデジタルで味付けされている感じがします。

UIは日本メーカーらしい操作感で扱い易いと思います。総合的には、この価格帯で迷ってる人にはお勧めできる機種だと思います。

DSEE HXはかなり優秀だと思いました。DP-S1Aにも同じようなハイレゾ化機能があるのですが、この点はNW-A55の方が良いです。
NW-A55が中間ビットを補完して解像度を上げて滑らかにしているような感じだと思うのですが、それに加えてNW-A55はさらに圧縮時に失われた部分をAIで予測して良い意味で味付けしてるような感じになっています。

mp3音源を聞く環境としてはかなり優秀なDAPです。
割と早くからデジタルプレイヤーを使用してmp3音源がたくさんあるので、すべて入れてライブラリ的な立ち位置のDAPになりました。


aptX HDは想像以上でした JPRiDE R1

最近は外出時に3,000円位のaptX対応のワイヤレスレシーバにTFZ SERIES2を付けたのを持ち歩いてたのですが、立て続けにNICEHCK M6Yinyoo D2B4を手に入れたので、どちらかをワイヤレスにして持ち歩くことにしました。
今までのものが2pinだったので、mmcxで何か良いものが無いか探して少々価格が上がってしまいましたが、JPRiDE R1に決めました。

特徴は色々あるのですが、決め手はAACとaptX、更にはaptX HDに対応していることでした。
aptXでも音質は良いと思ってましたが、aptX HDは聴いてみると違いが分かるくらいに更に良くなり、有線とそんなに変わらない感じがします。

また、マルチペアリング機能があり、普段iPhoneandroidを持ち歩いているので、2台同時にペアリングできる機能は便利です。
同時に音が聞こえるわけではなく、後からの出力が優先されます。

接続も今まで使用してきたものの中では切断されにくく安定しています。

有線での接続と比較すると低音が弱くなり、元々低音よりのYinyoo D2B4で使用することにしました。

1万円以下のレシーバーでaptX HD対応やここまで安定しているものは他にないと思うので、おすすめできます。

Yinyoo D2B4 私的レビュー

前に"NICEHCK M6 私的レビュー"で紹介したのと同じ構成の2DD+4BAのYinyoo D2B4が気になっていたので、入手してみました。

今度は箱出し1発目からクリアで音のバランスも良く、初めから好印象でした。一晩エージングしてみましたが、違いは判りませんでした。
NICEHCK M6と比較すると低音よりで、だからと言って高音も籠るようなことはなくクリアです。男性ボーカル等の中音が少し遠く感じました。傾向としては低音よりのドンシャリ型です。

Yinyoo D2B4の特徴は低音だと思います。
沈み込むようなバスドラムやリズミカルなベースの音が気持ちよく聴こえます。
低音が強めですが、他ドライバのおかげか低音に引っ張られることもなく、中高音もクリアです。

解像度も高く感じ、細かい音も潰れることもありません。
多ドライバらしく、音が多い時でもゴチャゴチャした感じにならずにしっかり鳴らしてくれます。

NICEHCK M6Yinyoo D2B4は総合的な性能は同等だと思います。音の傾向から一様に比較することができないので、普段の持ち歩きをどちらにするか迷います。その時の気分でどちらを持ち出すか決めようと思います。

KZの多ドライバ等の低価格多ドライバイヤホンと比較すると、この価格帯のものは本当に各音域のつながりやバランスが良く感じます。

ザナドゥの話

先日実家に行った際に発見してしまいました

MSXザナドゥです。

中身もしっかり残ってます。

現在所有しているMSX関連の物は数年前から集めたものであり、MSXが現役の頃から残ってるものはもうないと思ってましたが、なぜかこれだけ残ってました。

今まで周りにはザナドゥをしっかりやってるように話してましたが、実はLevel2までしかやってませんでした。
当時PCでゲームをしてたほとんど人は持ってただろうザナドゥは私も例外なく買ってしまいましたが、別のゲームにはまっていました。
なぜMSX2版ではなくてMSX版を買ったかはよく覚えてませんが、当時からMSX版の方が評価がよかった気がします。

試しに起動したところバックアップ用電池が切れてました。
カートリッジは裏でネジで止まっているので、簡単に開けられます。
お決まりの端子付きCR2032が使用されています。

今度こそ最後までやろうと思い、端子付きとりあえず注文して届きましたが、まだ交換してません。
どうせならセーブデータがファイルで残った方が良いと思いオークション等を物色したところ、リバイバルザナドゥを入手しました。

まだインストールだけした状態ですが、今度こそ最後までやろうと思います。

NICEHCK M6 私的レビュー

久しぶりのイヤホンのレビューです。

今回はNICEHCK M6です。

ドライバは個人的に最多の2DD+4BAです。
オリジナルノズル:バランスの取れた音、ゴールデンノズル:低域強調、シルバーノズル:高域強調と3種類のノズルを交換して好みの音質で楽しむことができます。

箱出し1発目の印象は最悪でした。やけに低音だけ目立ち、高音が弱く籠ったような感じでした。低音強調タイプの安物イヤホンのようでした。
ところが、いつも通り一晩エージングしてみたところ、ものすごくフラットに近い弱ドンシャリっぽいバランスに変化し、細かくクリアな音質に変化しました。
エージングして何となく変わった気がするどころではなく、全く別物になりました。
届いた日がものすごく寒い日だったので、ドライバが固くなってたのかもしれません。(そんなことはあるのでしょうか?)

イヤーピースをSpinFit CP100にしたところ、低音が強くなったので、シルバーノズルに変更したところちょうどよい弱ドンシャリ傾向になりました。

解像度が高く、多ドライバらしく各音域の音がバランス良くクリアに聞こえます。音が多くてもぼやける感じがしません。
KZの価格帯の多ドライバイヤホンと比較すると、格の違いが分かるほどです。

部屋のような雑音が少ない場所ではフラットが好みで、TFZ KING PROを使用してます。外のような雑音のある場所ではフラットではつまらいので、TFZ SERIES 2を持ち歩いてたのですが、今はNICEHCK M6を持ち歩いてます。

本当の意味での多ドライバの実力が分かるイヤホンですので、大変満足してます。

PC-9801NS/L再生

ふとPC-9801の白黒液晶のノートが欲しいと思いいろいろ調べてたら、意外と簡単にジャンク品を修理できそうだったので挑戦してみました。
1度目はPC-9801NS/Aのジャンク品を送料込みで3000円位で入手したのですが、電源が入るまで復活したものの、”system shutdown”とエラー表示され、これ以上いくら調べてもわからないので断念。
2度目にPC-9801NS/Lのジャンク品を同じく送料込みで3000円位で入手して修理で復活できました。

まず起動しない場合は電源部分のコンデンサの液漏れ等が原因で容量抜けしている場合があります。
特にこの頃に使用されていた4級塩電解コンデンサは液漏れしている可能性が高いです。
f:id:uosoft:20190104011902j:plain
PC-9801NS/Lの電源部にある2個のコンデンサ(10uF 16V, 4.7uF 35V)を交換してみました。
f:id:uosoft:20190104022713j:plain

これだけで起動してしまいました。
f:id:uosoft:20190106021816j:plain

この後さらにPC-9801NS/Tも挑戦してみました。
ところが、電源が入り画面も明るくなるところまで行きましたが、ピポ音が鳴らず、画面には何も表示されず。
他のコンデンサも交換してみましたが、改善されず。
もう古いもののため、電源以外にも問題があるものも多く、意外と難しいです。

蘇るPC-9801伝説 永久保存版―月刊アスキー別冊

蘇るPC-9801伝説 永久保存版―月刊アスキー別冊

蘇るPC-9801伝説 永久保存版 第2弾

蘇るPC-9801伝説 永久保存版 第2弾

YAMAHAのFM音源IC(YM2413)の使い方の基礎

過去に"YAMAHAの音源IC(YMZ294)の使い方の基礎"でPSG(SSG)音源のYMZ294の使い方の基礎を説明しましたが、今回はFM音源の中で一番簡単なYM2413(OPLL)について説明します。

この音源は音色データを内蔵しているので、複雑なパラメータを指定しなくてもすぐに音を鳴らすことができます。

今回もArduino Unoで制御しますが、理解すればmbedでもPICやAVRで直接制御するにせよ同じ方法で使うことができるはずです。
初期処理から基準のA(ラ,440Hz)の音を出力するまでの手順を説明します。

個々のレジスタの情報等の詳細な仕様はアプリケーションマニュアルを参照ください。

http://d4.princess.ne.jp/msx/datas/OPLL/YM2413AP.html

ハードウェア

下の回路図のようにArduinoとYMZ294を接続しています。

Arduino 2:9 - YM2413 D0:D7
Arduino A0 - YM2413 IC
Arduino A1 - YM2413 CS
Arduino A2 - YM2413 WE
Arduino A3 - YM2413 A0

出力はメロディー出力のMOとリズム出力のROと別れてますが、今回はメロディー出力のみ使用します。
出力は小さいので、アンプを別に通すなり、アンプ回路を組むなりしてスピーカーやイヤホン等に接続してください。、

実際に動作させるまでの処理

IOの設定

まず、Arduinoに接続されたピンに対して便宜上名前を付けます。

const byte IC_PIN = A0;
const byte CS_PIN = A1;
const byte WE_PIN = A2;
const byte A0_PIN = A3;
const int DATA_PIN[] = { 2, 3, 4, 5, 6, 7, 8, 9 };

setup()内ですべて出力に設定します。

for (int i = 0; i < 8; i++) {
  pinMode(DATA_PIN[i], OUTPUT);
}
pinMode(CS_PIN, OUTPUT);
pinMode(A0_PIN, OUTPUT);
pinMode(IC_PIN, OUTPUT);
pinMode(WE_PIN, OUTPUT);
レジスタ書き込みファンクション

音源ICの機能は全てレジスタにアクセスすることで制御できます。
これは同じYAMAHA製のFM音源ICも含めて基本的なことなので、この概念を理解すると他の音源ICもレジスタの仕様をチェックするだけで使えるようになります。

CS_PINがLOWの状態でDATA_PINにバイトデータをセットし、CS_PINをHIGHにするとバイトデータがYM2413に送られます。このときA0_PINがLOWの場合はレジスタのアドレス、A0_PINがHIGHの場合はレジスタに入れる値となります。
すぐにCS_PINピンの状態を変えても反応しないことがあるため、アドレス書き込み時には12us程度、データ書き込み時には84us程度ウェイトを入れます。

この方法でレジスタに値をセットするファンクションを定義します。

void set_register(byte addr, byte value)
{
  // addr
  digitalWrite(A0_PIN, LOW);
  digitalWrite(CS_PIN, LOW);
  for (int i = 0; i < 8; i++) {
    digitalWrite(DATA_PIN[i], bitRead(addr, i));
  }
  delayMicroseconds(12);
  digitalWrite(CS_PIN, HIGH);

  // value
  digitalWrite(A0_PIN, HIGH);
  digitalWrite(CS_PIN, LOW);
  for (int i = 0; i < 8; i++) {
    digitalWrite(DATA_PIN[i], bitRead(value, i));
  }
  delayMicroseconds(84);
  digitalWrite(CS_PIN, LOW);
}
YM2413の初期化

動作の初めにYM2413を初期化します。
ICをLOWにし、100us程度間をおいてからICをHIGHにするとすべてのレジスタが0でリセットされます。
また今回はレジスタに書き込む程度の操作しかしないため、WEをLOWにしておきます。

リセット後にすぐにレジストを操作しても動作しないことがあるので、最後に1秒程度のウェイトを入れてますが、もっと短くしても大丈夫です。適当に調整してください。

この方法で初期化するファンクションを定義します。

void reset() {
  digitalWrite(WE_PIN, LOW);
  digitalWrite(IC_PIN, LOW);
  delayMicroseconds(100);
  digitalWrite(IC_PIN, HIGH);
  delay(1000);
}

このファンクションをsetup()内で実行します

  reset();
F-Numberを指定して出力

音の出力はF-Numberという値を使用します。

音程とF-Numberの対応表はアプリケーションマニュアルに書いてあります。

レジスタ0x10(+チャンネル番号)にF-Numberの下位8ビットを指定します。
レジスタ0x20(+チャンネル番号)に音階(オクターブ)とF-Numberの上位1ビットを指定します。

チャンネルとF-Numberを設定するファンクションを定義
レジスタ0x20(+チャンネル番号)に音のオン/オフ(key)も指定するするのですが、今回はkey=1(オン)を固定で設定します

void SetFNumber(int ch, int oct, int f_number) {
  // F-Numberの下位8ビット
  set_register(0x10 + ch, f_number & 0xff);
  // key=1, oct, F-Numberの上位1ビット
  set_register(0x20 + ch, (1 << 4) | (oct << 1) | (f_number >> 8));
}
音色と音量

レジスタ0x30(+チャンネル番号)の上位4ビットは音色、下位4ビットは音量になっています。

チャンネルと音色と音量を設定するファンクションを定義

void SetInstVol(int ch, int inst, int vol) {
  set_register(0x30 + ch, (inst << 4) | vol);
}
演奏

チャンネル0の音色を3(ピアノ)、音量を15にします。
チャンネル0に440HzのA(ラ)の音程のF-Number(288)とオクターブ4をセットします。
1秒後にチャンネル0の演奏を止めます。
この時0x20(+チャンネル番号)に0を入れます。こうすることによりkeyのビットも0になるので、演奏も止まります。
この処理は1回だけ実行するつもりだったので、setup()内の最後に追加しました。

  SetInstVol(0, 3, 16);
  SetFNumber(0, 4, 288);
  delay(1000);
  set_register(0x20, 0);

これで起動後、1秒間だけ音が出力されるはずです。

今回はおまけでloop()無いでドレミファソラシドを演奏するサンプルも書きました。

void loop() {
  delay(1000);
  SetFNumber(0, 4, 172);
  delay(500);
  SetFNumber(0, 4, 192);
  delay(500);
  SetFNumber(0, 4, 216);
  delay(500);
  SetFNumber(0, 4, 229);
  delay(500);
  SetFNumber(0, 4, 257);
  delay(500);
  SetFNumber(0, 4, 288);
  delay(500);
  SetFNumber(0, 4, 323);
  delay(500);
  SetFNumber(0, 4, 343);
  delay(1000);
  set_register(0x20, 0);
}

最後にソース全文を掲載するので、参考にどうぞ。

// Output Pins
const byte IC_PIN = A0;
const byte CS_PIN = A1;
const byte WE_PIN = A2;
const byte A0_PIN = A3;
const int DATA_PIN[] = { 2, 3, 4, 5, 6, 7, 8, 9 };

void setup() {

  for (int i = 0; i < 8; i++) {
    pinMode(DATA_PIN[i], OUTPUT);
  }
  pinMode(CS_PIN, OUTPUT);
  pinMode(A0_PIN, OUTPUT);
  pinMode(IC_PIN, OUTPUT);
  pinMode(WE_PIN, OUTPUT);
  
  reset();
  
  SetInstVol(0, 3, 16);
  SetFNumber(0, 4, 288);
  delay(1000);
  set_register(0x20, 0);

}

void loop() {
  delay(1000);
  SetFNumber(0, 4, 172);
  delay(500);
  SetFNumber(0, 4, 192);
  delay(500);
  SetFNumber(0, 4, 216);
  delay(500);
  SetFNumber(0, 4, 229);
  delay(500);
  SetFNumber(0, 4, 257);
  delay(500);
  SetFNumber(0, 4, 288);
  delay(500);
  SetFNumber(0, 4, 323);
  delay(500);
  SetFNumber(0, 4, 343);
  delay(1000);
  set_register(0x20, 0);
}

// 初期化
void reset() {
  digitalWrite(WE_PIN, LOW);
  digitalWrite(IC_PIN, LOW);
  delayMicroseconds(100);
  digitalWrite(IC_PIN, HIGH);
  delay(1000);
}

// F-Number指定
void SetFNumber(int ch, int oct, int f_number) {
  set_register(0x10 + ch, f_number & 0xff);
  set_register(0x20 + ch, 16 | (oct << 1) | (f_number >> 8));
}

// 音色と音量指定
void SetInstVol(int ch, int inst, int vol) {
  set_register(0x30 + ch, (inst << 4) | vol);
}

// レジスタセット
void set_register(byte addr, byte value)
{
  // addr
  digitalWrite(A0_PIN, LOW);
  digitalWrite(CS_PIN, LOW);
  for (int i = 0; i < 8; i++) {
    digitalWrite(DATA_PIN[i], bitRead(addr, i));
  }
  delayMicroseconds(12);
  digitalWrite(CS_PIN, HIGH);

  // value
  digitalWrite(A0_PIN, HIGH);
  digitalWrite(CS_PIN, LOW);
  for (int i = 0; i < 8; i++) {
    digitalWrite(DATA_PIN[i], bitRead(value, i));
  }
  delayMicroseconds(84);
  digitalWrite(CS_PIN, LOW);
}

【永久保証付き】Arduino Uno

【永久保証付き】Arduino Uno