のWindows APIは、プロパティを変更するサポートしていますが、NAudioは、何らかの理由でこの機能を公開しません。 NAudioソースを変更することでこれを追加するのはかなり簡単です。
NAudio\CoreAudioApi\PropVariant.cs
にライン
Marshal.ThrowExceptionForHR(deviceInterface.OpenPropertyStore(StorageAccessMode.Read, out propstore));
以下
NAudio\CoreAudioApi\MMDevice.cs
方法
/// <summary>
/// Sets property value at specified key
/// </summary>
/// <param name="key">Index</param>
/// <param name="value">Value</param>
public void SetValue(PropertyKey key, PropVariant value)
{
Marshal.ThrowExceptionForHR(storeInterface.SetValue(ref key, ref value));
}
以下NAudio\CoreAudioApi\PropertyStore.cs
アドインに
/// <summary>
/// Creates a new PropVariant containing a uint value
/// </summary>
public static PropVariant FromUInt(uint value)
{
return new PropVariant() { vt = (short)VarEnum.VT_UI4, ulVal = value };
}
を変更、追加今、あなたはこれらの変更でNAudio.dllを再構築した場合、あなたの例では、5.1であることを再生デバイスを変更するには、このように見えるかもしれません(管理者として実行するか、それが失敗してい)
Marshal.ThrowExceptionForHR(deviceInterface.OpenPropertyStore(StorageAccessMode.ReadWrite, out propstore));
すべき
var deviceEnum = new MMDeviceEnumerator();
var devices = deviceEnum.EnumerateAudioEndPoints(DataFlow.All, DeviceState.Active).ToList();
foreach (MMDevice device in devices)
{
Console.WriteLine(device.FriendlyName);
if (device.Properties.Contains(PropertyKeys.PKEY_AudioEndpoint_PhysicalSpeakers))
{
var value = device.Properties[PropertyKeys.PKEY_AudioEndpoint_PhysicalSpeakers];
Console.WriteLine("Current value: " + value.Value.ToString());
// set configuration to 5.1, value is taken from ksmedia.h from Windows Driver Kit
PropVariant newvalue = PropVariant.FromUInt(63);
device.Properties.SetValue(PropertyKeys.PKEY_AudioEndpoint_PhysicalSpeakers, newvalue);
}
}
正確に設定するものは何ですか?より具体的にすることができます – EugeneK
再生デバイスを2CHから5.1に変更したいと思います。または、Samplerateを24bit、48000にデフォルトから設定します。私は上記で引用したNAudioがツールを持っているかどうかはわかりません。私は、いくつかの他のAPIを試してきましたが、ほとんどドキュメントを書いていないか、機能がないだけです。 –