Category Archives: Win32

C# WASAPI NAudioで音量レベルメーターを作る

最低限必要なオーディオレベルメーターです。緑のメーターが音量、黄色CH1,CH2がそれぞれ左右のチャンネルです。オーディオデバイスが5.1chだと黄色いメーターが6個表示されます。5.1の”.1″は5ch + ウーハーのチャンネル。ドルビーとかの映画とかでしか使わないと思われる。(ゲームでも使われるのかな)

今回は、カスタムコントロール内でデバイス選択用のコンボボックスと、プログレスバーのオーバーライド(標準のままだと時間制御が入っていて音声の反応に追いつかないので、ただの四角で対応しています)

作ったきっかけ

最近、Twitchで音楽配信をやりたくなってドラムマシン(BOSS DR-880)とKORG Gadget 2のゲーム音源を使ってサンプリング音源で遊んでたりしてます。その時に音が出ているか目で確認したくて作りました。

前にも仕事でWASAPI+D2DでOSDとかWin32で作ってたけど、C#で 名前空間を 書き直したラッパーを公開している人がいるみたいなので使ってみました。Win32C++でCOMをマスターしてれば、MSDNそのまま使えるから必要ないんだけど。時間と作業効率上の問題か。それとバグった時の…しかし人が書いたコードを理解する時間と、自分で書くのとどっちが早いかが勝負。WASAPIを書き直したこの人の労力はすごいかも。C#でWASAPI理解するなら、C++でもいいじゃん。C++だと、アプリの動作が7割早いらしいね。(Win32 + COM最強!)

配信でOBSを使うならバックグランドを淡色にすれば背景を消せるので、これでもいいといえばいい。

あとは、アニメーションを作るときのエフェクトとか合わせるときの問題か。DXならブレンディングできるし。今後の課題。今回はAudioRenderデバイス(再生デバイス)からメインボリュームと、使えるチャンネルを表示している。

AudioCaptureデバイスもモニタ出来るけれど、Captureデバイスからサブスクリプションで有効なデータを受け取るイベントを受け取ってバッファを読むようだ。これだと生データが読めるのでFFTもできそう。実際はAudioRenderをループバックして、バッファを読んでデータを表示。スペアナの表示もできるっていうことらしい。ちなみにAudioCaptureのバッファのデータは、WaveExフォーマットでステレオデータを読むのでこれまたC++の方が使い勝手がいい(Win32 APIがSDKに用意されている)気がする

ダウンロードはこちら

Gitとかは相変わらず使いにくいし、シェアする気もないのでソースはZIPでアップしておく。(ご利用はご自由ですが一切責任は負いかねますのでよろしくお願いします)

このサイトは、プログラミングの知識のある上級者向けですのでソースコードに関する不具合は環境によって書き直してください。(サイトの管理者Nは対応しません)

これをエンジンとして、ビジュアル的なエフェクトが作れればいいなと思います。

Windows 10 VisualStudio 2019 C#WinFormで作成しています。必要なNuGetパッケージはスクショのリストの通り。NuGetからNAudio周りのパッケージをDLしてください。

次は、またSPEECH APIでコマンド管理アプリを上げていこうか。OpenCVで目、口、鼻トラックもできるようになったのでそっちかな。あとは、Youtubeチャット読み上げアプリとか絡めて、VTuber用アプリとか。

自分のTwitchアプリを作っていこう。

ちなみにTwitchチャンネルはこちらです。

結局MBPはWindows10マシンになりました

現状、PHPでSQLのデータのCSVエクスポート、.NET Frameworkアプリでの処理、そしてCSVファイルを生成してアップロードという作業がメインになっております。

しばらくは、MBPのWin10パーティションのサイズが足りなくなり、パーティションの切り直しして再インストールしようと思って古いデスクトップマシンで作業していたけれど、MBPでパーティションのリサイズができたので結局MBPのWin10に戻って作業しております。

MacのOSアップデートもたまに起動したときにするくらいで、XCodeも最近は触っておらず・・・

iPhoneアプリもそろそろライブラリのアップデートリリースしないと

そして、やっとLolipopのSSHを使ってリポジトリを導入することができました。まだセキュリティ周りの仕組みがわかっていない。手順は書けるけど最近のセキュリティ設定はちんぷんかんぷん。

そういえば、アンケートやレビュー書かなくなったなぁ。絶対にどこかでデータ抜かれてるんだろうけど、いちいち時間とられるし、自分から書きに行く行為が一番危ないと思う今日この頃。

やっぱりBeyond Compare

会社を退社してからというもの、フォルダの整理をするまでに至っていなかったので必要なかったのですが、先日Facebookでクリスマスクーポンで20%オフのオファーが表示されたのでPro版を買いました。$60の20%オフで$48。約5500円でMac/Linux/Winとクロスプラットフォームの永久ライセンスならそれで十分。

フォルダ・ファイルの比較を基本として、Windowsエクスプローラーよりの早いファイル管理、ファイルの右クリックからエクスプローラーシェルコマンドが使えるところ、ハードディスクの整理に非常に役に立つツールといえます。あまり必要だとは思わないが、Windows版は日本語もサポートされている。ファイルのバックアップや、ストレージ内の重複したファイルのチェックをしてなるべくローカルで持っておくファイルの減らして行こうと思います。

そのうち、使い方ページを書きたいけれど、英語版を買ったので日本語版を使っている人にはどうだろうか。(その時は日本語版をテスト機に試用版でインストールするか)

日本語版の代理店もあるみたいですけど、できれば直接ウェブサイトから購入しましょう。リンクはこちらから→Scootersoftwareウェブサイト

 

Visual Studio Community C# コードをXamarinでiOSと共有してみる その1

投稿が、日記のようになってきているが、日を追って進んでいるというで。一般的には進捗とか言うんだろうけど、そうなると仕事っぽく報告とか嫌いな感じになっていくのでそういう話はやめて書きたいことだけ書く。

C#プロジェクトのテンプレートに”Shared Project”というものがあり、どのくらいクロスプラットフォーム間でコードが共有できるか試してみました。
結局のところC#で書いたクラスをネームスペース上で使えるようになるというもの。

Desktop Appなり、UWPなり、Androidなり、iOSに依存したコードは書いた時点で、プロジェクト側がエラーを検知するようになっている。
一つのソリューション内に違うプラットフォーム用にプロジェクトを作っておいて、同じコードを使いまわすという想定なのだろう。

C#を中心にコードを書くのに、悪くない環境だ。下にあるスクリーンショットは書くプロジェクトのアイコンを示したもの。

この中でCSSharedProject1というのがShared Project。ちなみに、CPPSharedというのはWin32 C++のShared Project。それぞれ同じ言語でしか共有はできくなっている。Win32でDLLを書いて.NET側からDllImportなりでAPIを取り込むのとどちらがいいのかは、この時点では不明。

Win32で書かれた共有コードをC#に共有するためにはC++CLRでも書けるので、それぞれのクロスプラットフォームではコードレベルでの共有が有効かもしれない。

 

この共有プロジェクトを今回、VisualStudio2017 Communityに含まれることになった、XamarinでAndoidとiOSで共有ができることが確認できた。

注意が必要なのは、XamarinでiOSプロジェクトを書くときは、ネットワーク上にXCodeとVS2017がインストールされたMacが必要になる。しかもXCodeはiOS用にライセンスが必要。幸いiOS用のライセンスはあったのでVS2017 Community for Macをインストールしてサンプルをデバッグしてみた。

Windowsマシンからデバッグをスタートさせ、デバイスにiOS Simulatorを選ぶ。

その時点ではMacにVS2017がインストールされたいなかったので、リモートデバッグができないメッセージがでる。さらにXamarinのガイドでMac側のリモートログインを有効にしないといけないとのこと。(SSHを有効にする)

さらにSSHを有効にし、VS2017をインストールしたところで、デバッグを走らせると今度はXCodeのSDKのバージョンが古い。

今日はここまでで作業終了。

なんという長い手順だ。しかし、MacにVisual Studioをインストールして、リモートデバッグとはMSFTの好むやり方だ。

最近話題になっている、IoTデバイス(ラズパイ)のデバッグも同じ形式。ラズパイにIoT版Windowsをインストールして、デスクトップのVisualStudioからコードを書いてデバッグするという方法をとっている。もともとラズパイはスタンドアローンでパソコンとして動作するものをどうしてもう一台のパソコンを使ってプログラムを書かないといけないのか。Windowsをラズパイにインストールすればそれでいいはずなのに。

コードの共有ができたところで今日はここまで。C#で一度書けば、今のところ考えられる全てのデバイスで使えるのは良いところであろう。で?Arduinoは?やらないの?

 

 

Visual Studio 2017 Community

新規一転、プロジェクトを立ち上げようと、VisualStudio 2017 Proを買って正規の個人ライセンスで行こうと張り切っていたけれど、購入ページをよくみるとVS2017 Communityは Pro版との機能の違いはほとんどないみたいなので検証しつつ試用しながらインストールすることにした。(なんだかまだ環境だけでも長くかかりそうなので現在進行形)

一応価格は、Pro版で、スタンドアローンが$499、1 か月ごとのサブスクリプションで月$45。サブスクリプション版はMacでもつかえて、TFSも使えるようだ。

あとはクラウドサブスクリプション版で、月$45、年$539がある。クラウドサブスクリプションは旧版ののVSのライセンスもついて来て、その他もろもろの特典があるようだ。でもライセンスを買うならスタンドアローン以外に買う理由がない。(マイクロソフトに洗脳されるのは危険だしね)

結果からするとPro版とほぼ同じというのは、本当なようだ。

前回ExpressではWin32 C++プロジェクトで、COMのインスタンス数に制限があったり、スタティックライブラリを使えなかったりで一番使いたいところに制限がかけられていて使い物にならなかった。さらに検証するのに無駄な時間をさいてしまう結果だった(その時はVS2013Proを結局買った)けれど、今のところ既存のプロジェクトを開いてコンパイルも通っている。

一つ、見つかった不具合は、今日(8月15日)15.3のアップデートがリリースされていて、アップデート後Win32 C++プロジェクトをテンプレートから作成すると、文字化けが発生する。原因はテンプレートが吐き出すリソースファイルのテキストフォーマットがUTF-8になっている。UNICODEじゃないといけないんだけど、手動でNOTEPADでSaveAsするしかない。

結果としては、こういう画面になる。

このサイトは自分用のメモ書きなので、一つ一つ手順を書くことはしないが同じ問題に当たった人が検索でここにたどり着ければ、すぐにわかることなので詳細はこれ以上書かないよ。

15.2のWin32のテンプレートの名前はWin32Project1なんだけど、15.3ではWindows デスクトップ アプリケーションとされていて、感が的中。VSのスプラッシュが変わったのも変だと思ったけど。

今日と昨日で、2台のマシンにインストールして、今日インストールしたマシンだけこれが発生してちょっと焦った。2台入れて違うテンプレート名がでるなんてね。今日リリースという偶然で半日無駄にしてしまった。ふう。(お盆明けVS2017を使っている方々、アップデート結構時間かかるので要注意ですよ~。ってアップデート前にこの記事を見る人もいないと思うけど)

あと、SubVersionのプラグイン(ASVN)を入れたのだけれど、ローカルリポジトリを作ろうとするとVSごと固まってしてしまう。(VSが固まった後、OSがアプリケーションクラッシュのダイアログを出す)

原因はASVNプラグインにありそうだけれど、HTTPSのリポジトリは試していないので何とも言えない。MSでAzureのフリーアカウントでTeamServiceでGitを提供してくれるみたいなので、今後はGitでやっていこうかな。今後はGitが主流みたいだしね。(やっとSVNで慣れてきたのに。個人的にはLinux寄りのGitよりも、ApacheよりなSVNの方がすきなんだけど。その辺はどっちも使えないとね)