Top | puarts.com
映像・CG・画像処理関連の技術情報、個人作品の創作記録、メモなど
Category

0   1  2  3  4  5  6  

画像から音を再生できるフリーソフト Coagula

公開日: 2017/05/13 22:58 | カテゴリ: PC/Software | タグ: 音声, フリーソフト

画像から音声を再生できる Coagula というフリーソフトがあったのでメモしておきます。

https://www.abc.se/~re/Coagula/Coagula.html

画像から音を生成するって興味深いですが、やってること自体は画像をスペクトログラムに見立てて周波数の異なる正弦波を重ねて波形を生成しているだけっぽくてシンプルそうです。 説明を読んだ感じだと、以下のような仕様っぽいです。

  • 縦が周波数、横が時間軸
  • 赤が左チャンネルの正弦波の強さ
  • 緑が右チャンネルの正弦波の強さ
  • 青は狭帯域ノイズ

  このエントリーをはてなブックマークに追加  

TortoiseSVN で .gitignore 的なことをやるメモ

公開日: 2017/05/13 | カテゴリ: PC/Software | タグ: SVN

普段 git を使っているので TortoiseSVN で .gitignore と同じように特定のフォルダに無視ファイルを設定する方法をメモしておきます。

  1. エクスプローラーで無視ファイルを設定したいフォルダを開く
  2. 右クリックコンテキストメニューから TortoiseSVN → Properties を開く
  3. Properties ウィンドウの New ボタンから Other を選択し、Add Properties ウィンドウを開く
  4. Add Properties ウィンドウの Property name に svn:ignore を指定
  5. Add Properties ウィンドウの Property value に除外したいパターンを指定。例えば、bin フォルダを除外したいなら bin と入力
  6. OK で除外パターンがそのフォルダだけに指定される

注意点としては、そのフォルダ以下のサブフォルダ以下についても同じ名前の、例えば bin フォルダを無視したいという場合は、Add Properties ウィンドウで Apply property recursively のチェックをつけないといけないようです。

*/bin みたいな指定ができればいいのに。

  このエントリーをはてなブックマークに追加  

FFT のわかりやすい資料

公開日: 2017/05/06 | カテゴリ: Note | タグ: FFT

FFT についてとてもわかりやすい資料があったのでメモ代わりに貼っておきます。

http://lab.sdm.keio.ac.jp/maenolab/makino/documents/20090827_Fourier.pdf

一度理解しても、数年後にまた使う時に細かいところを忘れているので、こういう資料があるとすぐに思い出せて助かります。

  このエントリーをはてなブックマークに追加  

fread がファイル読み込み途中で失敗

公開日: 2017/04/29 | カテゴリ: C/C++ | タグ: C++

C++ でファイル読み込み処理を書くときは昔作ったユーティリティ関数を使っていたため、fread を使って書くことが最近ありませんでした。久しぶりに fread でファイル読み込み処理を書いたら、なんかファイル読み取り途中で失敗してしまう(戻り値が途中までしか読み込めてない結果になってしまう)症状でややはまったので一応メモ。

すごく初歩的ですが、単純に引数のモードを rb にしていなかったのが原因。r にしていたため、ファイルの途中で EOF と誤判定されてしまっていただけでした。

プログラマーになって何年も経つのに未だにこういうミスはしてしまいます。

  このエントリーをはてなブックマークに追加  

FBX SDK スキニングしているジョイントのローカル座標、変換行列取得

公開日: 2017/04/16 | カテゴリ: C/C++ | タグ: C++, FBX SDK

FBX SDK を使って fbx からスキニングしているジョイントのローカル座標を取得する方法がヘルプ読まずにわからなかったので、メモ代わりにスキニングしているジョイントのローカル座標と変換行列をコンソール出力する関数を載せておきます。

ソースコード

void PrintLocalSrtAndTransformMatrixOfJoints(FbxNode* root_node)
{
    FbxMesh* mesh = root_node->GetMesh();
    int skin_count = mesh->GetDeformerCount(FbxDeformer::eSkin);
    for (int skin_index = 0; skin_index < skin_count; ++skin_index)
    {
        FbxSkin* skin = static_cast<FbxSkin*>(mesh->GetDeformer(skin_index, FbxDeformer::eSkin));
        int cluster_count = skin->GetClusterCount();
        for (int cluster_index = 0; cluster_index < cluster_count; ++cluster_index)
        {
            FbxCluster* cluster = skin->GetCluster(cluster_index);
            FbxNode* linked_node = cluster->GetLink();
            printf("%s:\n", linked_node->GetName());

            // ジョイントのローカル SRT を表示
            fbxsdk::FbxDouble3 local_translate = linked_node->LclTranslation.Get();
            fbxsdk::FbxDouble3 local_rotate = linked_node->LclRotation.Get();
            fbxsdk::FbxDouble3 local_scale = linked_node->LclScaling.Get();
            printf("    t = (%8.3f, %8.3f, %8.3f)\n    r = (%8.3f, %8.3f, %8.3f)\n    s = (%8.3f, %8.3f, %8.3f)\n",
                local_translate[0],
                local_translate[1],
                local_translate[2],
                local_rotate[0],
                local_rotate[1],
                local_rotate[2],
                local_scale[0],
                local_scale[1],
                local_scale[2]);

            // ジョイントの変換行列を表示
            fbxsdk::FbxAMatrix init_matrix;
            cluster->GetTransformLinkMatrix(init_matrix);
            printf("    matrix =\n");
            for (int row = 0; row < 4; ++row)
            {
                printf("        ");
                for (int col = 0; col < 4; ++col)
                {
                    printf("%8.3f, ", init_matrix.Get(row, col));
                }
                printf("\n");
            }
        }
    }
}

コンソール出力結果例

joint1:
    t = (   0.000,    0.000,    0.000)
    r = (   0.000,    0.000,    0.000)
    s = (   1.000,    1.000,    1.000)
    matrix =
           1.000,    0.000,    0.000,    0.000,
          -0.000,    1.000,    0.000,    0.000,
           0.000,   -0.000,    1.000,    0.000,
           0.000,    0.000,    0.000,    1.000,
joint2:
    t = (   0.000,    1.000,    0.000)
    r = (   0.000,    0.000,    0.000)
    s = (   1.000,    1.000,    1.000)
    matrix =
           1.000,    0.000,    0.000,    0.000,
          -0.000,    1.000,    0.000,    0.000,
           0.000,   -0.000,    1.000,    0.000,
           0.000,    1.000,    0.000,    1.000,
joint3:
    t = (   0.000,    1.000,   -0.000)
    r = (   0.000,    0.000,    0.000)
    s = (   1.000,    1.000,    1.000)
    matrix =
           1.000,    0.000,    0.000,    0.000,
          -0.000,    1.000,    0.000,    0.000,
           0.000,   -0.000,    1.000,    0.000,
           0.000,    2.000,   -0.000,    1.000,
joint4:
    t = (   1.000,    1.000,   -0.000)
    r = (   0.000,    0.000,    0.000)
    s = (   1.000,    1.000,    1.000)
    matrix =
           1.000,    0.000,    0.000,    0.000,
          -0.000,    1.000,    0.000,    0.000,
           0.000,   -0.000,    1.000,    0.000,
           1.000,    3.000,   -0.000,    1.000,

ついでにサンプルにあったバインドポーズのトンラスフォームの取得方法もメモ代わりに載せておきます。

バインドポーズのトランスフォームと行列(サンプルより)

void DisplayPose(FbxScene* pScene)
{
    int      i, j, k, lPoseCount;
    FbxString  lName;

    lPoseCount = pScene->GetPoseCount();

    for (i = 0; i < lPoseCount; i++)
    {
        FbxPose* lPose = pScene->GetPose(i);

        lName = lPose->GetName();
        printf("Pose Name: %s\n", lName.Buffer());

        printf("    Is a bind pose: %s\n", lPose->IsBindPose()?"true":"false");

        printf("    Number of items in the pose: %d\n", lPose->GetCount());

        printf("\n");

        for (j = 0; j<lPose->GetCount(); j++)
        {
            lName = lPose->GetNodeName(j).GetCurrentName();
            printf("    Item name: %s\n", lName.Buffer());

            if (!lPose->IsBindPose())
            {
                // Rest pose can have local matrix
                printf("    Is local space matrix: %s\n", lPose->IsLocalMatrix(j)?"true":"false");
            }

            printf("    Matrix value: \n");

            FbxString lMatrixValue;

            FbxNode* node = lPose->GetNode(j);

            for (k = 0; k<4; k++)
            {
                FbxMatrix  lMatrix = lPose->GetMatrix(j);
                FbxVector4 lRow = lMatrix.GetRow(k);
                char        lRowValue[1024];

                FBXSDK_sprintf(lRowValue, 1024, "%9.4f %9.4f %9.4f %9.4f\n", lRow[0], lRow[1], lRow[2], lRow[3]);
                lMatrixValue += FbxString("        ") + FbxString(lRowValue);
            }

            printf("%s\n", lMatrixValue.Buffer());
        }
    }

    lPoseCount = pScene->GetCharacterPoseCount();

    for (i = 0; i < lPoseCount; i++)
    {
        FbxCharacterPose* lPose = pScene->GetCharacterPose(i);
        FbxCharacter*     lCharacter = lPose->GetCharacter();

        if (!lCharacter) break;

        printf("Character Pose Name: %s\n", lCharacter->GetName());

        FbxCharacterLink lCharacterLink;
        FbxCharacter::ENodeId  lNodeId = FbxCharacter::eHips;

        while (lCharacter->GetCharacterLink(lNodeId, &lCharacterLink))
        {
            FbxAMatrix& lGlobalPosition = lCharacterLink.mNode->EvaluateGlobalTransform(FBXSDK_TIME_ZERO);

            printf("    Matrix value: %s\n", "");

            FbxString lMatrixValue;

            for (k = 0; k<4; k++)
            {
                FbxVector4 lRow = lGlobalPosition.GetRow(k);
                char        lRowValue[1024];

                FBXSDK_sprintf(lRowValue, 1024, "%9.4f %9.4f %9.4f %9.4f\n", lRow[0], lRow[1], lRow[2], lRow[3]);
                lMatrixValue += FbxString("        ") + FbxString(lRowValue);
            }

            printf("%s\n", lMatrixValue.Buffer());

            lNodeId = FbxCharacter::ENodeId(int(lNodeId) + 1);
        }
    }
}

  このエントリーをはてなブックマークに追加  
0   1  2  3  4  5  6  

にほんブログ村 デザインブログ グラフィックアートへ
Links

参考になりそうなブログやサイトを見つけたら勝手にリンクを貼らせてもらっています。
リンク削除を希望の場合はお手数ですがメールにてご一報下さい。
Ke-Sen Huang's Home Page        Disney Research        VIDEO COPILOT        AbandonedArt.org
ryoji ikeda        チームラボ        トルク with AR三兄弟        DAITO MANABE

Copyright(C)2006-2017 wsp All Rights Reserved