トップページ > 記事閲覧
排他サウンドの音量設定
名前:motoYo 日時: 2020/02/21 10:22

排他サウンド(排他WASAPI/ASIO)を利用するとき、音量変化関数を利用しても聞こえる音量に変化がありませんでした。 (ChangeVolumeSoundMem / SetVolumeSoundMem) ・共有サウンド(共有WASAPI / XAudio / (利用不可のため現状未確認ではあるが、初期設定変更前は正常だった)DirectSound )では問題なく反映されます。 ・SetCreateSoundDataType / SetUseSoftwareMixingSoundFlag の設定の変更による変化はありませんでした。 ・GetVolumeSoundMem / GetVolumeSoundMem2 では、音量変化関数で設定した値が返ってきます。 ・サウンドデバイスの規定の形式の設定の変更による変化はありませんでした。 ・排他モードのチェックマークは両方入っています。(入れないと排他サウンド再生してくれない) ・ASIOはASIO4ALLを利用して再生しています。 ・排他WASAPI作成時にLOGに  オーディオクライアントの初期化が AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED エラーで失敗しました、遅延時間を調整します  の記載があります。関連性は特に感じられませんが、これ以外では特筆すべき内容は他に見当たりませんでした。 ・以下はサンプルプログラムになります。 //Test.oggを読み込み、画面上に音量を表示します。 //数字キーで音量が変化し、Enterキー(Returnキー)で再生を停止して再生しなおします。 #include "DxLib.h" #include <string> using namespace std; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //SetUseSoftwareMixingSoundFlag(TRUE); //ソフトウェアミキシング // //DirectSoundは利用不可...? //SetEnableXAudioFlag(TRUE); //XAudio //SetEnableWASAPIFlag(TRUE, FALSE, 0); //共有WASAPI //SetEnableWASAPIFlag(TRUE, TRUE, 0); //排他WASAPI //SetEnableASIOFlag(TRUE, 0); //ASIO SetOutApplicationLogValidFlag(TRUE); //LOG出力 ChangeWindowMode(TRUE); //ウィンドウ起動 if (DxLib_Init() == -1)return -1; //セットアップエラーで離脱 SetDrawScreen(DX_SCREEN_BACK); //裏画面描画 SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS); //全部を読み込んで全部を生成 一回だけ生成 //SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS_PLUS); //全部を読み込んで徐々に生成 一回だけ生成 //SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMPRESS); //全部を読み込んで徐々に生成 何度でも生成 //SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE); //徐々に読み込んで徐々に生成 何度でも生成 char inp[256]; int sndhdl = LoadSoundMem("Test.ogg"); PlaySoundMem(sndhdl, DX_PLAYTYPE_BACK); while (!ProcessMessage()) { GetHitKeyStateAll(inp); DrawString(0, 0, to_string(GetVolumeSoundMem2(sndhdl)).c_str(), 0xFFFFFF); if (!CheckSoundMem(sndhdl)) PlaySoundMem(sndhdl, DX_PLAYTYPE_BACK); else if (inp[KEY_INPUT_1]) ChangeVolumeSoundMem(0x00, sndhdl); else if (inp[KEY_INPUT_2]) ChangeVolumeSoundMem(0x44, sndhdl); else if (inp[KEY_INPUT_3]) ChangeVolumeSoundMem(0x88, sndhdl); else if (inp[KEY_INPUT_4]) ChangeVolumeSoundMem(0xBB, sndhdl); else if (inp[KEY_INPUT_5]) ChangeVolumeSoundMem(0xFF, sndhdl); else if (inp[KEY_INPUT_6]) SetVolumeSoundMem(0, sndhdl); else if (inp[KEY_INPUT_7]) SetVolumeSoundMem(2500, sndhdl); else if (inp[KEY_INPUT_8]) SetVolumeSoundMem(5000, sndhdl); else if (inp[KEY_INPUT_9]) SetVolumeSoundMem(7500, sndhdl); else if (inp[KEY_INPUT_0]) SetVolumeSoundMem(10000, sndhdl); else if (inp[KEY_INPUT_RETURN]) StopSoundMem(sndhdl); ScreenFlip(); ClearDrawScreen(); } DeleteSoundMem(sndhdl); DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 }
メンテ

Page: 1 |

Re: 排他サウンドの音量設定 ( No.1 )
名前:motoYo 日時:2020/02/21 18:38

追記になります。 oggファイルで ビットレート 1411kbps / オーディオサンプルレート 44.100kHz のものは音量変化が反映されず、 ビットレート 1536kbps / オーディオサンプルレート 48.000kHz のものは音量変化が反映されることを確認しました。 ASIO / 排他WASAPI のサンプリングレートは 44,100kHz です。
メンテ
Re: 排他サウンドの音量設定 ( No.2 )
名前:管理人 日時:2020/02/25 01:53

ご返信が遅くなり申し訳ありません ご指摘ありがとうございます プログラムを確認したところ、出力周波数と音源の周波数が一致していた場合に実行される処理で if( 音量の変更有りかどうか ) { // 音量変更有りの場合ここに来る 〜〜音量変更無し用の処理〜〜 } else { // 音量変更無しの場合ここに来る 〜〜音量変更有り用の処理〜〜 } と、if文の後の音量変更有りの処理と無しの処理が逆になってしまっていました orz 修正版をアップしましたので、お手数で申し訳ありませんが、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: 排他サウンドの音量設定 ( No.3 )
名前:motoYo 日時:2020/02/27 17:51

修正版でのリビルド後、音量変化が正常に動作することを確認しました。 (また、後に見つかったパン変更が同様条件下でできない問題もリビルト後発生しませんでした。) 全く関係のないことになりますが、ウィンドウ生成位置がデフォルトだと左上端になってしまうのは仕様でしょうか? (以前までは画面中央に生成されていました。ウィンドウをつかめないので不便に感じました...)
メンテ
Re: 排他サウンドの音量設定 ( No.4 )
名前:管理人 日時:2020/02/28 00:31

音量変化は正常に行われるようになったようでなによりです > 全く関係のないことになりますが、ウィンドウ生成位置がデフォルトだと左上端になってしまうのは仕様でしょうか? いえ、仕様ではありません 手元では今まで通り画面中央に生成されています… こちらのようなシンプルなプログラムでも画面左端にウィンドウが生成されてしまいますでしょうか? #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }
メンテ
Re: 排他サウンドの音量設定 ( No.5 )
名前:motoYo 日時:2020/02/29 08:49

確認しましたが、やはり画面左上端にウィンドウのヘッダー部分が隠れて生成されてしまいました。 もちろん、SetWindowInitPositionで生成位置を指定してやれば問題有りません。
メンテ
Re: 排他サウンドの音量設定 ( No.6 )
名前:みけ 日時:2020/02/29 17:47

自分も正常に画面中央に生成されますが 何か常駐ソフトとか導入されていないかしら? 昔、ウィンドウ位置記憶系のプログラムとかインストールしたの忘れてて苦戦した記憶があったので(汗 私が使ってたのは「VbWinPos」ソフトで全て窓を左上にするって設定だった。 あと、座標(0,0)に設定してウィンドウのヘッダー部分が隠れてしまう時は モニター本体の設定かビデオドライバー設定が怪しいかビデオドライバーの不具合と思われますのでご確認を、、
メンテ
Re: 排他サウンドの音量設定 ( No.7 )
名前:管理人 日時:2020/03/01 03:10

> motoYoさん 手元の環境では相変わらず正常な位置に表示されてしまったのですが、 DxLib_Init の前で SetGraphMode と SetWindowSizeExtendRate を使用した場合、 DxLib_Init の前で SetGraphMode を使用して、DxLib_Init の後で SetWindowSizeExtendRate を使用した場合、 DxLib_Init の前で SetWindowSizeExtendRate を使用して、DxLib_Init の後で SetGraphMode を使用した場合 DxLib_Init の前で SetWindowSizeExtendRate を使用して、DxLib_Init の後で SetGraphMode を使用して、その後さらに SetWindowSizeExtendRate を使用した場合 DxLib_Init の前で SetGraphMode を使用して、DxLib_Init の後で WindowSizeExtendRate を使用した後さらに SetGraphMode を使用した場合 など、SetGraphMode と SetWindowSizeExtendRate をいろいろ組み合わせて実行したところ、ウィンドウが中心に 表示されなかったり、描画の拡大率だけ変化してウィンドウのサイズは変化しなかったりなど色々な不具合が確認できました 確認できた不具合は発生しないように修正してみましたので、よろしければこちらの 修正版をお試しになってみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > みけさん お試しいただきありがとうございます よろしければみけさんも修正版でも正常な位置にウィンドウが表示されるかお試しになってみてください m(_ _;m
メンテ
Re: 排他サウンドの音量設定 ( No.8 )
名前:みけ 日時:2020/03/02 15:50

動作確認しました v3.21d タスクバーが無い場合に 画面左上端にウィンドウが生成されてヘッダー部分が隠れる現象を確認しました。 v3.21e タスクバーが無い場合も正常に中央に表示されました。 以上です、(-ω-)/
メンテ
Re: 排他サウンドの音量設定 ( No.9 )
名前:みけ 日時:2020/03/02 17:16

追記、、連投ですいません<(_ _)> 画面左上端にウィンドウが生成されてヘッダー部分が隠れる現象はタスクバー無し状態でも発生するようです SetWindowSizeExtendRate(1.0,1.0)でテストしてたので判らなかったのですが 1.0以外にしたら発生しました。 下記のみでも確認(タスクバー無し & 色々省略) v3.21e ChangeWindowMode(TRUE); DxLib_Init(); SetWindowSizeExtendRate(1.1, 1.1);
メンテ
Re: 排他サウンドの音量設定 ( No.10 )
名前:管理人 日時:2020/03/03 00:58

お試しいただきありがとうございます > 画面左上端にウィンドウが生成されてヘッダー部分が隠れる現象はタスクバー無し状態でも発生するようです > SetWindowSizeExtendRate(1.0,1.0)でテストしてたので判らなかったのですが > 1.0以外にしたら発生しました。 こちらは暫定最新バージョン( 本スレッド No.7 の URL の v3.21e の 3/1 の日付のバージョン )でも 発生してしまうということでしょうか? > 下記のみでも確認(タスクバー無し & 色々省略) > v3.21e > ChangeWindowMode(TRUE); > DxLib_Init(); > SetWindowSizeExtendRate(1.1, 1.1); とりあえず以下のようなテストコードを実行してみましたが、暫定最新バージョン では画面左上端にウィンドウが生成される現象は発生しませんでした #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // ウィンドウモードで起動 ChangeWindowMode( TRUE ) ; // タスクバー無し設定 SetWindowStyleMode( 1 ); // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // ウィンドウの拡大率を 1.1 に設定 SetWindowSizeExtendRate( 1.1, 1.1 ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } みけさんの環境では↑こちらのコード+暫定最新バージョンでも画面左上端にウィンドウが 生成されてしまいますでしょうか?
メンテ
Re: 排他サウンドの音量設定 ( No.11 )
名前:みけ 日時:2020/03/03 11:17

とりあえず、(No.10)でも発生しています あと、確認です、勘違いならごめんなさい。 // タスクバー無し設定 SetWindowStyleMode(1); これメインウインドウのスタイルを変更のタイトルバー無し設定ですよね? こちらは下記でディスクトップモードのタスクバー有り無しで動作確認しています WINDOWSの設定>個人用設定>タスクバー> ディスクトップモードでタスクバーを自動的に隠す(ON/OFF) -- 力量不足でデバッグ出来ませんが DxWindow.cpp 4100行近辺の ウィンドウの拡大率が1.0以外時で且つセンタリング処理(TrayWindow == NULL)時の処理を 修正すれば何とかなるかな?
メンテ
Re: 排他サウンドの音量設定 ( No.12 )
名前:管理人 日時:2020/03/04 02:09

> // タスクバー無し設定 > SetWindowStyleMode(1); > これメインウインドウのスタイルを変更のタイトルバー無し設定ですよね? すみません、タスクバーと仰られているのにタイトルバーのことだと思ってしまっていました orz ( 普段タスクバーを隠す設定にすることが無いので、「タスクバー無し」→「タイトルバー無し」と思い込んでいました ) タスクバー無し状態でウィンドウが左上端になってしまうバグを修正しましたので、 よろしければお使いください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > 力量不足でデバッグ出来ませんが > DxWindow.cpp 4100行近辺の > ウィンドウの拡大率が1.0以外時で且つセンタリング処理(TrayWindow == NULL)時の処理を > 修正すれば何とかなるかな? 私もその箇所かと思いましたが、TrayWindow は NULL ではなかったので、 else の方の処理を変更して対応しました
メンテ
Re: 排他サウンドの音量設定 ( No.13 )
名前:みけ 日時:2020/03/04 12:53

あと、動作には問題ないですが2点 1.SetWindowStyleMode(8)でWindowPositionがマイナス値になる、仕様? 2.SetWindowSizeExtendRate使用時にタイトルバー位置補正が無くなる。 最終チェックで使用したソースです -- #include "DxLib.h" // ウインドウスタイルの定義 // 0 :デフォルト // 1 :タスクバーなし ※タイトルバーなし // 2 :タスクバーなし枠なし ※タイトルバーなし枠なし // 3 :枠なし // 4 :何もなし // 5 :最小化無し // 6 :ツールバーに適したウインドウ // 7 :最大化ボタンつきウインドウ、初期状態が通常サイズ // 8 :最大化ボタンつきウインドウ、初期状態が最大化状態 // 9 :デフォルトに縁の立体化無し // 10 :最大化ボタンつきウインドウ、縁の立体化無し // 11 :閉じる無し、最小化無し #define WSTYLE_NUM (12) // ウインドウスタイルの数 int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) { int XPosition[WSTYLE_NUM] = { 0 }; int YPosition[WSTYLE_NUM] = { 0 }; for (int a1 = 0; a1 < WSTYLE_NUM; a1++) { DxLib_GlobalStructInitialize(); // ウィンドウモードで起動 ChangeWindowMode(TRUE); SetWindowStyleMode(a1); //各テストはコメントアウトして下さい。 // SetGraphMode(320, 240, 32); // SetWindowSizeExtendRate(1.1, 1.1); // SetWindowPosition(0, 0); if (DxLib_Init() < 0) return(1); // SetGraphMode(320, 240, 32); // SetWindowSizeExtendRate(1.1, 1.1); GetWindowPosition(&XPosition[a1], &YPosition[a1]); DxLib_End(); } DxLib_GlobalStructInitialize(); ChangeWindowMode(TRUE); if (DxLib_Init() < 0) return(1); SetDrawScreen(DX_SCREEN_BACK); ClearDrawScreen(); clsDx(); for (int a1 = 0; a1 < WSTYLE_NUM; a1++) { printfDx("StyleMode:%02d [X:%d - Y:%d]\n", a1, XPosition[a1], YPosition[a1]); } ScreenFlip(); if (GetWindowModeFlag() == TRUE) { MessageBox( GetMainWindowHandle(), "end", "MessageBox", MB_OK); } else WaitKey(); // ソフトの終了 DxLib_End(); return(0); }
メンテ
Re: 排他サウンドの音量設定 ( No.14 )
名前:管理人 日時:2020/03/06 03:17

ご検証いただきありがとうございます m(_ _)m > 1.SetWindowStyleMode(8)でWindowPositionがマイナス値になる、仕様? はい、( 多分 OS の )仕様です 最大化したときウィンドウの縁が見えなくなりますが アレはそういう形状に変化しているのでは無くて、縁の分だけ画面から はみ出しているようです… ( 同じくタスクバーが画面外に消える処理も、画面外に移動して見えなくなった後 『タスクバーを消す』処理は行われていなくて、見た目通り画面外の座標に 移動しているだけでした… ) > 2.SetWindowSizeExtendRate使用時にタイトルバー位置補正が無くなる。 すみません、座標補正関係の処理が煩雑になってしまっているので、 ひとまず『SetWindowSizeExtendRate 使用時はタイトルバーは考慮しない』 という現在の状態で仕様としてしまおうと思います m(_ _;m
メンテ
Re: 排他サウンドの音量設定 ( No.15 )
名前:みけ(解決) 日時:2020/03/06 08:36

了解です、、 ひとまず、スレ主と違いますが解決とさせていただきます お疲れ様でした<(_ _)>
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存