音を鳴らすことができるようになった

このエントリーをはてなブックマークに追加
はてなブックマーク - 音を鳴らすことができるようになった
Share on Facebook
Bookmark this on Yahoo Bookmark

音を鳴らすことがようやくできるようになった。だがまだまだいい加減なつくりだ。適当にウェーブテーブルを作って再生してみると、結構PSGっぽい音を奏でる。まだフィルターも実装していないのでまったくの素の音である。

実装をさらに進める前に、デバッグ用に簡単なステップシーケンサークラスを作ることにする。

ソースコード変更部分

No related posts.

音楽再生スレッドのリアルタイム性能について | Phile-webコミュニティ

このエントリーをはてなブックマークに追加
はてなブックマーク - 音楽再生スレッドのリアルタイム性能について | Phile-webコミュニティ
Share on Facebook
Bookmark this on Yahoo Bookmark

音楽再生スレッドのリアルタイム性能について | Phile-webコミュニティ.

Windowsにおけるリアルタイム音声再生の留意点。再生アプリであれば今のところこの記事の内容でほぼ網羅されているのではないかなと思う。

レイテンシ(≒バッファサイズ)はDAWなんかではもっとシビアだ。再生アプリではバッファを短くするとブチブチ鳴る確率が高くなるので、再生アプリではできる限りバッファを大きくとる設計でよいと思う。しかしDAWでレイテンシを200msとか取るとキーボードを弾いてから発音までに明らかに遅れを感じる。私のような鈍感な素人でも、5ms位から遅れを感じるようになる。理想は1msくらいかなとか勝手に思っている。なので相当パフォーマンスに配慮した設計が必要になってくる。

WASAPIが出るまではWindows標準で低レイテンシな再生を行うのはカーネルストリーミングという手法しかなくて、それもちょっと裏技的な感じのするものだった。あとは3rdベンダーのASIOを使うかだが、これは対応するハードウェアが限られていた。WASAPIの登場によって低レイテンシなサウンド再生が可能になったのだが、対応しているソフトウェアでもレイテンシを1-3msで設定するとブチブチなるものがある。高性能なハードウェアが安価で利用できる現在にあってもリアルタイム音声処理はソフトウェアの最適化が品質に大きく影響する世界である。

Windows 8 CPではMetro StyleでのWASAPI排他モードでのサウンド再生がサポートされてないようだ。ひょっとすると私のハードの問題だけかもしれないが。なので1-3msの低レイテンシなサウンド再生は現状だと厳しくて、これがRTMでもそうならMetro StyleでDAW的なソフトを作るのはできないことはないが、その品質はある程度以下のものしか望めないことになる。

関連記事:

  1. Subnormal numberが出てくるとPCが重くなるという話 | Phile-webコミュニティ
  2. ダイナミックレンジについて雑感 | Phile-webコミュニティ
  3. 音楽再生プログラムの自作について | Phile-webコミュニティ

C++Now! 2012 の資料 – C++でゲームプログラミング

このエントリーをはてなブックマークに追加
はてなブックマーク - C++Now! 2012 の資料 – C++でゲームプログラミング
Share on Facebook
Bookmark this on Yahoo Bookmark

C++Now! 2012 の資料 – C++でゲームプログラミング.

あとで目を通してみますか。

関連記事:

  1. C++11 の Alignment support – C++でゲームプログラミング
  2. Metaparse である mpllibs を触ってみる – C++でゲームプログラミング
  3. Vim で Dart の実行環境を書いてみた – C++でゲームプログラミング

std::bind – メンバ関数の束縛がよくわからん

このエントリーをはてなブックマークに追加
はてなブックマーク - std::bind – メンバ関数の束縛がよくわからん
Share on Facebook
Bookmark this on Yahoo Bookmark

下記のようなコードを書いたが、std::bindの部分が意図したように動かない。std::functionにstd::bindでthisポインタを保持させたいのだが、どうもthisポインターが指すインスタンスのコピーを保持してしまっているような感じなのである。thisポインタの部分をstd::ref(*this)にしても同じだった。よくわからん..。そもそもこんな使い方だめだっけかな..。

struct WaveTable : public Oscillator
{
  typedef std::vector<float> WaveDataType;
  typedef std::function<void (float * ,float)> ProcessorType;

  WaveTable() : waveCounter_(0.0f),stereo_(false)
  {
    Stereo(false);
  };

  void Process(float * data,float delta)
  {
    // ステレオのときはProcessStereo()を呼ぶ
    // モノラルのときはProcessSMono()を呼ぶ
    processor_(data,delta);
  }

  void ProcessMono(float * data,float delta)
  {
	// モノラル時の処理

  }

  void ProcessStereo(float * data,float delta)
  {
	// ステレオ時の処理

  }

  bool Stereo() const {return stereo_;}
  void Stereo(bool v) {
    stereo_ = v;
    if(v)
    {
      // ステレオのときはProcessStereo()を呼ぶ
      processor_ = std::bind(&WaveTable::ProcessStereo,this,_1,_2);
    } else {
      // モノラルのときはProcessSMono()を呼ぶ
      processor_ = std::bind(&WaveTable::ProcessMono,this,_1,_2);
    }
  }

関連記事:

  1. S.F. Tracker (121)
  2. Boost.Assignment
  3. Coroutine(2)

まあぼちぼちと続けている

このエントリーをはてなブックマークに追加
はてなブックマーク - まあぼちぼちと続けている
Share on Facebook
Bookmark this on Yahoo Bookmark

音源作りをぼちぼちと続けている。昨日今日と休日だったので音が鳴る程度まで持っていこうと思っていたけれどいつもどおりのグダグダした休日を送りそこまでいけそうにない。最近はソファーでごろごろするのが至福の時間となっていて、特に昼食をしっかり取った後のソファーでの昼寝がもう最高に好きで、シエスタのある国に移住したいと思っているほどだ。このソファーは結婚した時から使っている。布製のカバーはあちこちに綻びができているが寝心地はきわめてよい。まあごろごろ+昼寝で数時間を費やし、あとは家事手伝いをするのが2時間、TVやネットで2-3時間、残された時間はほとんどない。ヘタレの生活というものはこういうものなのだ。

それはさておき、今は「ベタ」に実装していっているけれども、パフォーマンス的に問題が出そうな気もするし、実際は大したことないような気もするが、Synth-1なんかはやっぱりコンパイラの最適化だけではなくて自前での最適化も行ってあのクォリティを保っているのでなんらかの最適化は必要だろう。アルゴリズムの最適化を施すということが先決だが、SIMDを使用した最適化の余地も残しておきたい。だがMetro Styleではその余地はあまりなさそうである。わたくしはX64を志向しているのでインラインアセンブラは使えないし、XBYAKも使えない。唯一イントリンシックが使えそうだけど、それだけではたして大丈夫だろうかとも思う。デスクトップでXAMLを使えるようになって、VS 11 Expressでデスクトップアプリが作れるか、もしくはMetro Styleでデスクトップアプリ並みのAPIが使えるようになればベストなのだが、マイクロソフトさんはそういうことを実現してくれるだろうか。いやしないだろうね。たぶん。特に後者はしないだろうね。ARMとかの対応もあるし。

そんなこと考えてないで、動くものを作ることが先だが。

No related posts.

Implementing MicroThread / Coroutine via esp-swap for Danmaku Shoot…

このエントリーをはてなブックマークに追加
はてなブックマーク - Implementing MicroThread / Coroutine via esp-swap for Danmaku Shoot…
Share on Facebook
Bookmark this on Yahoo Bookmark

Implementing MicroThread / Coroutine via esp-swap for Danmaku Shoot….

マイクロ・スレッド(コルーチン)によるシューティングゲームの製作。コルーチンを使うと状態変数の数が減ってコードの見通しもすごく良くなる。シューティングゲームにはもってこいなんだけどパフォーマンスに課題があり実用的ではなかった。

このプレゼンのアイデアはコンテキスト・スイッチを自前で実装することでパフォーマンスの問題を解消するというもの。このアイデアはやねうらおさんも10年ほど前に言っていた

これ以外で実装するとなるとスレッドやファイバーなんかを使わなくてはいけなくなり、コンテキスト・スイッチの負荷が無視できなくなる。Windows7以降だとUMSを使ったりとか。スレッドやファイバーでの実装例としてはBoost.CorouineHamigaki.Coroutineなどがある。

コルーチンとか継続ネタって何年かに一回盛り上がるんだよね。ワールドカップやオリンピックのように。最近はBoost.Contextでまた盛り上がってきているような気がする。

今作っているシューティングゲームもこの考えを取り入れたいが、X64だとインライン・アセンブラが使えないしまたMetro StyleだとXBYAK使えないのでどうしようか悩んでいる。デスクトップ・アプリにすると今度はUIの問題が出てくるし本当に悩ましいね。一番の問題は高い壁(私にとって)を乗り越えられない私のヘタレさだが。

関連記事:

  1. Step 3: Connect the DirectX swap chain
  2. スワップチェーンとSwapChainBackgroundPanelとの結び付け
  3. シューティングゲーム(7)Boost.Coroutine

Windows Runtime XAML for the Desktop | Paul Spiteri’s Blog

このエントリーをはてなブックマークに追加
はてなブックマーク - Windows Runtime XAML for the Desktop | Paul Spiteri’s Blog
Share on Facebook
Bookmark this on Yahoo Bookmark

Windows Runtime XAML for the Desktop | Paul Spiteri's Blog.

WinRT XAMLをデスクトップで使えないかを調べた記事。C#のデスクトップアプリではできた。もちろん非公式だが。

デスクトップ + WinRT XAMLという組み合わせを望んでいる人は結構多いみたい。やっぱりWindows FormやMFCよりも高機能だしね。唯一ダメだったのはパフォーマンスだったけどそれもネイティブになったことで改善されたから。

ネイティブC++ではほんとにUI開発環境はダメだというか進化がなかった。ダイアログエディタから止まっている。WinRT XAMLだとネイティブだしUIデザイナーも優秀だしデスクトップでサポートしてくれればUI開発環境が飛躍的に向上するのだが。

Windows 8 で改善してほしいフォントと日本語テキスト表示の問題 – Togetter

このエントリーをはてなブックマークに追加
はてなブックマーク - Windows 8 で改善してほしいフォントと日本語テキスト表示の問題 – Togetter
Share on Facebook
Bookmark this on Yahoo Bookmark

Windows 8 で改善してほしいフォントと日本語テキスト表示の問題 – Togetter.

これは確かにそう思うね。最近仕事でAppleのプロダクトを触る機会が多いけど、フォントの美しさの違いは私のような素人でもわかる。Windowsの画面に見慣れているとMacやiPadの画面の美しさは衝撃的だ。ただそれだけでMacにしようとは思わないが。

音楽理論テキスト

音楽理論テキスト. 多少なりとも音楽をたしなむ私としてはこのあたりをしっかりと理解しておきたいんだけどね。でもなぜか頭に入らないんだよね。。

BLIT

BLITとはエイリアスノイズが発生しない波形生成方式の一つ。 Synth-1のページの中にある「シンセプログラミング」の「オシレーター部(WAVEテーブルとBLIT)」の中に簡単な説明が書いてある。 polyIblitは … 続きを読む

LFOを実装中

LFOを実装している。これは波形メモリを流用して作ろうかなと思っている。面白い効果を得られそうだし。 安西史孝さんのサイト「おとなのためのアナログシンセ秘密基地計画」でアナログ・シンセ講座 がありシンセ作りの参考になるの … 続きを読む

関連情報