当前位置: 首页 > 知识库问答 >
问题:

使用带有javax.sound.sampled.clip的mp3、ogg和wav文件(或获取声音文件的比特率)

潘宝
2023-03-14

我的目标是同时播放多个mp3、ogg或wav音乐文件,以便在视频游戏中创建适应性强的音乐。

我没有使用java sound API中的Clip类,而是创建了一个名为Track的类,多亏了mp3spi和vorbisspi,它可以通过在SourceDataLine中写入音频数据来读取mp3、ogg和wav文件。多亏了这篇帖子,我找到了这个解决方案:

https://stackoverflow.com/a/17737483/13326269

所有的工作都很好,与线程进入流函数,所以我可以创建许多跟踪对象,以播放多个声音在同一时间。但是我想从Clip类中创建一个类似void setMicrosecondPosition(long microseconds);的函数。

我尝试了很多事情,我找到了一个方法:

in = getAudioInputStream(new File(file).getAbsoluteFile());
int seconds = 410;
int bitrate = 320; //in kbit/s
in.skip(seconds*bitrate*1000/8); // divided by 8 because the skip method use bytes.

但我需要文件的比特率。那么,我怎样才能得到任何声音文件的比特率呢?或者更好的方法是如何使用javax.sound.sampled.clip类的mp3和ogg文件。

共有1个答案

梁和颂
2023-03-14

我相信,如果您确实有工作AudioInputStreamsskip函数引用的字节数应该是固定的每帧数量,由音频格式决定。例如立体声,16位应该是每帧4字节。因此,您应该能够使用帧速率(例如44100帧/秒)跳到所需的起始点。

另一个避免方法是读取但忽略从AudioInputStream传入的字节,方法类似于链接解决方案示例中的Stream方法。这可以很快地使您到达所需的点,因为您不会被sdlwrite()阻止。但是如果这样做有效,skip方法也应该有效,而且会更好。

 类似资料:
  • 我目前在使用< code>javax.sound.sampled库时遇到了问题。这是我用来播放音频文件的MCV码: 此代码有时会抛出。 基本上,我有5个。我知道WAV文件没有被破坏,因为当我在音乐播放软件中打开它们时,它们播放得非常好。然而,Java程序只能处理其中的3种。 Oracle在这里提到了对这种文件格式的支持。我怎么能保证我所有的?WAV文件兼容Java的音频API?有没有万无一失的玩法

  • 问题内容: 首先,这是用于家庭作业或…项目。 我很难理解如何在Java项目中将声音数据波绘制到图形上的想法。我必须使用UI完全从头开始进行此分配,因此基本上要制作.wav文件编辑器。 我遇到的主要问题是将声音数据放入要绘制的图形中。 目前,我正在随机绘制一组值。 到目前为止,我有一个微型程序正在运行并验证wav文件,使其实际上是wav文件。 我正在使用FileInputStream读取它并进行验证

  • 这是我的问题,有人给了我一个函数,如果我理解得很好,它会把一些声音样本放入数组列表中。 我想创建一个。wav文件的音频曲目,我真的不知道如何做到这一点。 这是代码,因为也许我根本不懂。。。 下面是示例,在上面的代码中导入。

  • 问题内容: 我正在寻找一种方法来找出python中音频文件(.wav)的持续时间。到目前为止,我看了一下蟒蛇库,,我没能得到wav文件的时间。给了我持续时间,但不一致。 提前致谢。 问题答案: 持续时间等于帧数除以帧率(每秒帧数): 关于@edwards的评论,下面是一些产生2通道wave文件的代码: 如果您在音频播放器中播放结果文件,则会发现持续时间为40秒。如果运行上面的代码,它还会计算持续时

  • 问题内容: 如何使用Java获取声音文件的总时间? -更新 看起来这段代码确实起作用了:long audioFileLength = audioFile.length(); 我知道如何获取文件长度,但是我没有找到如何获取声音文件的帧频和帧大小…任何想法或链接吗? -更新 另一个工作代码(使用@mdma的提示): 问题答案: 给一个File你可以写

  • 我试图使用Java声音(与MP3SPI和VorbisSPI一起)从WAV、MP3和OGG文件中读取音频数据,并将其存储到字节数组中,以便以后从那里播放。为了做到这一点,我使用如下代码: Sound类基本上是一个(Byte[]样本,AudioFormat格式)耦合。完成后,我尝试读取和播放字节数组,如下所示: