我想在我的应用程序中添加对播放音频文件的支持。我需要实时操作数据(例如,应用ADSR,重新采样,音调移位等等),因此需要直接使用这些数据。
我尝试过搜索如何执行此操作,但除非我只想读取wave文件或使用外部解压缩程序,否则无法找到更多信息。由于我安装了大量的编解码器,我想使用它们(如果不是太麻烦,不应该这样)。
我怎样才能在C#中解决这个问题?似乎没有任何原生支持使用Windows编解码器,但有一些技术可以提供帮助。不幸的是,它们似乎都相当严格或有问题。
Windows Media Foundation仅适用于Win7,并且没有托管界面(尝试过MF.NET但效果不佳)。 DirectShow似乎被折旧(被WMF取代)并且没有托管支持。等......等等......
让编解码器返回音频样本有多难?它最多应该是几行代码; /
答案 0 :(得分:1)
BASS Audio Library可以为您解码原始数据。我不知道它是否使用Windows中的内置编解码器或它自己的编解码器,但它支持各种格式和流。它也有一个.NET包装器。
我相信您也可以使用此库来播放您希望创建的功能。至少对于信封来说,这绝对是可能的。但同样,它提供了对流的原始访问,因此您无需使用它进行播放。
答案 1 :(得分:1)
NAudio有一些代码可用于将音频解码卸载到ACM解码器。这些用于MP3解码以及其他目的。可以见证MP3解码here。代码主要位于NAudio.Wave.Compression
命名空间下。从您的观点来看,困难的一点是编写解析器以从流中提取正确的内容以提供解码器。
答案 2 :(得分:1)
How to convert various audio formats to PCM
无头vox
using (BinaryReader br = new BinaryReader(File.OpenRead("sample.vox")))
{
IntPtr format = AudioCompressionManager.GetPcmFormat(1, 16, 8000);
using (WaveWriter ww = new WaveWriter(new MemoryStream(),
AudioCompressionManager.FormatBytes(format)))
{
Vox.Vox2Wav(br, ww);
}
}
用于其他(mp3,wav,ogg,wma等)
DsReader dr = new DsReader("sample.ogg");
IntPtr formatPcm = dr.ReadFormat();
byte[] dataPcm = dr.ReadData();
dr.Close();