USB音源のプチノイズ対策

自分用メモ

  1. 音源を帯域占有できるUSBチャネルに接続する。
  2. 以下のレジストリを開く
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB\VID_<xxxx>&PID_<yyyy>
    \<device_instance>\Device Parameters
  3. DWORD 32bitで CapturePacketsPerUrb キーを作成する。
  4. バッファーサイズを設定する。 (単位 ms)
  5. 再起動

HP-A3
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB\VID_1019&PID_0103
\<device_instance>\Device Parameters

HUD-mx1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_1852&PID_7925
\<device_instance>\Device Parameters

バッファーサイズ初期値
XP  10ms
Vista/7  4ms?

FEZアップローダー

私がサービス提供しているFEZアップローダーをiPhone, iPad, iPod touchに対応させました。
利用者が少ないので意味があるかは疑問ですが・・・

HTML5で再生しますので、H.264でエンコードされていれば大抵のファイルは
再生できるのではないかと思います。

URLはここです。
http://fezmv.splat.jp/

3G網を使っての再生はキツイとは思いますが・・・

SSD速度回復の続き

1個前の記事で書いたSSDの速度回復スクリプトについて少しだけ説明したいとおもいます。
SteadyWorX SSDの速度回復。 で簡単な説明をしてくれてますが、私の方でも補足しておきます。

このスクリプトを使う際に設定するのは、スクリプト先頭部分の以下の部分となります。
ここで、作業対象のドライブ設定、書込むビット列などを定義しています。

#-------------- 初期設定 --------------
# 作業対象のドライブレターを指定
# 作業対象のSSDドライブを指定してください。
DRV = "C:"

# 領域埋めに使うデータの指定
# SLCは \x00  MLCは \xFF らしいですが詳細は不明です。
# 変更しない方が良いかもしれません。
# 0 Fillする場合は \x00
# 1 Fillする場合は \xFF
CODE = "\x00"

# 書き込み単位(KBytes)
# 通常は変更する必要はありません。
B_SIZE = 256

ここから先のコードがスクリプト本体となります。
ちょっとだけ説明を補足しておきます。

#-------------- 本体 --------------
require 'tempfile'

# ランダムな文字列を生成する関数
# デフォルトでは16文字の文字列を生成します。
def getRandomString (length = 16)
  a = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
  key = Array.new(length){a[rand(a.size)]}.join
  return key
end

# 作業ディレクトリ名の生成
# 既存ディレクトリと重複する可能性の低いランダム文字列を使用
# 作業ディレクトリは既存のディレクトリと重複しない専用のディレクトリが欲しいため
# ランダム文字列を使用してディレクトリ名を定義します。
temp_dir = DRV + "/" + getRandomString

# データブロックを生成
# 初期設定部分で定義したビット列を使用して B_SIZE Kbytesの
# データブロックを用意します。
block = CODE * (B_SIZE * 1024)

# ここからメイン処理なので例外を補足できるようにします。
begin
  # 作業ディレクトリを作成
  # ディレクトリが既に存在する場合は Errno::EEXIST が発生します。
  Dir::mkdir(temp_dir)

  # 作業用ファイルの作成
  # tempfileライブラリを使って一時ファイルを作成します。
  temp = Tempfile::new("tmp",temp_dir)

  # 空き容量が尽きるまでファイルを追記していく
  # 上の処理で作成した一時ファイルにデータブロックを追記します。
  # 無限ループで追記するので空き容量が無くなるまで処理が行われます。
  # 空き容量が無くなると例外が発生するので、無限ループから抜けます。
  while 1
    temp.write(block)
  end

rescue Errno::EEXIST
# 作業ディレクトリと同じ名前のディレクトリが存在した場合は、ここに飛んできます。
  # テンポラリ領域が存在した場合は作業中断
  # エラーメッセージを表示してスクリプトを終了します。
  puts("#{temp_dir}  exists!")
  exit()

rescue
# その他の例外が発生した場合はここに飛んできます。
# ディスクフル以外で例外が発生することは無いはず。

  # 作業に使ったファイルとディレクトリを削除します。
  temp.close(true)
  Dir::rmdir(temp_dir)
end

こんな感じで、空き容量に対して0 Fill(または1 Fill)を行っています。
怪しいことは行ってないので危険性はほとんど無いのではないかと思います。

SSDの速度を回復させる

メインPCで使ってるSSDが最近遅くなってきました。
Win7+trim対応SSDなら速度低下は無いと思っていたのですが甘い考えだったようです。

SSDに0 Fillかければ速度回復するらしいのですが、起動ドライブとして使っているSSDなので
SecureEraseとかを使って0Fillするのは非常に面倒です。

というわけで、空き領域を00hで埋める 0Fillツールを作ってみました。(FFhの 1Fillも出来ます)
Rubyで書いてありますのでRubyがインストールされていれば動作するはずです。
ssd_recover.zip

スクリプトファイルの先頭部分でドライブ名など指定できますので、環境に合わせて変更してください。
動作試験は行なっていますが、使用は自己責任でお願いします。

動作原理は非常に簡単です。
一時ファイルを作って00hのデータをDisk容量が尽きるまで追記していくだけです。

作った本人も本当にこれで良いのか疑問でしたが、実際に実行してみたらSSDの速度が
見事に回復しました。

ツール実行前
———————————————————————–
CrystalDiskMark 3.0 x64 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
———————————————————————–
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

Sequential Read :   242.305 MB/s
Sequential Write :    42.380 MB/s
Random Read 512KB :   103.888 MB/s
Random Write 512KB :    17.735 MB/s
Random Read 4KB (QD=1) :     4.456 MB/s [  1087.9 IOPS]
Random Write 4KB (QD=1) :     1.779 MB/s [   434.3 IOPS]
Random Read 4KB (QD=32) :     0.929 MB/s [   226.8 IOPS]
Random Write 4KB (QD=32) :     1.998 MB/s [   487.7 IOPS]

Test : 1000 MB [ C: 49.2% (29.3/59.6 GB)] (x1)
Date : 2010/10/02 16:39:52
OS : Windows 7  [6.1 Build 7600] (x64)

ツール実行後
———————————————————————–
CrystalDiskMark 3.0 x64 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
———————————————————————–
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

Sequential Read :   244.794 MB/s
Sequential Write :   187.597 MB/s
Random Read 512KB :   157.433 MB/s
Random Write 512KB :   108.759 MB/s
Random Read 4KB (QD=1) :    12.425 MB/s [  3033.4 IOPS]
Random Write 4KB (QD=1) :    15.643 MB/s [  3819.0 IOPS]
Random Read 4KB (QD=32) :    12.859 MB/s [  3139.3 IOPS]
Random Write 4KB (QD=32) :    13.027 MB/s [  3180.3 IOPS]

Test : 1000 MB [ C: 49.2% (29.3/59.6 GB)] (x1)
Date : 2010/10/02 16:55:20
OS : Windows 7  [6.1 Build 7600] (x64)

こんな簡単なスクリプトで速度回復できちゃうもんなんですかね??