首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java音频改变采样率

Java音频改变采样率
EN

Stack Overflow用户
提问于 2021-09-10 12:10:31
回答 1查看 73关注 0票数 0

如何更改音频文件的采样率?在我的应用程序中,我附加了多个.wav格式的音频文件,其采样率为24,000 Hz,我希望将结果文件的采样率转换为20,050 Hz。我尝试创建一个新的AudioFormat,并将采样率设置为20,050 Hz,如下所示:

代码语言:javascript
运行
复制
appendedFiles = new AudioInputStream(
    new SequenceInputStream(appendedFiles, clip),
    new AudioFormat(appendedFiles.getFormat().getEncoding(),
        20050,
        appendedFiles.getFormat().getSampleSizeInBits(),
        appendedFiles.getFormat().getChannels(),
        appendedFiles.getFormat().getFrameSize(),
        appendedFiles.getFormat().getFrameRate(),
        appendedFiles.getFormat().isBigEndian()
   ),
   appendedFiles.getFrameLength() + clip.getFrameLength());

但这并不能完全起作用,它会放慢声音的速度,使声音变厚。

EN

回答 1

Stack Overflow用户

发布于 2021-09-13 08:01:33

你不能只改变采样率,你还必须改变帧率,这对于.wav (我猜所有未压缩的音频格式)都是相同的。因此,您需要做的第一件事是同时设置目标采样和帧速率。

您应该做的第二件事是涉及javax.sound.sampled.AudioSystem。它是Javasound中的核心类,不能被忽略。

使用AudioSystem,您可以这样做(未测试的代码):

代码语言:javascript
运行
复制
float targetRate = 20050;
// source audio format, you seem to assume
// it's the same for all files
AudioFormat sourceFormat = appendedFiles.getFormat();
// create an AudioInputStream for your two audio streams
AudioInputStream sourceStream = AudioSystem.getAudioInputStream(
    new SequenceInputStream(appendedFiles, clip)
);
// construct the target format with the sample/frame rate
AudioFormat targetFormat = new AudioFormat(
    appendedFiles.getFormat().getEncoding(),
    targetRate,
    sourceFormat.getSampleSizeInBits(),
    sourceFormat.getChannels(),
    sourceFormat.getFrameSize(),
    targetRate,
    sourceFormat.isBigEndian());
// let the AudioSystem resample your concatenated streams
resampledInputStream = AudioSystem.getAudioInputStream(targetFormat, sourceStream);

但有一点需要注意!AudioSystem可能不支持所需的重采样因子。在这种情况下,您需要安装合适的服务提供商。对于Windows或Mac (目前仅限x86 ),你可以使用FFsampledSP,它支持以FFmpeg作为后端的重采样(完全公开,我是作者)。也许还有其他更适合您的平台的重采样器。

如果一切都失败了,我会考虑使用命令行工具,如SOXFFmpeg

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69132002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档