ふらっと C#,C♯,C#(初心者用) Part142

■ このスレッドは過去ログ倉庫に格納されています
2019/03/07(木) 06:35:41.12ID:6L3KEJfe0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■関連スレ
C#, C♯, C#相談室 Part93
http://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part141
http://mevius.5ch.net/test/read.cgi/tech/1544839627/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/05/11(土) 19:52:49.57ID:VR7g318H0
>>796
それならexeと同じディレクトリのところから使うには
System.IO.Path.GetDirectoryName(Application.ExecutablePath)とか使って必ず絶対パスに直さないと危ないってことか
798デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 10:29:51.59ID:zQc98Y8H0
Console.WriteLine(System.Environment.CurrentDirectory);
としても出力には何も出てこないのですか?
出てこないです
作業フォルダっていうのはform1.csとは別のファイルのことなんですね
2019/05/12(日) 10:48:00.86ID:NzWVi3Qm0
console覗くか
traceあたりに出力しないとでは
800デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 10:52:27.58ID:zQc98Y8H0
おっ いけました
'2d_engine.exe' (CLR v4.0.30319: 2d_engine.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。
これで正しいのかわからないですが、なんで実行ファイルがこんな場所にあるんでしょうか。プロジェクト内にあるのかと思ってましたが
2019/05/12(日) 10:53:02.25ID:M17KJIhd0
>>798
WinFormsアプリはそのままではConsoleを使用できない
Consoleを自分で準備すれば使えるが、通常は使わないかな

フォルダ(≒ディレクトリ)とファイルは違うぞ
2019/05/12(日) 11:02:52.23ID:NzWVi3Qm0
謎は解けた
2019/05/12(日) 11:03:02.94ID:PIRDu/CH0
>>800
その絶対パスは実行ファイルじゃない
その表示されているところにConsole.WriteLineで書き込んだ内容出てくるはず
2019/05/12(日) 11:04:19.53ID:JwWGS0EoM
空のコンソールアプリ作ってそこで実行して
2019/05/12(日) 11:06:21.31ID:JwWGS0EoM
そのgifファイルは実行ファイルが作られた場所に自動でコピーされてないので
コピーされるようにgifファイルの設定帰るしかない
2019/05/12(日) 11:08:55.17ID:M17KJIhd0
>>800
勘違いしてる。Console使わず、
MessageBox.Show( System.Environment.CurrentDirectory );
ってやってみてよ。
2019/05/12(日) 11:35:01.56ID:1UlYWsgm0
>>800
カレントディレクトリはexeのあるディレクトリとは別物だからです
System.AppDomain.CurrentDomain.BaseDirectory
を使ってください
2019/05/12(日) 11:42:27.50ID:Zs5BDDrj0
AllocConsole() してみなされ
2019/05/12(日) 11:46:33.54ID:7nn+3/Jt0
>>800
プログラムの実行ファイルがある場所とは別に、プログラムの実行時に「どのフォルダでプログラムを実行するか」という概念があるのは分かる?
2019/05/12(日) 11:49:29.62ID:PIRDu/CH0
先生多すぎて混乱してそうw
811デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 13:55:38.46ID:zQc98Y8H0
混乱してるんで一度整理します
2019/05/12(日) 14:13:47.11ID:PIRDu/CH0
そもそもカレントディレクトリを表示させる必要があるのか?
画像をPictureBoxに表示するのが目的じゃなかったのか
813デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 15:18:28.27ID:zQc98Y8H0
そうなんですが、そのために相対パスを設定したいんです
絶対パスでも別に不自由しないですが、ソフトを作るときは相対パスも使うと思うので
2019/05/12(日) 15:40:46.00ID:Q+XtJRAz0
>>790
VisualStudioでF5実行やデバッグをすると(何も設定を変えてなければ)ビルド出力先がカレントディレクトリになる
相対パスでエラーになる原因はビルド出力先にimg\volly.gifが存在しないから
なのでimg\volly.gifをビルド出力先にコピーしてやれば相対パスで読み込めるようになる

プロジェクトエクスプローラーでimg\volly.gifを右クリックしてプロパティを開いて
「ビルド時のアクション」を「なし」に変更
「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更
これでビルドすると出力先フォルダにimg\volly.gifがコピーされるようになる
2019/05/12(日) 15:41:40.00ID:CayLEbz10
>>813
実は業務ではカレントディレクトリをあてにした動作はさせない
なぜなら制御できないから
なので相対パスをプログラムで取得したら
自分が基準とするディレクトリパスと自力で連結させて絶対パスにして使う
2019/05/12(日) 15:43:12.88ID:Q+XtJRAz0
画像ファイルがたくさんあって1こ1こ設定するのがめんどくさい場合は
imgフォルダを右クリックして同じようにコピーの設定をする
そうすれば1つの設定でフォルダごとまるごとコピーしてくれる
2019/05/12(日) 15:54:06.76ID:0iYfvooEa
まあ、そもそも特に理由がなければ画像ファイルはリソースに突っ込むべきだね。

どうしても生の画像ファイルを使いたいならソリューションエクスプローラーからプロジェクトに追加して
プロパティウィンドウの「出力ディレクトリにコピー」の値を「常にコピーする」にすれば
ビルトすると自動的に実行ファイルと同じディレクトリにコピーされるようになる。

ディレクトリの階層を作りたいならソリューションエクスプローラ上で階層を作れば
それがそのまま反映されてコピーされる。

実行ファイルのディレクトリはこれで
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.application.startuppath
2019/05/12(日) 16:00:55.91ID:xH15WcK+a
OpenFileDialogなどを使うだけでカレントディレクトリは変わるし
EXEのショートカット経由で起動する場合は任意のカレントディレクトリ位置に出来るし
他プロセスからWorkingDirectory設定無しで起動される場合も考えたりすると
プログラム中で内部的に相対パスを保持するのは構わないけど
IO系APIを呼び出す時は、AppDomain.BaseDirectoryなどと結合して絶対パスにしてから渡したほうがいい
819デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 16:17:07.77ID:zQc98Y8H0
なるほど
自分で絶対パスを1つ決めて、そこを起点にすると
820デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 17:07:03.34ID:zQc98Y8H0
関係ないんですけど、コードってどこに保存してますか?
普通にテキストエディタに保存してますけど
2019/05/12(日) 17:15:13.31ID:Zs5BDDrj0
大事な物は心の中に
2019/05/12(日) 17:22:08.37ID:O1RPDIWFM
>>820
一般的にはGitを使ってGitHubで管理する
だけど今の君のレベルではそんなのは必要ない
今の君のレベルで書いたコードなんて一ヶ月後にはゴミであり、大切に保存する価値などない
一ヶ月後のレベルの上がった君から見ればゴミだという意味であり、決して悪い意味じゃないから勘違いするなよ
823デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 17:25:13.38ID:zQc98Y8H0
自分の環境の場合、プロジェクトフォルダ\bin\debug\hoge.exe
という場所に実行ファイルが作られるようです
Cフォルダの直下あたりに作られるという説明がされちえますが、何か間違ってますかね
//カレントディレクトリの取得
MessageBox.Show(System.IO.Directory.GetCurrentDirectory());
場所ってのは自動的に決まる感じですか
2019/05/12(日) 18:06:37.88ID:hmzYcUWua
>>823
日本語で
何を言ってるのかさっぱり分からんよマジで
2019/05/12(日) 18:42:19.48ID:Mxa5Iz6jd
>>822
gitサーバーはいろいろ使われてるのにGitHubが一般的は言いすぎだろw
2019/05/12(日) 18:49:55.29ID:JwWGS0EoM
この人はソースをテキストエディタに保存していると言ってるから
iOS使いなんだろうなと思う
2019/05/12(日) 19:28:54.08ID:eC5ErjVyd
壮大な計画立てて時間だけがかかって何も完成させられない典型的な例
828デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 19:36:30.99ID:zQc98Y8H0
すみません
がんばります
2019/05/12(日) 22:05:40.63ID:TmkC4DiT0
LINQ勉強しててよくわかんないんですけど範囲変数ってあれ事前に宣言しなくていいんですか?
マイクロソフトのサンプルとか見ても例えばselect score in scoresとか出てきてscoreどこから出てきたってなるんですけど
全体的な印象ですけど、SQLはちょろっとかじったので列名無いのにSQLっぽく書いてるLINQってなんかしっくりこないんですよね……
2019/05/12(日) 22:31:12.34ID:RcOwQ/d80
>>829

Linqはクエリ式よりメソッド構文の方がとっつきやすい。
クエリ式はSQLに似てるけど、C#の文法に照らすと異質だしな

scores.Select(score => ・・・);

scoreはどこから出てきたの?ってことならまずはラムダ式からじゃないかな
2019/05/12(日) 22:31:33.06ID:5S2KiOuR0
まずLINQとクエリ構文は別物だぞ
> select score in scores
select句はクエリ構文の最後に抽出するものを指定するんだからこんなのはあり得ない
select句じゃなくてfrom句だろう
scoreはそのクエリ構文内で使うローカル変数的なものなんだからクエリ構文内で出てくるのが当たり前

列名が無いってのは単に数値の配列とか相手にしてるからじゃね
SQLは二次元相手にしか使わないがLINQ/クエリ構文は1次元相手にも使えるからな
scoresがclass Score { public string Name; public int Value; }の配列とかなら
from score in scores
select score.Value
みたいに「列名」が出てくる

あと重要なことだが、クエリ構文は使いどころがあんまり無い
基本的にLINQには拡張メソッドを使う
2019/05/12(日) 22:32:12.36ID:tDx5/mlf0
>>829
メソッド式使えよ
2019/05/12(日) 22:33:30.63ID:tDx5/mlf0
SQLでもテーブルの別名使ったりするやろ
2019/05/13(月) 07:59:49.56ID:W1wujo120
https://ideone.com/mKdtnM
独習C#のコードなんですが170行目のshapes[i].Nameは何故実行出来てるのでしょうか?
Nameプロパティには何も記述がないのですが・・
2019/05/13(月) 08:25:11.57ID:mnyzhKg9a
>>834
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties
2019/05/13(月) 08:29:59.30ID:V/EVdZRD0
>>834
それを学ぶのがその章の目的じゃないの?

Nameプロパティの定義は71行目

163行目のshapes[0].Nameは引数で指定された"right"がセットされる。
164行目のshapes[1].Nameは省略時引数により139行目のコンストラクタを経由して"rectangle"がセットされる。
165行目のshapes[2].Nameは省略時引数により134行目のコンストラクタを経由して"rectangle"がセットされる。
166行目のshapes[3].Nameは省略時引数により106行目のコンストラクタを経由して"trizngle"がセットされる。
2019/05/13(月) 08:34:33.58ID:W1wujo120
>>836
そうなのですが
でもvalueで代入してないのに何故Nameプロパティが機能してるのか分からなくて…
setとgetの中身を記述しなくてもプロパティは機能するのですか?
2019/05/13(月) 08:52:41.32ID:VAfV6Qs50
public string Hoge { get; set; }

private string _Hoge;
public string Hoge { get { return this._Hoge; } set { this._Hoge = value; } }
の省略構文みたいな感じになる
(実際にはこの_HogeはC#からアクセスできない名前にコンパイルされる)
2019/05/13(月) 08:57:28.04ID:WhpQbL/L0
>>837
string Hoge { get; set; } は自動実装プロパティと呼ばれるもので、
内容は>>838の通り。
2019/05/13(月) 10:05:53.21ID:yzhNtOt8H
ありがとうございました

>>831
https://docs.microsoft.com/ja-jp/dotnet/csharp/linq/query-expression-basics
そうですねfromの間違いでした失礼しました
「scoreはそのクエリ構文内で使うローカル変数的なもの」ってのは割としっくり来ました
「LINQ/クエリ構文は1次元相手にも使える」SQLとは全くの別物と考えて頭からっぽにして勉強しなおしたほうがよさそうですね
841デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 15:49:43.81ID:d2gOVbtC0
vsを軽くするセッティングはないでしょうか?
重くなる原因はhddへのアクセスが100になってしまうからです
SSDはないです
2019/05/13(月) 16:02:30.23ID:UKQBojaO0
object 型の変数 x に int 型にキャストできる型(short 型や byte 型など)の値が代入されているときに
その値を int 型にキャストしたいのですが、(int)x とすると InvalidCastException が投げられてしまいます。
x に代入されている値が例えば short 型だと分かっているなら (int)(short)x でうまくいくのですが、
この方法だといちいち値の型を調べる必要があるのでもっとスマートな方法があれば教えていただきたいです。
一応自分でも考えてみたところ int.Parse(x.ToString()) なら x の型によらずうまくいったのですが、
値の変換をするだけなのに文字列を経由するのはすごく無駄なことをしているような気がします。
よろしくお願いいたします。
843デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 16:05:08.31ID:d2gOVbtC0
private void Form1_Load(object sender, EventArgs e)
{
var but = new System.Windows.Forms.Button();
but.Name = "button1";
but.Text = "押せ";
but.Location = new Point(0, 0);
but.Size = new System.Drawing.Size(80, 20);
Controls.Add(but);
}
コードでコントロールを追加したいのですが、ボタンは追加されませんでした
エラーでも出てくれればいいんですが、エラーは出ません
エラーは出ないけど、思い通りに動かない場合、何をヒントにしたらいいでしょうか
2019/05/13(月) 16:07:12.88ID:XGLfyuuud
ググりゃいくらでも記事出てくるやんけ
そいつらは試したの?
自身の環境も書かない、何を試したかも書かない、知識不足なのに勝手に要因を決めつける
初めて質問するならまだしも散々してきといてそれ?
2019/05/13(月) 16:08:41.09ID:XGLfyuuud
>>844
841に対して
846デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 16:14:20.97ID:d2gOVbtC0
出てきました
場所が悪かったようです
ごめんなさい
2019/05/13(月) 16:14:45.92ID:UKQBojaO0
>>843
そのコードをコピペして試してみたら私の方では問題なく表示されました。
そちらでうまくいかない原因は
・Form1_Load が呼び出されていない
・追加したボタンの上に別のコントロールが重なってしまっている
あたりではないでしょうか。

とりあえず Form1_Load が呼び出されているかどうかを確認するために
Form1_Load の最後に
MessageBox.Show("呼び出されてるよ"); を追加してみて、
メッセージボックスが表示されるかどうかを確認されてみてはいかがでしょうか。
848デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 16:15:55.94ID:d2gOVbtC0
>>844
問題はhddへのアクセスです
これは公式のサイトでは、SSDへの交換を推奨しています
それ以外の手段はないかなと思って質問しました
849デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 16:16:41.14ID:d2gOVbtC0
>>847
ありがとうございます
位置が0 0だと左側に隠れてしまうようでした
2019/05/13(月) 16:23:36.93ID:UKQBojaO0
>>849
解決したようでよかったです。
私も勉強中の身なのでお互い頑張りましょう。
851デフォルトの名無しさん (ワッチョイ 7f2d-vM1y)
垢版 |
2019/05/13(月) 16:31:17.78ID:fb9Hu3lu0
ついでに聞きたいんだけど、このボタンの描画ってUIスレッドで実行されることは保証されてるの?
2019/05/13(月) 16:34:35.11ID:VAfV6Qs50
>>842
Convert.ToInt32

>>851
それがUIスレッドの仕事なんだけど、何を心配してるの?
2019/05/13(月) 16:51:55.46ID:UKQBojaO0
>>852
まさに探していたものです!
最悪の場合、型ごとに場合分けしてキャストするメソッドでも
作ろうかと思っていたのですが、実にスッキリ解決できました。
どうもありがとうございました。
2019/05/13(月) 17:46:32.42ID:W1wujo120
>>838-839
詳しくありがとうございます。
前の章にも書いてありました。自分の勉強不足でした…
855デフォルトの名無しさん (アウウィフ FF1b-8Yy7)
垢版 |
2019/05/13(月) 18:45:40.09ID:cAHvDA7yF
PCからのサウンド出力をイヤホンが刺さっている刺さっていないに関わらず、内部スピーカーかイヤホンか選択して出すにはどうしたらいいでしょう
NAudioを使っていろいろ試してるんですがうまくいきません

OS Windows10
サウンドデバイスがSpeakers/Headphones Realtek
だとサウンドデバイスがスピーカーとヘッドホンに分かれていませんが、これだと無理なのでしょうか
2019/05/13(月) 19:00:08.34ID:rRpVq2UzM
それは間違った機能だから出来たとしても実装するな

イヤホンが刺さってたら絶対イヤホンで出せ
857デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 20:12:51.62ID:d2gOVbtC0
public Form1()
{
MessageBox.Show("form1");
}

private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("form2");
}

フォームアプリについてなんですが、この2つ関数の違いはなんですか?
タイミング的にはform1関数が先なんですが、どう使い分けるんでしょうか?
2019/05/13(月) 20:22:07.84ID:zDycstDZa
>>857
先に言語の入門本やサイトなどを読むべき
そうすればクラス名と同一名のメソッドには特別な意味があることが分かるし
そのキーワードと一緒にイベント名で検索すれば関連する話題も出てくる
2019/05/13(月) 20:29:22.69ID:XGLfyuuud
何度も何度も基礎からやれって言われてもずっとやらんのだからもう無理だと思う
こういうのが才能とかセンスみたいなもんなのかね
860デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 20:29:39.44ID:d2gOVbtC0
調べた限りでは
フォームが作られるときと、作られて読み込まれたとき
という差でしょうか
2019/05/13(月) 20:38:07.48ID:jADcqpCya
>>855
普通は物理的に切り替えている(ジャックにプラグを差し込むとSP出力が物理的に切断される)から無理でしょうww
恐らくソフトウェアでそれをやってるマシンはないと思うよ
2019/05/13(月) 20:47:37.18ID:XlJDR9UI0
>>855
その機器のドライバにAPIでも無ければ少なくともC#では無理
ハードウェアの方から調べることでここで質問して答えられるようなものではないと思う
>>860
http://bbs.wankuma.com/index.cgi?mode=al2&;namber=38433&KLOG=66
コンストラクタはクラスで必ずはじめに実行されるもの
イベントメソッドと分けて考えないと
2019/05/13(月) 21:05:00.08ID:0/Wah16u0
>>857
だから入門用の本を読めと何度も言ってんだろうが
864デフォルトの名無しさん (アウアウカー Saeb-8Yy7)
垢版 |
2019/05/13(月) 21:38:52.34ID:ZJ4TG7EAa
>>856>>861>>862
ありがとうございます

無理ですか。。
Audio Switcherなるものがあるのでソフトウェアからの制御もなんとか出来るかと思ったのですが
2019/05/13(月) 22:32:05.56ID:jADcqpCya
>>864
ハードウェア的にスプリッターを使ってライン出力かヘッドフォン出力を
二股で取り出せるようにする方が賢明でしょうね

100均で売ってるよ
2019/05/13(月) 22:38:16.41ID:lwKqLD9e0
>>864
いや昔やったこと有るからできるんだが、昔過ぎてやり方思い出せんわ
Vistaからマスターオーディオの制御ができるAPIがWindows標準になっていて
当時見たソースの跡地だけ発見したわ
https://www.codeproject.com/Articles/18520/Vista-Core-Audio-API-Master-Volume-Control
2019/05/13(月) 22:41:01.01ID:lwKqLD9e0
>>864
ググったらそれらしきもの在ったから、あとは自分で頑張ってくれ
http://mikeo410.minim.ne.jp/cms/~programmingcoreaudiointerface
2019/05/13(月) 23:02:15.55ID:jADcqpCya
いやいやいやw
https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%B3%E3%83%97%E3%83%A9%E3%82%B0
↑に説明付きの画像が出てるけど、要するにプラグが差し込まれると物理的にSP出力がオープンになる
構造に普通はなってるんで無理ですw

その辺テレビとかと何も違わないよ
2019/05/13(月) 23:05:51.31ID:0pB96hJZ0
プラグが刺されるとオープンになるジャック使ってるのは、プラグが刺されたらスピーカーから音が鳴らなくて良いものだけだろ。
テレビでも最近のはそんなジャック使ってないわw
ジャックにプラグ刺されてるか判定してるだけ。

お前はどんなラジカセで書き込みしてるんだ?
2019/05/13(月) 23:08:05.97ID:jADcqpCya
>>869
確認してから書いた方がいいよ。

特殊な業務用とかフィリップスみたいなところが作ってる超高級品は知らんけど、
大概のTVはそんなもったいぶったことしてないの。する意味がないでしょ
2019/05/13(月) 23:16:14.24ID:lwKqLD9e0
>>870
WindowsだとUSB経由とかS/PDIDとか有るし、そこに必ずSPが繋がっているとも限らないから
音声の切り替えはソフトでやっているのよ
イヤフォンの切り替え機能って俺の記憶だとWindows10 が最初だよ
2019/05/13(月) 23:26:37.35ID:lwKqLD9e0
>>870
あと、Windowsの機能で切り替えるのは標準の出力先だけだが、当然APIで標準以外の出力先に音声流すことも可能だ
2019/05/13(月) 23:28:52.35ID:jADcqpCya
>>871
それはオーディオデバイスが複数ある時にどれを有効にするかって話と違うの?

あと、高級品のサウンドカードだと複数系統の出力があってそれぞれボリュームコントロールが
ついていたりするかもしれないが、そういうの使ってるならこんな質問してないと思うよ。

普通に考えてオンボードのサウンドしかついてない普通のPC前提の質問じゃないの?
2019/05/13(月) 23:31:41.38ID:jADcqpCya
なんかググるとM/BによってヘッドホンとSP(ライン出力)が排他になってるのと
そうでないのがあるみたいだけど、質問者みたいに排他になってる場合は普通は
物理的に切り替えてるはずなんで、ソフトじゃどうにもならんと思うよ
2019/05/13(月) 23:32:56.12ID:lwKqLD9e0
>>873
普通のパソコンだってUSBのデコーダー付けられるだろ
それがどうやって物理的に切り替えられるのか考えてくれよ
それと俺は音楽プレーヤーソフト作ったこと有るから、恐らくあんたよりは詳しい
2019/05/13(月) 23:38:00.03ID:jADcqpCya
>>875
USB接続のオーディオデバイスを使ったら
M/Bのヘッドホンからはそもそも音が出ないと思うんだけどね普通は

複数のオーディオデバイスを同時に有効にして同じ音を出す、
なんて芸当できるんだっけ?
2019/05/13(月) 23:40:11.66ID:jADcqpCya
光出力が付いてる場合は排他にできるわけないね確かに。
でも質問者がそういう環境ならこんな質問してないわな
2019/05/13(月) 23:41:57.51ID:lwKqLD9e0
>>876
Windows10は普通にイアフォンとその他が切り替わるように仕様変更されている
勿論それがHDMI経由だろうがSP端子だろうが光出力だろうが
2019/05/13(月) 23:43:53.50ID:lwKqLD9e0
>>877
つかWindows95の頃から、音声出力はソフトで切り替えるのが常識だよ
ハード的に変えるほうが寧ろ珍しい
2019/05/13(月) 23:51:07.37ID:jADcqpCya
>>878
いやちょっと何を言ってるのか分からないんだけど、
ハードウェアがそうなってなきゃソフトがいくら頑張っても手も足も出ないのよ

質問者の環境はSP出力とヘッドフォン出力が排他的になってる環境で、
その切り替えは普通はメカ接点で物理的に行われるものだから、ソフトじゃどうしようもないよ
2019/05/13(月) 23:55:36.69ID:lwKqLD9e0
>>880
少なくとも今はHDMI経由でテレビから音声流す機能は標準搭載されているから
年代物のパソコンを除けばデジタル音声出力機能は標準搭載だよ
それをどうやってイヤフォンと物理的に切り替えるのか考えたら無理だと判るでしょ
Windows10から自動切り替えはできるようになっているけど、当然ソフトで制御しているし
それをVista以降はAPIとしてプログラマーが簡単に触れるようになっている
882デフォルトの名無しさん (アウアウエー Sadf-4N0r)
垢版 |
2019/05/13(月) 23:55:59.16ID:ec7a7a6ia
いやちょっと何を言ってるのか分からないんだけど、
メカ接点で物理的に行われるが、
SP出力とヘッドフォン出力が排他的になってるのは今時はソフトの設定でしょ?
2019/05/13(月) 23:58:20.52ID:jADcqpCya
>>881
だーから、その場合は普通はM/Bのヘッドホンからは音出ませんよ。
M/Bのヘッドホン端子はオンボードのオーディオデバイスに繋がってるだから

>>882
今時も糞もないってだからw
M/Bのヘッドホン端子はオンボードのオーディオデバイスに繋がってて、メカスイッチでそれを
ライン出力(スピーカー)と切り替えてるだけなので
884デフォルトの名無しさん (アウアウエー Sadf-4N0r)
垢版 |
2019/05/14(火) 00:00:01.39ID:/tIovtjDa
Mixer使えって話でしょ
2019/05/14(火) 00:04:48.16ID:vkfPDW5o0
>>882
サウンドミキサーってのがWindows95には既に付いていて、それで音声の切り替えとかマスターボリュームを制御していたから
XPまでのソフトでは大本の切り替えとか不可能だった
しかしVISTAから全てソフトから見えるようになって、ソフトごとにどの出力から出すなどの指定ができるようになった
同じパソコンでイヤフォンとスピーカーから違う曲を流すことさえやろうと思えばできるんだよ
2019/05/14(火) 00:06:27.49ID:vkfPDW5o0
>>884
Mixerを制御するAPIがVISTA以降に公開されたんだよ
C#から制御したことも有るし
2019/05/14(火) 00:14:28.54ID:94a7CpYNa
>>885
えーっとですねえ、だからそんな芸当はHWが対応してなきゃできないんだってw

標準的なPCのオンボードのオーディオデバイスはオーディオ出力が一つしかないので、
そんな芸当は逆立ちしても不可能ですw

物理的な出力端子の数 = オーディオ出力の数
ではないのよ。
2019/05/14(火) 00:14:35.14ID:KlvEEe7u0
win32apiスレにでも行ってくれ
2019/05/14(火) 00:15:52.53ID:vkfPDW5o0
UWPのMediaPlayerでもオーディオ出力先は好きなように変えることができる
https://docs.microsoft.com/ja-jp/windows/uwp/audio-video-camera/play-audio-and-video-with-mediaplayer

このページ内の「特定のオーディオ エンドポイントへの出力」ってのがピンポイントでは有るが、これはUWPのモジュールで最近WinFormsから使えるようになったが
まだ未完成な部分もあって割と面倒

ただ、同じことはAPIつかって地道に作ることもできるよ
2019/05/14(火) 00:20:22.84ID:vkfPDW5o0
>>>887
Windows10なら右下のスピーカーマーク押して「サウンド」ってのを選択すると出てくるダイアログで
「再生」ってタブを押せば、そのパソコンで使える音声出力先が出てくるが
出力が1つしか無いなんて化石のようなパソコンは見たことないわ
最低限スピーカーとイヤフォンとHDMIぐらいは付いている
2019/05/14(火) 00:22:45.62ID:94a7CpYNa
>>889
まあどっちにしろそれは質問してる人が聞きたいことと違うと思うよ。
質問者はアプリごとに別々のチャンネルに音を出したいって言ってるんじゃないからね。
2019/05/14(火) 00:25:02.63ID:94a7CpYNa
>>890
だから何度も同じことを言わせないで。
既定のオーディオデバイスは一つしか選択できない
だからHDMIのモニターから音を出すと普通は同じ音をM/Bのヘッドホン端子から
出力することはできないの
2019/05/14(火) 00:25:05.36ID:vkfPDW5o0
>>891
いや、889はイヤフォンが繋がっていてもスピーカーから音声を流す機能そのものだ
何も読んでいないだろ
2019/05/14(火) 00:26:26.04ID:vkfPDW5o0
>>892
HDIMIとパソコンのイヤフォン端子をどうやって物理的に切り替えるんだよ
普通にソフトで切り替える機能が標準でついているんだよ
2019/05/14(火) 00:27:34.01ID:94a7CpYNa
>>893
どこをどう読んだらそうなるのw
だから、何度も言うけどHW的に排他的になってたらソフトじゃどうにもならないってw
2019/05/14(火) 00:29:20.12ID:94a7CpYNa
>>894
ソフトで切り替える?
何を言ってるのか分からないよ。

単純な質問だ。
君のPCではHDMIのモニタを既定のサウンドデバイスに選択している時に、
同じ音をM/Bのヘッドフォン端子からも聞くことができるのかい?

できないってw
今まで知らなかったのか
2019/05/14(火) 00:30:46.74ID:vkfPDW5o0
>>895
string audioSelector = MediaDevice.GetAudioRenderSelector();
var outputDevices = await DeviceInformation.FindAllAsync(audioSelector);
foreach (var device in outputDevices)
{
var deviceItem = new ComboBoxItem();
deviceItem.Content = device.Name;
deviceItem.Tag = device;
_audioDeviceComboBox.Items.Add(deviceItem);
}

コンボボックスで指定した出力先に音声を切り替えているだろ
頭弱いねぇ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況