ラベル サウンド処理 の投稿を表示しています。 すべての投稿を表示
ラベル サウンド処理 の投稿を表示しています。 すべての投稿を表示

2021-11-15

Windows環境でのマイク音がおかしい時の試したいこと

 先日、PCを買い替え、Windows11にしたところ、マイクの音がやけにおかしいという状況になりました。具体的には

  • エコーして聞こえる
  • ノイズキャンセリングされている?
  • 音が遅延する
という感じで、特に特別なソフトを介してもおらずどうなっているのか。。。。と試行錯誤。これじゃあZoomとか、オンライン動画の作成に支障がでるな、、と困惑しておりました。

原因と対策
原因として考えられるのは、OSのカーネルミキサーというやつが悪さをしている可能性があり。。解決策として、
【コントロールパネル】→【ハードウェアとサウンド】→【オーディオデバイスの管理】
で設定を次のように変更する。
  • 【録音】より該当のマイクを選択→プロパティで詳細の「排他モード」と「オーディオ機能拡張を有効にする」のチェックを外す
  • 【再生】より該当のスピーカーを選択→プロパティで詳細の「排他モード」と「オーディオ機能拡張を有効にする」のチェックを外す
注意点は後者の設定かな。。おそらく、前者のマイクの設定だけで解決しているのだろうけど、後者が悪さをして治ってないように見える、、、このトラップにハマって無駄な時間を消費しました。

補足
すべてのWindows PCでこのような現象になっているわけではないというのが、これまた問題。ノートPCでは問題ないし、自宅のデスクトップでも問題なし(いずれもWindiows11)。環境依存ということでしょうか。。


2015-05-15

VBAでWin32APIを利用したサウンドの再生と停止

VBAにはサウンドを再生するメソッドは標準で用意されていません。そこで、Win32APIを利用することになります。ここでの注意事情ですが、
  • VBAのアプリを終わらせてもサウンドは鳴り続けるので、終了処理において必ず停止させる必要がある。
  • 再生できるフォーマットはmp3、wav、mid
  • mp3については再生できない場合がある
最後のmp3についてですが、詳細はわかりませんが、OSの何かの設定の違いにより、mp3を読み込ませるとフリーズすることがあります。同一のプログラムを異なるPCで実行させた時に、片方は再生成功、片方は再生失敗(フリーズ)という状況が起こりました。そのPC自体がmp3を再生できないというわけではないので、何かの設定の問題でしょう。


2014-08-20

C#にてDirectXのAudioVideoPlaybackを利用したサウンドの同時再生。

C#でサウンドを再生するには、通常PlaySoundクラスを利用しますが、このクラスは音声ファイルの同時再生ができません。片方がなっている状況で別のファイルを再生をすると、片方が止まって新たしく別のサウンドが再生します。ゲームなどでは不便ですね。BackgroundWorkerを利用してマルチスレッド化を行っても、1つの再生プロセスを共有しているようで、PlaySoundクラスを利用したサウンドの同時再生は実質不可能なようです。

この問題には、DirectXを利用することで解決できます。事前に下記の設定をしたうえで、サンプルのように書けばOKです。このサンプルではボタンを押すと、他方のサウンド再生に関係なく、サウンドが再生します。なお、サンプルのように毎回インスタンスを生成しないと思ったように再生されません。
  • C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0\Microsoft.DirectX.AudioVideoPlayback.dllを参照に追加
  • app.configに<startup uselegacyv2runtimeactivationpolicy="true">を追加


  • 【デバッグ】→【例外】→「【Managed Debugging Assistants】→【LoaderLock】の「スローされるとき」のチェックを解除


  • 以上の設定をした上で下記のコードのように書けばOK。

    参考サイト

    2011-05-25

    Androidでのサウンドファイル再生を試みた

    表題のとおりAndroidで音声ファイルの再生を試みたのだが、しょうもないところでつまづいたのでメモ書き。

    エミュレーターの設定
    サウンドファイルを再生するには、
    • エミュレータオプションで –useaudioを指定する
    といった記述がネットで見られるが、これはなくてもいい感じ。記事が古い?エミュレーターのハードウェア設定では、Audio PlayBack Support という項目があるようだが、デフォルトでYesになっているらしい。いちおう僕は念の為にしてしておいたけど。

    再生の手順
    基本的には下記の処理でオッケイということになる。
    MediaPlayer mp = MediaPlayer.create(this, R.raw.????);
     mp.prepare(); // 準備(ここは注意点。後述の説明を読む)
     mp.start(); // 再生
    
    ただ、prepareメソッドでちょっとハマった。最初、この記述でプログラムを動かすと予期せぬエラーがでて再生できない。リソースの読み取りタイミングに問題があるのかなーとか思ってたら、どうやらprepareメソッドには次の注意点があるようだ。
    • 上記のようにcreateメソッドをつかってMediaPlayerのインスタンスを生成した場合、既にprepareの状態になっている。この状態でprepareメソッドを呼んではいけない
    • MediaPlayerクラスのインスタンスを new することで生成した場合は、prepareメソッドを呼ばなければならない。
    ということらしい。というわけで、上述のプログラムでは、2行目は必要ないということになります。