【发布时间】:2019-08-05 16:01:02
【问题描述】:
我正在尝试使用此代码设置用于录制音频设备“MMDevice”的 WaveFormat 我正在使用 NAudio:
// Getting The WaveFormat for the device
var value = selectedRecordingDevices.Properties[PropertyKeys.PKEY_AudioEngine_DeviceFormat].Value as byte[];
IntPtr unmanagedPointer = Marshal.AllocHGlobal(value.Length);
Marshal.Copy(value, 0, unmanagedPointer, value.Length);
Marshal.FreeHGlobal(unmanagedPointer);
var waveFormat = WaveFormat.MarshalFromPtr(unmanagedPointer);
// Setting The WaveFormat for the device
WaveFormat w = new WaveFormat(44100, 16, 2);
PropVariant p = new PropVariant();
p.pointerValue = WaveFormatToPointer(w);
selectedRecordingDevices.Properties.SetValue(PropertyKeys.PKEY_AudioEngine_DeviceFormat, p);
public static IntPtr WaveFormatToPointer(WaveFormat format)
{
IntPtr formatPointer = Marshal.AllocHGlobal(Marshal.SizeOf(format));
Marshal.StructureToPtr(format, formatPointer, false);
return formatPointer;
}
我得到了这个例外:
System.UnauthorizedAccessException
HResult=0x80070005
Message=Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
Source=NAudio
StackTrace:
at NAudio.CoreAudioApi.Interfaces.IPropertyStore.SetValue(PropertyKey& key, PropVariant& value)
at NAudio.CoreAudioApi.PropertyStore.SetValue(PropertyKey key, PropVariant value)
【问题讨论】: