转换音频采样率

对于采样率,相信不少人知道这个词殊不知道是什么意思。java

官方解释:采样频率,也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫做采样时间,它是采样之间的时间间隔。通俗的讲采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。git

从实际效果简单来讲,采样率会影响播放速度,采样率越高播放速度越快。若是你以44.1k的采样率去播一个只有8k采样率的音频,估计很快就播完了。因此,因为并非全部音频的采样率都是统一的,就会涉及到一个采样率转换的问题,在这里给你们介绍一个库,JSSRC。github

这里是github地址:https://github.com/hutm/JSSRCspa

里面的类也不是全部都须要用到,只须要SSRC,I0Bessel,SplitRadixFft这三个类就能够实现转换采样率的功能。code

而后用下面这个方法就能够转换采样率了:it

private void simpleDownSample() {
        File BeforeSampleChangedFile = new File(BeforeSampleChangedFilePath);
        File SampleChangedFile = new File(SampleChangedFilePath);
        try {
            FileInputStream fileInputStream = new FileInputStream(BeforeSampleChangedFile);
            FileOutputStream fileOutputStream = new FileOutputStream(SampleChangedFile);
            new SSRC(fileInputStream, fileOutputStream, 8000, 44100,
                    2,
                    2,
                    1, Integer.MAX_VALUE, 0, 0, true);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
}
其中8000就是待转换的采样率,44100就是目标采样率,能够从低转到高,也能够高转低。

转换采样率的方法还有不少,只是我以为这个方法比较简单,但愿会对你们有帮助io