wav音频怎么去掉header播放

wav音频怎么去掉header播放,第1张

WAV格式的细节在互联网上都可以找到,你仅仅需要在Google上搜索下。但是,遗憾的是,我并没有搜索到一个很好的Java库来读取WAV文件,而且可以移植到Android下。因此,我自己写了一些简单的代码

下面这个方法就是如何读取一个WAV文件的头部:

private static final String RIFF_HEADER = "RIFF"

private static final String WAVE_HEADER = "WAVE"

private static final String FMT_HEADER = "fmt "

private static final String DATA_HEADER = "data"

private static final int HEADER_SIZE = 44

private static final String CHARSET = "ASCII"

/* ... */

public static WavInfo readHeader(InputStream wavStream) throws IOException,

DecoderException {

ByteBuffer buffer = ByteBuffer.allocate(HEADER_SIZE)

buffer.order(ByteOrder.LITTLE_ENDIAN)

wavStream.read(buffer.array(), buffer.arrayOffset(), buffer.capacity())

buffer.rewind()

buffer.position(buffer.position() + 20)

int format = buffer.getShort()

checkFormat(format == 1, "Unsupported encoding: " + format)// 1 means

// Linear

// PCM

int channels = buffer.getShort()

checkFormat(channels == 1 || channels == 2, "Unsupported channels: "

+ channels)

int rate = buffer.getInt()

checkFormat(rate <= 48000 &&rate >= 11025, "Unsupported rate: " + rate)

buffer.position(buffer.position() + 6)

int bits = buffer.getShort()

checkFormat(bits == 16, "Unsupported bits: " + bits)

int dataSize = 0

while (buffer.getInt() != 0x61746164) { // "data" marker

Log.d(TAG, "Skipping non-data chunk")

int size = buffer.getInt()

wavStream.skip(size)

buffer.rewind()

wavStream.read(buffer.array(), buffer.arrayOffset(), 8)

buffer.rewind()

}

dataSize = buffer.getInt()

checkFormat(dataSize >0, "wrong datasize: " + dataSize)

return new WavInfo(new FormatSpec(rate, channels == 2), dataSize)

}

上面的代码中,缺少的部分应该是显而易见的。正如你所看到的,仅仅支持16位,但在你可以修改代码以支持8位(AudioTrack不支持任何其他分辨率的)。

下面这个方法,则是用来读取文件剩余的部分 – 音频数据。

public static byte[] readWavPcm(WavInfo info, InputStream stream)

throws IOException {

byte[] data = new byte[info.getDataSize()]

stream.read(data, 0, data.length)

return data

}

我们读取的WavInfo结构体,包含采样率,分辨率和声道数已经足够让我们去播放我们读取的音频了。

如果我们不需要将全部音频数据一次性放入内存中,我们可以使用一个InputStream,一点一点地读取。

方法如下:

1:在百度中搜索foobar2000软件。

2:然后任意选择一个中文版的进行下载(中文版比较好 *** 作)。3:下载完直接点击“下一步”进行安装,安装完成后打开该软件。4:点击菜单中的“文件”—“添加文件”。

5:将要删除标题的wav文件添加进去。6:选中该文件,鼠标右键—标签—从freedb获取标签。7:等查询完成后,在d出的窗口中选择相应的中文名称的一行。8:选择后,点击标题下面的名称。

9:然后删除,最后点击窗口下面的“更新文件”即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12099913.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存