Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Mac→PC→サラウンドヘッドホン

再生デバイス 録音デバイス

Macのヘッドホン端子から出力したSkypeの音声をPCのオンボードライン入力端子で受け取り、プレイ中のゲームの音声と合わせてDDL(Dolby Digital Live)でドルビーデジタル化、S/PDIFを通してサラウンドヘッドホンに出力するための設定。
たったそれだけの設定なのにえらい苦労した……

最初はサウンドカード(CMI8768P-DDEPCI)の入力端子を使おうとしていたのだが、ライン入力端子やマイク入力端子からのアナログ入力はデジタル出力よりモニターすることが出来ないため使えず。
光ケーブルでデジタル入力端子に渡してみるも、あまりに酷い(電波妨害でも受けてるような)音を出すため使い物にならず。
結局、サウンドカードの入力端子の使用は諦め、オンボードのライン入力からWindows標準のドライバで既定の再生デバイスに音声を渡してもらうのが一番まともに動作するという結論に至った。

もちろん、わざわざMacなど使わず、普通にPCでSkypeを使えば良いのではという考えもあったが、それはそれで

と課題が多かったので、とりあえずは使い慣れたMacを活用する方法を選んだ次第。

まあ、何はともあれ、これでめでたくドルビーデジタルとSkypeを併用する環境は整った。
これで思う存分PCゲームを堪能できるゾ!( ^ω^)

と息巻いていたら肝心のサラウンドヘッドホンが壊れた。
……おぉい!ヽ(;`Д´)ノ

GV-R587SO-1GDのパッケージ裏面を見る

Super OCのファンはStandardのものより静かである。

fan.jpg

回転数(rpm)が同じならな!

以下、Super OCでファンの回転率を「0%」「40%(=アイドル時)」「70%」「100%」に固定した場合の回転数。

0% 40% 70% 100%

0%に設定しても2700rpm以上で回る安心設計。


Super OCの消費電力はStandardをオーバークロックしたものより低めである。

consumption.jpg

言い換えるとGTX 470級ということだがな!


OC Guruの主要機能……Power Saving……ユーザーフレンドリーなインターフェースデザイン……

ocguru1.jpg

ユーザーフレンドリーなデザイン……?

ocguru2.png

そもそもこのソフトを起動しないとPower Savingが十分に働かないのはユーザーフレンドリー?

6/6点灯 1/6点灯

OC Guruを起動しない場合、カードのLEDはアイドル時でも全点灯。
OC Guruを起動すると1つ残して消灯。以降、負荷に応じて点灯/消灯する。

地味に使いにくくなっていくMac

Magic Trackpadの登場に合わせて更新されたMacBook Proのトラックパッドドライバ。
「慣性スクロール」や「3本指ドラッグ」などの機能追加が目立つところではあるが、いくつか基本的な仕草に対する反応も変わっている。

一つ。
これまでクリック扱いされていなかった「トラックパッド上に指を1本以上置いてほかの指でタップする仕草」がクリック扱いされるようになった。
「2本指スクロールしようか、いや1本指でポインタを動かそう」などと迷って片指をトンとつくと、それがクリックと認識されてしまう。
些細な仕草にもよりいっそう気を配らなければならない。

二つ目。
慣性スクロールしている(と思われる)間のタップがクリックとして認識されなくなった。
実際に慣性スクロールしているのなら、「タップは慣性スクロールを止める操作であってクリックではない」というこの設計に問題はない。
しかし、スクロールの設定を「慣性なし」にしていても、「慣性あり」なら慣性スクロールしていたであろう間はタップしてもクリックにならないというのはなんの嫌がらせか。
正直、鬱陶しい。

PC買った

ついに買ってしまった……
Macじゃない、Windows PC。
私物としてWindows PCを持つのは、これが初めて。
さらにWindows 7……というか「Vista以降のWindows」に触れるのも、これが初めて。
そんな状況なので、マザーボードの説明書を読んだり、ユーティリティをいじったり、サイドバーガジェットを並べるだけでいちいち楽しいのであった(*^^*)

サイドバーガジェット

システムモニタばかりごちゃごちゃと。

ちなみにMacでもそのあたりにはリソースグラフをごそっと並べている。

XRG

新しいiMacやMac Proも発表されたけれど、まあ正直Macはノートだけでいいかなーと。
下手にノートとデスクトップ両方Macにしてしまうと、使い分けに悩むことになるので……

fgetsかfgetwsか

タグ: VS2005

VC8でShift JIS(マルチバイト文字列)のファイルをUnicode(ワイド文字列)に変換しながら読み込む方法として、

  • fgetws()でUnicodeに変換しながら読む
  • fgets()で読んでMultiByteToWideChar()でUnicodeに変換する

のどちらが速いか。

試しに、手元にあった29207行946459バイトのMS-IME用辞書ファイル(Shift JISのテキストファイル)の読み込み速度を、Pentium 4 3.6GHzのWindows XP PCで比較してみた。

#include <windows.h>
#include <stdio.h>
#include <locale.h>
#include <iostream>

void test()
{
    ::setlocale(LC_ALL, "japanese");

    // MS-IME用辞書ファイルを開く    
    FILE* fp = ::fopen("msime.txt", "rt");
    if (! fp)
    {
        std::cerr << "ひらけない(´・ω・`)" << std::endl;
        return;
    }
    
    DWORD start;
    int line;
    // 交互に5回試す
    for (int i = 0; i < 5; i++)
    {
        wchar_t wbuff[256] = { 0 };
        const size_t wbufflen = sizeof(wbuff) / sizeof(*wbuff);
    
        // fgetws()でUnicodeに変換しながら読む
        ::fseek(fp, 0, SEEK_SET);
        start = ::GetTickCount();
        for (line = 0; ::fgetws(wbuff, wbufflen, fp); line++)
        {
            // 1行254文字以下(改行コード混み)を想定
            if (wbuff[wbufflen - 2] != 0)
            {
                std::cerr << "ながい('・ω・`)" << std::endl;
                break;
            }
        }
        std::cout << "fgetws " << line << "lines " << ::GetTickCount() - start << "ms" << std::endl;
    
        // fgets()で読んでMultiByteToWideChar()でUnicodeに変換する
        ::fseek(fp, 0, SEEK_SET);
        start = ::GetTickCount();
        char buff[wbufflen * 2] = { 0 };
        const size_t bufflen = sizeof(buff) / sizeof(*buff);
        for (line = 0; ::fgets(buff, bufflen, fp); line++)
        {
            // 1行510バイト以下(改行コード混み)を想定
            if (buff[bufflen - 2] != 0)
            {
                std::cerr << "ながい('・ω・`)" << std::endl;
                break;
            }
    
            // CP932で最大510バイトをUnicode最大255文字にマップ
            if (::MultiByteToWideChar(932, MB_PRECOMPOSED, buff, -1, wbuff, wbufflen) == 0)
            {
                std::cerr << "おかしい('・ω・`)" << std::endl;
                break;
            }
        }
        std::cout << "fgets  " << line << "lines " << ::GetTickCount() - start << "ms" << std::endl;
    }
    
    ::fclose(fp);
}

void main()
{
    test();
}
fgetws 29207lines 125ms
fgets  29207lines 15ms
fgetws 29207lines 94ms
fgets  29207lines 16ms
fgetws 29207lines 93ms
fgets  29207lines 16ms
fgetws 29207lines 94ms
fgets  29207lines 15ms
fgetws 29207lines 78ms
fgets  29207lines 16ms

差はおよそ6倍。
fgetws()は「マルチバイト文字列用のバッファを用意する必要がない」とか「マルチバイト文字の泣き別れを気にしなくて済む」という点で楽をできるが、その分コストは高めである。

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。