cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

Windows10で、まともに使える音楽用アップサンプリングコンバータ

Hi-Resフォーマットが人気を集めていて、DAコンバータを中心にPCオーディオの性能はとても高くなっています。
しかしながら、リーズナブルに入手可能な音源はいまだにCDの16ビット44.1kHzが現役です。
ネットワーク越しに入手できる音源も、最近は増えつつあるというものの有名どころや大御所ばかりで欲しいものが手に入りません。
また、昔から集めてきた音楽データを再リッピングするのも手間です。
簡単にそこそこの品質でアップサンプリングしてくれるソフトウェアを探したいと思います。

結論は、

音楽プレイヤーfoobar2000と、SoX Resamplerを使う。

です。たとえば、Apple Losslessフォーマットの音楽ファイルをflac形式に変換してファイルとして保存するために使います。音楽再生は好きなプレイヤーを使ってください。
コンバータは他にも一杯あるのですが、入力形式がwavとmp3フォーマット限定とか、使い勝手の悪いものが多く面倒くさくてダメです。視覚で確認できる機能が付いたResampler-V[5]というのも気になりますが、とりあえずベーシックな方を試します。

1. foobar200とプラグインのインストール

3つダウンロードしてインストールします。

foobar2000本体
Download foobar2000

・Free Encoder Pack
foobar2000: Free Encoder Pack

・foo_dsp_resampler_0.8.3
A new resampler DSP for foobar2000

上二つは普通にインストーラでインストールするだけです。
最後のはfoo_dsp_resampler.dllを、C:\Program Files (x86)\foobar2000\componentsにコピーします。管理者権限が必要になります。
詳細は[1]が参考になります。

2. SoXの設定

foobar2000を開いて、変換したいファイルを右クリックして出てくるメニューの中から、convertを選びます。
いくつかの項目の中から、一番下の...を選びます。
これはCD音源を96kHz,24ビットDAコンバータ用に、可逆フォーマットのflacファイルを作る設定の例で説明します。

Output File:
FLACを選択し、EditボタンでCompression Levelを好きに選びます。
Output bit depthを24bitにします。ディザは無しのままにして、Backボタンで戻ります。

Processing:
Resampler(SoX)を選択し、Active DSPsに入れます。
Configure selectedを選び、Target samplerateを88200Hz, QualityをBestにします。好みで、96000Hzにしても良いかも。

他の設定も好みで変えて良いですが、分からなければそのままが良いです。

設定を終えたら、Save Presetsに保存しておきます。
で、Convertで完了。

3. あとは楽しむ。

QNAPやAsustorのNASの一部は直接USB-DACをつなげられるようになっているので、大量のオーディオファイルを持っているときには便利です。

[1] foobar2000 SoX Resampler導入方法 | Phile-webコミュニティ
[2] SoX Resamplerの解説を少々(1) : 重い荷を背負っては遠くへ行けない
[3] 19:00のニュース (北海道版) foobar2000のSoX Resamplerの設定
[4] ERI foobar2000八面六臂
[5] Resampler-V

今日の漫画賞期待の漫画

山田胡瓜、Aiの遺伝子
もう今年の漫画賞当確だと思います。類似のモチーフとして名作のイブの時間があります。ロボット(アンドロイド)好きの人は必読です。

29歳独身中堅冒険者の日常
最近特に人気のあるジャンルのRPGファンタジーの漫画の一つです。やさしい雰囲気が良いです。

少女Aの悲劇
まだ3話ぐらいしか公開されていませんが、3話まではメーターを振り切った面白さなので期待ができます。
www.mangabox.me

ファイル名とフォルダ名を比較して、ファイルをフォルダの中に移動するスクリプトを吐くPythonプログラム

大量の計測データや写真、自炊したドキュメント、撮りためた動画などを、ファイル名を基に自動でフォルダに振り分けて整理してくれるプログラムがあるといろいろ便利です。

例えば、ABC, CDE, FGHというフォルダがあったとき、同じ階層にあるファイルのファイル名にフォルダ名が含まれていれば、それをフォルダ中に移動するスクリプトファイルをfileKeeper.batという名前で出力します。
fileKeeper.batをダブルクリックで実行すれば、移動が完了します。

> dir
ABC
CDE
FGH
ABC01.pdf
ABC02.pdf
ANCA.pdf
CDE.txt
01_FGH.mov

のような場合には、

move /-Y ABC01.pdf ABC
move /-Y ABC02.pdf ABC
move /-Y CDE.txt CDE
move /-Y 01_FGH.mov FGH

のような内容のfileKeeper.batファイルを出力します。
余り短いファイル名には引っかからないように、if len(k) > 3: で制限を書けています。

fileKeeper.py

# coding: utf-8

import os
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print 'defaultencoding:', sys.getdefaultencoding()

def cmp_len(s1, s2):
	return cmp(len(s1), len(s2))

if __name__ == "__main__":
	print(os.getcwd())

	DirList = []
	FileList = []
	for i in os.listdir(os.getcwd()):
		if os.path.isdir(i):
			DirList.append(i)
			print i
		elif os.path.isfile(i):
			FileList.append(i)

	# フォルダ名が長い順に調べるように、文字列長でソート
	DirList.sort(cmp=cmp_len, reverse=True)

	f = open("fileKeeper.bat", "w")

	for j in FileList:
		for i in DirList:
			# フォルダ名から特定の文字や文字列を無視
			k = i.replace('★','').replace('☆','').replace('●','').replace('○','')
			# あまりに短いフォルダ名は無視
			if len(k) > 3:
				if k in j:
					print j + " move to " + i
					f.write("move /-Y \"" + j + "\" \"" + i + "\"\n")
					break

	print "finished."

環境はWindows10上のpython2.7でテストしています。
なお、このプログラムでファイルが消えたなどの不具合が起きても、一切責任とれませんのでご注意ください。

今日の、2016年夏、アニメ化期待の漫画コミックTOP3!

1.あそびあそばせ


あそびあそばせ 2 (ヤングアニマルコミックス)

あそびあそばせ 2 (ヤングアニマルコミックス)


あそびあそばせ 1 (ジェッツコミックス)

あそびあそばせ 1 (ジェッツコミックス)

2. 天野めぐみはスキだらけ!

天野めぐみはスキだらけ! 3 (少年サンデーコミックス)

天野めぐみはスキだらけ! 3 (少年サンデーコミックス)


天野めぐみはスキだらけ! 2 (少年サンデーコミックス)

天野めぐみはスキだらけ! 2 (少年サンデーコミックス)


3. 月と指先の間

mcp4725のEEPROMにwiringPiを通して書き込む方法

wiringPi-mcp4725ライブラリを介してEEPROMの書き込みをしようとして頑張ってみても上手くいかず、別の方法を調べてみたらこちらに書いてありました。
電源オンで出力50%が出てる、なんていう事態を避けるために、とりあえずEEPROMの値を0にしておきたい時のサンプルがこちらです。
60番と61番に2つのDACを繋いでいる想定です。

MCP4725 DAC with RPi « seafoid.org

#include <stdio.h>
#include <unistd.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>

void setDACVoltage(int deviceid, int voltage, int writeToEEPROM)
{
	int fd = wiringPiI2CSetup(deviceid);

	voltage = (voltage > 4095) ? 4095 : voltage;
	voltage = (voltage >> 4);

	if(writeToEEPROM)
		wiringPiI2CWriteReg16(fd, 0b01100000, voltage);
	else
		wiringPiI2CWriteReg16(fd, 0b01000000, voltage);

	close(fd);
}

int main(int argc, char* argv[])
{
	wiringPiSetupGpio();
	setDACVoltage(0x60, 0, 1);
	setDACVoltage(0x61, 0, 1);
	return 0;
}

wiringPi-mcp4725を使わずに、こっちでベタに書いた方がすっきり綺麗かも。

今日のシャワー

シャワー苦手ですが、こんなの使うと楽しくなりそう。

(メモ)Linuxで接続したjoystickが抜けてしまったことを検出する方法

Linux上のプログラミングでjoystickの情報を取ることは、joystick-apiを使って大体全部簡単にできますが、ひとつだけ、取り外されたことだけは通知してくれません。
ゲーム用途なら途中で抜けてしまっても、たいした問題にはならないと思いますが、ロボットやドローンの制御をしている際にコントローラが抜けてしまうと、暴走の原因にもなりかねません。
そこで、ちゃんとコントローラが刺さっているかどうかをチェックしたい、という需要があると思います。
ここでは、その方法のメモをまとめます。

結論としては、時々sys/stat関数を使ってデバイスの存在を確認する、です。

#include <sys/stat.h>
#define JOY_DEV "/dev/input/js0"

int joy_connection_check()
{
  struct stat buf;
  int ret = stat(JOY_DEV, &buf);

  return ret; // 0: connected, -1: disconnected
}
Linuxでjoystickを使えるようにするまでの設定

簡単ですが、忘れてしまうのでメモ。

> sudo apt-get install joystick
> sudo apt-get install jstest-gtk
> jstest-gtk

raspberryPi2/3に(オーディオ用では無い)複数の普通のDAコンバータmcp4725を接続して5V出力を得る方法

電子工作の基本としてAD/DAコンバータは直ぐに使えるようにしておきたいですね。
ちょっとした試作で便利に使えるRaspberryPiを使ってアナログ出力を取り出そうとしたら、意外にもDA出力が備わっていませんでした。
外付けして対応しようと調べてもオーディオ用DACの情報ばかりで欲しい情報が直ぐに手に入らなかったので、汎用DAコンバータの接続方法をまとめておきたいと思います。
(PWM出力をRCフィルタに掛けてDA代わりにするのがよく使われているようですが、このページでは普通にDA出力を取ります。)

回路図

f:id:cvl-robot:20160714140331p:plain
RaspberryPiのGPIOのI2Cピン3,5は、内部でpullupされているそうなので、2.7kΩの抵抗二つは取り除いた方が良いようです。

今は、汎用DAコンバータで入手しやすいチップがすごく少ないようです。
インターフェースとしては、SPI接続(MCP4922-E/P等)またはI2C接続(MCP4725,MCP4726等)が一般的です。
入手のしやすさから、秋月のmcp4725モジュールを使うことにしました。

RaspberryPi2/3のGPIO出力からDAコンバータを接続します。
RaspberryPiのGPIO出力は3.3Vなのでmcp4725を直付けすると、出力も最大3.3Vまでしかとることができません。
mcp4725は電源電圧までレールトゥレールで出力電圧をとれるので、2.7-5.5Vまで電源電圧を調整することで最大出力電圧を変更できます。
出力電圧を5Vとして設計します。
そのため、I2Cの信号レベルも3.3Vから5Vに変換してやる必要があります。

mcp4725のEEPROMにwiringPiを通して書き込む方法 - cvl-robot's diary
に続く。

[1] 電子部品使い方:マイコンのD/A変換
[2] MCP4725搭載D/Aコンバータモジュール(I2C通信)
[3] Adafruit MCP4725 Breakout Board - 12-Bit DAC w/I2C Interface [ADA935] by Adafruit [並行輸入品]
[4] MCP4725 EEPROM搭載12ビットD/Aコンバータモジュール: 半導体 秋月電子通商 電子部品 ネット通販

ofxRobotArm

openFrameworksでUniversalRobotsのロボットを動かすAddonが発表されました。

www.creativeapplications.net
github.com
github.com

installAddon.bat

cd ../../addons
git clone http://github.com/CreativeInquiry/ofxTiming
git clone http://github.com/CreativeInquiry/ofxCV
git clone http://github.com/CreativeInquiry/ofxNatNet
git clone http://github.com/CreativeInquiry/ofxGML
git clone http://github.com/CreativeInquiry/ofxGizmo
git clone http://github.com/CreativeInquiry/ofxTimeline
git clone http://github.com/CreativeInquiry/ofxURDriver
git clone http://github.com/CreativeInquiry/ofxPtf
cd ../addons/ofxRobotArm

カスタマイズされたアドオンをいっぱいインストールしなければなりません。手で入れるのは面倒なので、installAddon.shが用意されています。

シンプルでよくできていますね。でも、このブログで紹介してきたのとほとんど同じアイデアです。
勝手にライバル視しています。こっちの方が歴史が深いぞ。
cvl-robot.hateblo.jp

今日のストレス解消

良く寝るのが一番。敷マットに西川AiRを購入したら、良い掛布団が欲しくなりました。
いろいろ調べた結果、GORE素材を使った羽毛布団に魅かれました。

openFrameworksの教科書

無料で公開されているそうです。ありがたいですね。
http://download.bnn.co.jp/download/beyond_interaction/BNN_BeyondInteraction.pdf

今日のイヤホン

小米のPistonの復刻版が、1moreというところからPiston Classicという名前で出ていてAmazonで3000円ぐらいで買えるそうです。