ビットレート変換の段

前回Waveファイルのサンプリングレート変換らしいことをしてみたので、次はビットレートの変換もできるようにしました。ビットレートというよりはビット深度ですか。
前回軽く解説的なことをしたので、今回もメモ的に残してみます。とはいえややこしいところは少ないので、周波数の変換に比べればだいぶ楽ですね。

Waveファイルのフォーマットではだいたい8ビット、16ビット、24ビット、32ビットの4種類が使われていて、
それぞれsigned char, short, int, floatの型で表すことができます(32ビット整数型もありますがややこしいのでスルー)。

それぞれのビットレートで持てる値の範囲は以下の通り。

8bit
0 ~ 255
16bit
-32768 ~ 32767
24bit
-8388608 ~ 8388607
32bit float
-1.0 ~ 1.0(範囲外の値も持てる)

基本的に値が0の時に無音なのですが、8ビットのみ128で無音になるので注意が必要ですね。

続きを読む ビットレート変換の段

サンプリングレート変換の段

今作っているゲームでは音声の再生にWASAPIを使ってみているのですが、
PCの設定次第で出力される音声フォーマットが違うのでそれぞれ対応する必要があることに気付きました。

用意している音声データは16bit/44100Hzで、同じ出力フォーマットの環境だと問題ないものの
HDMI側の音声出力を使ってサウンドコントロールパネルから16bit/48000Hzの形式に変えると音が間延びして再生されます。
これを正しく再生させるための対応として、44100Hzの音声データを別のサンプリングレートに変換する必要が出てきました。
Unity等だとこの辺りは自動でやってくれそうですね。

というわけでサンプリングレート変換の方法は大まかに下の二つの模様。

  • 音声データをn倍したり1/nに間引く
  • フーリエ変換して周波数成分を取り出し、逆変換して戻す

……このあたりの知識はあまり無いのですが、後者の方法は見るからに大変そうな上にちゃんと戻せるのか不安なところがあります。
というわけで前者の方法を取ることにしました。(10/4 フーリエ変換の方法を試してみました
続きを読む サンプリングレート変換の段

音楽ゲーム作りの段

もう5月も終わりですね。
COVID-19による緊急事態宣言も一往は解除されたということで、徐々にステイホームしなくてもいい感じになりますね。しっかり手洗いをしたり適度に距離を開けたりといった自己防衛は引き続き大事です。

自宅にいる期間が長かったこともあり、去年の5月にほんの少しだけ作りかけて放置していた音楽ゲーム(予定)の続きを進めてみました。
ひとまず曲を読み込めて演奏できるところまで。曲はアレっぽい風味でとりあえず。

……動画で見ても分かりにくいかもしれませんが、譜面のスクロールは手動で行う形です。曲の現在の演奏箇所も基本的には表示されず、練習時のアシスト機能としては自動スクロールと合わせて表示できる形にする予定。

この動画の状態からスコアの計算を入れたら一往は音楽ゲームらしい形になりそうです。多分。
続きを読む 音楽ゲーム作りの段

Lo-Fiというもの

スマートフォンから記事を更新するようになったとは言うものの、電車やバス等で長めに座っている時間が無いとなかなか更新できませんねー。
書こうと思っている内容は溜まっているくらいなのですが、時期を過ぎてしまうとさらに動きづらくなるという。

先日、所謂Lo-Fi的な感じの曲を試しに作ってみました。

boorx-lのステージとして作ると効果音で不協和音のような音が生まれる点はどうしようもないですね。
効果音もランダムでいくつか鳴らす形なので、曲に展開があってもそれに合わせて変更することができないという問題もあります。
展開をつけられない故に1分くらいの曲をさくっと作って組み込めるというあたりは利点。
曲を作った段階では効果音について考えていないので蛇足となりがちなあたりは難点。

続きを読む Lo-Fiというもの

続々々・DirectX11(完)

完と云うか一区切りですけれども。
前回で基本的な図形を描画できるようになったので、数年前にDirectX10で作りかけたアクションゲームを同じくらいのところまで作りかけてみました。

ゲームとして作るなら探索系かなーと思っていたところ、新作の海腹川背Fresh!が既に探索系なのでした。ちょうど今日体験版が配信開始とのこと。Switchを持ってる方はチェック。

続々・DirectX11

非常に遅々としていますが、DirectX11でのスケルトン?作りをまだ進めています。
本当は前回のものを作った時点で以前作りかけたアクションゲームを移植してみようかと考えていたのですが、
単純に置換するだけではどうにもならず二進も三進もいかなくなってしまったので、改めて一から作ろうと思いなおしました。
作業の半分以上は車輪の再発明である。

そして現在の状況がこちら。

……何だかよく分からない状態になっていますが、回転する立方体2つと板2つを用意して

  • 全画面をビューポートにした立方体2つ
  • 小さいビューポートで違うカメラから見た立方体2つ
  • 最前面に色を付けた板2つ

を描画しています。違うレイヤーで順番にオブジェクトを描画するみたいな。
続きを読む 続々・DirectX11

続・DirectX11

先日のDirectXのスケルトンのような形から少しずつ手を加え、ひとまず複数のオブジェクトを描画できる状態にもってきました。

ここでオブジェクトごとに行列を持たせるようにクラスのメンバにXMMATRIX型のものを作っていたところ、コンパイル時に「ヒープで割り当てられたオブジェクトが 16 にアラインメントされていない可能性があります」という警告が出るようになりました。
さらに無視して続けていると
C2338 You've instantiated std::aligned_storage with an extended alignment (in other words, Align > alignof(max_align_t)). Before VS 2017 15.8, the member type would non-conformingly have an alignment of only alignof(max_align_t). VS 2017 15.8 was fixed to handle this correctly, but the fix inherently changes layout and breaks binary compatibility (*only* for uses of aligned_storage with extended alignments). Please define either (1) _ENABLE_EXTENDED_ALIGNED_STORAGE to acknowledge that you understand this message and that you actually want a type with an extended alignment, or (2) _DISABLE_EXTENDED_ALIGNED_STORAGE to silence this message and get the old non-conformant behavior.」という長いエラーが出て実行不能に。
続きを読む 続・DirectX11

DirectX11ことはじめ

2019年もひと月が過ぎて2月になりました。
2019年としては今更感がすごいのですが、DirectX11に触り始めました。

というのも現在使っているPCがWindows10になってからVisual Studioでゲームらしいものを作っておらず、過去に作りかけたプロジェクトを開いてみるも環境が違うためビルドができないという状態になってしまっていまして。
以前の環境がWindows7+Visual Studio 2010なので、一気にVisual Studio 2017にバージョンアップしようものなら浦島太郎状態にもなるものですね。
DirectX10でのスケルトン的なものは以前に作っていたので、それをもとにDirectX11に書き換えてみるところから始めてみました。

続きを読む DirectX11ことはじめ

broox-l公開

先日の3分ゲーコンテストに参加したbroox-lを公開しました
ゲーム内容は変わりませんが、不要なファイルを消したうえで効果音がwav形式だったものを一括でogg形式に変換し、ファイルサイズを小さくしています(56.3MB→19.7MB)。

LÖVEではMac用の実行ファイルもそこそこ手軽に作成できるためMac版も試しに作ってみたのですが、BGMとメトロノームのタイミングが大きくずれてしまうため見送っています。
遊ぶことはできるものの、どうもSource:tellで取得できる時刻が実際の0.95倍くらい(体感)になってしまうようです。
oggファイルのエンコードの問題かも知れませんが原因は謎。

3分ゲー21

第21回3分ゲーコンテストの応募受付が始まっていました。
このタイミングなので以前に少しずつ作りかけていたワンキーゲームを投稿出来たらいいな、と考えています。…ここ数か月手を付けられていませんが、現状でだいたい形になっているので今月中には何とかなるはず。

コンテスト自体も一度休止したのち、前回の第20回からも大分間が開いての開催となる形ですね。
小さいゲームを公開する動機としてもいい機会なので、出すことを目的に気負わず進めていきたいところ。