Category Archives: App Store Connect

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チャンネルはこちらです。

App Store Connect: アプリの申請の時に、「1個のローカリゼーションでエラーが発生しました」と表示される

新しいiPadや、iPhone XRがリリースされると、必須のスクリーンショットが増えていて定期的なアップデートの申請で、「1個のローカリゼーションでエラーが発生しました」と表示されます。

調べていると、メディアマネージャの設定で解決するとのことですが、App Store Connectの申請ページに「メディアマネージャで全てのサイズを表示」のリンクが表示されず、メディアマネージャが開けない状態で、エラーの対処ができない状態でした。

その後ウィンドウサイズの問題(ウィンドウサイズが狭い時はこのリンクは表示されません。改行もされず消えるだけ)と気が付いて、iPhone 5.5インチディスプレイにiPhone 6.5インチの画像を使用するというチェックを入れて、申請することができました。

正常な表示

ウィンドウの幅が狭い時

私の場合、フリーランスでアプリを作っているので問題ないですが、こんなの上司にプッシュされたらやってられませんね。(以下略)
アプリ開発は焦らず、そしてできるときに早めにやっておくのがいいでしょう。

参考までに。

XamarinでAdmobをiOS、Androidを実装

手順はこちらを参考にしました。

Xamarin.Formsでカスタムレンダラーを使って、AdMobのバナー広告を表示する(iOS/Android)

nuGetでXamarin.Google.iOS.MobileAdsを追加。Google.MobileAdsネームスペースが使用可能になる。(バージョンは常にアップデートされているので注意)

サンプルでは、iOSとAndroidでNativeレンダラーをそれぞれに作って、違うコードで書くようになっている。

ポイントは、PCLの共有部分で空のContentViewの派生クラスを作って、PCLのUI上にコントロールを配置し、レンダラーをExportからオーバーライドしている点。

iOS Nativeのコードはまだ、理解不能だけれどこういうやり方は参考になる。