当前位置: 首页 > 面试题库 >

从原始文件中获取最多x个字节的AudioInputStream(剪切音频文件)

微生阳平
2023-03-14
问题内容

如何读取AudioInputStream最多特定数量的字节/微秒位置?例如 :

AudioInputStream ais = AudioSystem.getAudioInputStream( new File("file.wav") );
// let the file.wav be of y bytes

现在,我想获取一个AudioInputStream具有高达某些x字节的数据的x < y字节。

我怎样才能做到这一点 ?

我一直在努力思考,但没有任何方法可以做到这一点?


问题答案:

下面的代码向您展示如何复制音频流的一部分,从一个文件读取并写入另一个文件。

import java.io.*;
import javax.sound.sampled.*;

class AudioFileProcessor {

  public static void main(String[] args) {
    copyAudio("/tmp/uke.wav", "/tmp/uke-shortened.wav", 2, 1);
  }

  public static void copyAudio(String sourceFileName, String destinationFileName, int startSecond, int secondsToCopy) {
    AudioInputStream inputStream = null;
    AudioInputStream shortenedStream = null;
    try {
      File file = new File(sourceFileName);
      AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(file);
      AudioFormat format = fileFormat.getFormat();
      inputStream = AudioSystem.getAudioInputStream(file);
      int bytesPerSecond = format.getFrameSize() * (int)format.getFrameRate();
      inputStream.skip(startSecond * bytesPerSecond);
      long framesOfAudioToCopy = secondsToCopy * (int)format.getFrameRate();
      shortenedStream = new AudioInputStream(inputStream, format, framesOfAudioToCopy);
      File destinationFile = new File(destinationFileName);
      AudioSystem.write(shortenedStream, fileFormat.getType(), destinationFile);
    } catch (Exception e) {
      println(e);
    } finally {
      if (inputStream != null) try { inputStream.close(); } catch (Exception e) { println(e); }
      if (shortenedStream != null) try { shortenedStream.close(); } catch (Exception e) { println(e); }
    }
  }

  public static void println(Object o) {
    System.out.println(o);
  }

  public static void print(Object o) {
    System.out.print(o);
  }

}


 类似资料:
  • 我的音乐应用程序从外部应用程序启动,使用意向数据作为音乐文件。 我有mp3音频URI,类似这样 file:///storage/emulated/0/Music/Tamil/I(2014)/Ennodu Nee Irundhaal。mp3 如何从媒体获取音频详细信息。标题,媒体。相册,媒体_身份证件

  • 我尝试从res/raw文件夹播放音频文件,这是我用来播放文件的代码,这不会产生任何错误,并且我的设备音量最大,但没有任何声音。我尝试了MP3和WAV文件。 启动后我在 LogCat 上收到以下消息 帮助我解决这个问题,将不胜感激。

  • 当我使用ffmpeg录制音频和视频时,音频录制会在视频的最后两秒钟内中断。 我试过使用不同的音频和视频编解码器,以及不同的视频格式和我,已经注意到mpg格式而不是mp4的音频工作更好。 我也试过在mp4上使用不同的编解码器,并查看了维基百科的兼容性,但它们似乎并不重要。

  • 如何在Struts2中获得上传文件的原始文件名。目前我得到的是一个filename.tmp的文件名,而上传的文件是一个CSV,文件名与我得到的不同。这是JSP代码 下面是strut配置中的动作映射 Action类包含以下3个实例变量实例以及getter和setter 但是,未获取实际文件名,而和属性为。

  • 我正在尝试从视频文件中提取音频。我试过python中的moviepy、ffmpeg等库。提取的音频文件太大。对于大小为75 MB的音频文件,音频文件与moviepy的距离约为1.1 GB。即使比特率为16 kbps,采样率为16000 Hz,提取的文件大小也将达到200 MB。任何其他库或提取的音频文件大小至少相同或小于完整视频文件的方式。 我正在ffmpeg中使用上述命令。

  • [第一个应用程序]我正在创建一种报警应用程序,允许用户从SD卡或应用程序提供的声音选择报警声音。因为,该应用程序本质上播放警报,我希望音量是设备的“警报音量”。我能够为sd卡的声音实现这一点。但是,我无法获取原始资源声音。 我使用以下代码: 我还尝试为上述方法查找代码示例,但没有一个示例说明如何将设置为。我将接受答案与替代的方式,简单地播放与无限循环的声音。如何做到这一点?