2009-10-02 69 views
6

我有一个非常大的WAV文件,大小约100MB。我想用Java来读取这个wav文件,并且每隔2秒钟将它分成更小的块。如何使用Java将wav文件分割为更小的块?

在Java中可以这样做吗?你可以给我一个API,我可以实现它吗?

由于提前, Snehal

+0

嗨。我正在读取一个.wav文件,我也想将它分成更小的块并传递给它,以便找出每个块中的频率。我在Java Sound中很新,所以你可以帮我解决这个问题。我在接下来的评论中附加了我的代码部分。在此先感谢 – Learner 2016-12-13 06:34:04

+0

final float [] floatBuffer = DTMF.generateDTMFTone(character); String read =“D:/RecordAudio31.wav”; InputStream in = new FileInputStream(read); //从输入流创建audiostream AudioStream audioStream = new AudioStream(in); final AudioFormat format = new AudioFormat(44100,16,1,true,false); final AudioInputStream inputStream = new AudioInputStream(audioStream,format,floatBuffer.length); final AudioDispatcher dispatcher = new AudioDispatcher(inputStream,stepSize,0); dispatcher.addAudioProcessor(goertzelAudioProcessor); new Thread(dispatcher).start(); – Learner 2016-12-13 06:36:14

+0

我想通了。不管怎么说,多谢拉。 – Learner 2016-12-14 10:22:08

回答

4

您可以使用AudioInputStream及其AudioFileFormat成员(其中包含一个AudioFormat实例)知道写什么(格式,采样率),你可以使用AudioSystem写。

根据格式的采样率,您可以找出音频的有多少个字节为2秒,然后继续从AudioInputStream读取许多字节的循环,将它们写入新文件。

+0

通过AudioFileFormat我可以找出采样率是8000.采样率和它占用的字节数之间的关系是什么?我是音频处理方面的总新手,对不起我的无知 – Snehal 2009-10-02 07:34:54

+2

除了采样率(f)以外,还需要AudioFormat提供的每采样位数(bps)和通道数量(n)。对于一秒钟的音频,您需要bps * n * f/8个字节。 – eljenso 2009-10-02 07:52:44

+0

谢谢Elijenso。我可以找出2秒钟音频所需的字节数。现在,我试图使用AudioSystem的写入方法来写入读取字节。但是,其中一个输入参数是AudioInputStream。我无法根据读取字节创建该对象。任何指针都会很有帮助。谢谢! – Snehal 2009-10-02 08:27:15

0

如果你不关心你的代码的寿命,然后的QuickTime for Java是媒体一个不错的选择。它运行在Windows和Mac上,可以读写任何音频(和视频)格式。缺点是苹果多年来一直没有支持它,所以虽然它仍然有效,但你正在投资一种垂死的技术。

1

你也可以查查specification for a wav file这是很基本的,简单的。 然后二进制读取文件,并再次保存在较小的位。

我认为这样做是一种更好的学习体验,而不是总是依赖图书馆。

+1

给定更大块的格式,您还需要知道如何格式化较小块的头。不是一个“简单”的任务,但它也不是一个非常困难的任务。绝对需要查看规格。 – 2012-08-18 17:40:34