MP3字节数组 – 转换为WAV并导航到时间索引?

我有一个包含MP3流的字节数组。

如果我希望能够转换为WAV,那么假设必须进一步解码此流是否正确?

在当前字节状态下,是否可以执行基本function,例如获取/设置位置(按时间)?

是的,MP3文件与WAV文件非常不同。 WAV文件包含从开始到结束的样本forms的原始音频数据,以绘制输出的波形,就像位图文件包含从左到右,从上到下的像素的原始数据一样。 您可以将WAV文件视为声波的位图图片 – 而不是像素颜色,它存储音频强度,通常为每秒449个,如果是立体声,则为两个通道,每个通道为2个字节。

(知道这个你实际上可以计算WAV文件的文件大小 – 存储1分钟的音频,你需要60秒* 44100个样本* 2个通道* 2个字节= 10.09MB。)

MP3文件包含此图像的数学修改版本,并丢弃人们听不到的音频。 它与jpeg图像如何压缩图像的工作方式类似。

正如video卡最终需要使用位图一样,声卡最终需要使用WAV数据 – 所以是的,你需要一个解码器。

在Mp3文件的开头是一个称为ID3标签的数据块,其中包含一系列关于文件的基本信息 – 艺术家姓名,曲目长度,专辑名称等等。 您可以使用C#ID3之类的东西来读取/写入C#中的ID3标签。

至于音频本身,我不确定是否有完全用C#编写的Mp3解码器。 从技术上讲,没有理由不能做到这一点(性能也应该很好),但标准相当宽松,数学性能很强,所以人们倾向于使用像FFMpeg这样的东西进行解码。 Google搜索中的一些想法。

如果您不需要进行任何特殊处理而只想播放音频,则可以使用WPF / Silverlight Media元素。

您可以从Josh Smith的Podder应用程序中获得一些提示。

NAudio是一个可以读取MP3文件的开源.NET库。

要将MP3转换为WAV,请使用类似于以下内容的代码:

Stream inputStream = ...; Stream outputStream = ...; using (WaveStream waveStream = WaveFormatConversionStream.CreatePcmStream(new Mp3FileReader(inputStream))) using (WaveFileWriter waveFileWriter = new WaveFileWriter(outputStream, waveStream.WaveFormat)) { byte[] bytes = new byte[waveStream.Length]; waveStream.Read(bytes, 0, waveStream.Length); waveFileWriter.WriteData(bytes, 0, bytes.Length); waveFileWriter.Flush(); } 

根据@Rei Miyasaka的回答,有一个用C#编写的MP3解码器。 开源也是。 看看Mp3Sharp 。

您可以使用http://sourceforge.net/projects/mpg123net/在byte []中解码您的mp3,并根据您的喜好进一步使用解码的PCM。