【发布时间】:2017-02-27 10:48:12
【问题描述】:
我正在开发一个处理音频数据的 UWP 应用程序(适用于 Windows 10)。它在开始时以样本浮点数组的形式接收样本缓冲区,其中项目从 -1f 变为 1f。 早些时候,我使用了 NAudio.dll 1.8.0,它提供了所有必要的功能。 使用 WaveFileReader、waveBuffer.FloatBuffer、WaveFileWriter 类。 但是,当我完成这个应用程序并尝试构建发布版本时,得到了这个错误: ILT0042:当前不支持指针类型数组:'System.Int32*[]'。
我已经尝试解决了:
有建议删除指向 .dll 的链接,但我需要它。
-
我尝试使用 Manage NuGet Packages 安装相同版本的 NAudio,但 WaveFileReader、WaveFileWriter 不可用。
-
在 NAudio 开发人员的回答 (How to store a .wav file in Windows 10 with NAudio) 中,我阅读了有关使用 AudioGraph 的信息,但我只能在实时播放中构建样本的浮点数组,但我需要在音频文件上传后立即打包完整的样本。在录制过程或播放过程中获取样本的示例: https://docs.microsoft.com/ru-ru/windows/uwp/audio-video-camera/audio-graphs
这就是我需要帮助的原因:如何在音频文件上传后获取 FloatBuffer 来处理样本?例如,用于构建音频波或应用音频效果的计算。
提前谢谢你。
-
我尝试使用 FileStream 和 BitConverter.ToSingle(),但是与 NAudio 相比,我得到了不同的结果。 换句话说,我还在寻找解决方案。
private float[] GetBufferArray() { string _path = ApplicationData.Current.LocalFolder.Path.ToString() + "/track_1.mp3"; FileStream _stream = new FileStream(_path, FileMode.Open); BinaryReader _binaryReader = new BinaryReader(_stream); int _dataSize = _binaryReader.ReadInt32(); byte[] _byteBuffer = _binaryReader.ReadBytes(_dataSize); int _sizeFloat = sizeof(float); float[] _floatBuffer = new float[_byteBuffer.Length / _sizeFloat]; for (int i = 0, j = 0; i < _byteBuffer.Length - _sizeFloat; i += _sizeFloat, j++) { _floatBuffer[j] = BitConverter.ToSingle(_byteBuffer, i); } return _floatBuffer; }
【问题讨论】:
-
如果您使用的是 Naudio,为什么不使用
AudioFileReader或Mp3FileReader类?AudioFileReader将为您提供开箱即用的音频数据的 float[]。 -
您描述的功能确实有效,但在 UWP 项目使用 NAudio.dll 构建解决方案的发行版中,出现以下错误:''ILT0042:当前不支持指针类型数组:' System.Int32*[]''' 在 Nuget NAudio 包中,这些方法无法实现,我找不到它们的替代方法。
-
如果库本身抛出异常,您可能需要在尝试完全使用它之前寻找更兼容的版本或替代方案。我能想到的唯一其他选择是
MediaFoundationReader类,它应该为您读取最常见的音频文件。 -
感谢您的帮助,仅找到一个使用 AudioFileReader 的示例。使用 MediaFoundationReader 查找音频数据的示例未满足。我一定会尝试这门课。
标签: c# uwp naudio audiobuffer naudio-framework