将mp3格式的音频转换为采样率8k的wav

简介: 将mp3格式的音频转换为采样率8k的wav

需求


最近系统上需要增加一个功能,就是测试我们系统的ASR识别引擎,这就需要上传一段音频,然后我们返回识别后的文字,但是我们的识别引擎需要采样率16k,格式为wav的音频文件,但是我们又不能限定用户上传的录音格式,所以需要我们在后台转换一下格式,然后再去识别。


1、MP3转换wav


做这个功能时候, 发现网上的资料真的很少,所以,只能安全上网了,在外面找到了方法。


1.1 引入jar:


<dependency>
            <groupId>javazoom</groupId>
            <artifactId>jlayer</artifactId>
            <version>1.0.1</version>
        </dependency>

1.2 工具类代码:

public boolean toWav(String inputFilePath, String outputFilePath) {
        Converter aConverter = new Converter();
        try {
            aConverter.convert(inputFilePath, outputFilePath);
        } catch (JavaLayerException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

1.3 测试类:

 public static void main(String args[]) {
        String filePath = "C:\\data\\hellowordread.pcm";
        String targetPath = "C:\\data\\111333.wav";
        toWav(filePath,targetPath);
    }

还是非常简单哦。


2、将wav转换为8k采样


public void toStandardWav( String inputFilePath, String outputFilePath){
        try {
            byte[] bytes = Files.readAllBytes(new File(inputFilePath).toPath());
            WaveFileReader reader = new WaveFileReader();
            AudioInputStream audioIn = reader.getAudioInputStream(new ByteArrayInputStream(bytes));
            AudioFormat srcFormat = audioIn.getFormat();
            int targetSampleRate = 8000;
            AudioFormat dstFormat = new AudioFormat(srcFormat.getEncoding(),
                    targetSampleRate,
                    srcFormat.getSampleSizeInBits(),
                    srcFormat.getChannels(),
                    srcFormat.getFrameSize(),
                    srcFormat.getFrameRate(),
                    srcFormat.isBigEndian());
            System.out.println(audioIn.getFrameLength());
            AudioInputStream convertedIn = AudioSystem.getAudioInputStream(dstFormat, audioIn);
            File file = new File(outputFilePath);
            WaveFileWriter writer = new WaveFileWriter();
            writer.write(convertedIn, AudioFileFormat.Type.WAVE, file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


总结


经过上面代码,我们就可以支持常用的音频格式进行ASR识别引擎的测试!

目录
相关文章
|
7月前
|
编解码
音频 AAC和MP3的帧大小
音频 AAC和MP3的帧大小
380 0
|
2月前
|
存储 C++ 内存技术
解码mp4文件分别存储为pcm,yuv文件
使用FFmpeg库在C++中解码MP4文件,并将音频数据存储为PCM格式,视频数据存储为YUV格式。
28 3
解码mp4文件分别存储为pcm,yuv文件
|
2月前
提取mp4中的音频Pkt,以adts的方式写为aac文件
使用FFmpeg库从MP4文件中提取音频流,并将其转换为带有ADTS头的AAC文件,提供了两种方法:位运算和位域操作。
51 1
如何使用 MusicFab 将 SoundCloud音频转换为 WAV格式?
这篇文章为你展示了如何利用三方工具将SoundCloud音频转化为WAV格式以便进行兼容收听。
|
Linux 计算机视觉 iOS开发
使用ffmpeg将MP4转换为WebM格式
使用ffmpeg将MP4转换为WebM格式
1729 2
|
编解码 Linux vr&ar
如何将mp3文件转pcma格式或PCM格式的wav文件
如何将mp3文件转pcma格式或PCM格式的wav文件
|
语音技术 内存技术
用C/CCC++实现输出双声道(立体声).wav 文件
audioCodec为1,channels为2,samplesPerSec为8000(非常重要)。samplesPerSec设置为8000的原因是需要用16000/2,也就是要用采样率除以通道数。这样做的原因是立体声设置语音内容时将左右声道的语音数据打散交叉放置到内容中。
|
移动开发 JavaScript
JS指定音频audio在某个时间点进行播放,获取当前音频audio的长度,音频时长格式转化
JS指定音频audio在某个时间点进行播放,获取当前音频audio的长度,音频时长格式转化
771 0
JS指定音频audio在某个时间点进行播放,获取当前音频audio的长度,音频时长格式转化
|
数据采集 Android开发 索引
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)
562 0
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)