二进制文件转Hex和Wav文件转Hex的Java代码
二进制文件转Hex
对于需要将二进制数据写入固件的场景(例如mp3文件), 需要将二进制文件表示为byte数组
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class RawConverter {
public static final int LINE_LIMIT = 20;
private final String path;
private final int width;
private final boolean littleEnd;
public RawConverter(String path, int width, boolean littleEnd) {
this.path = path;
this.width = width;
this.littleEnd = littleEnd;
}
public static byte[] readBytes(File file)
{
try (FileInputStream fl = new FileInputStream(file)) {
byte[] arr = new byte[(int)file.length()];
fl.read(arr);
return arr;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public String convert() {
File file = new File(this.path);
if (file.exists()) {
byte[] bytes = readBytes(file);
StringBuilder sb = new StringBuilder();
byte[][] units = new byte[bytes.length/width][width];
for (int i = 0; i < bytes.length; i++) {
int pos = i / width;
int shift = i % width;
if (littleEnd) {
units[pos][width - 1 - shift] = bytes[i];
} else {
units[pos][shift] = bytes[i];
}
}
int count = 0;
for (int i = 0; i < units.length; i++) {
sb.append("0x");
for (int j = 0; j < width; j++) {
sb.append(String.format("%02x", units[i][j]));
}
if (i < units.length - 1) {
sb.append(", ");
}
count++;
if (count % LINE_LIMIT == 0) {
sb.append("\n");
count = 0;
}
}
return String.format("Samples: %d\n\n%s\n",
bytes.length / width,
sb);
}
return null;
}
public static void main(String[] args) {
String path = "/home/user/Song-4-clip4.mp3";
String output = new RawConverter(path, 1, true).convert();
System.out.println(output);
}
}
Wav文件转Hex
import org.apache.commons.io.IOUtils;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Converter {
public static final int LINE_LIMIT = 20;
private final String path;
private final int width;
public Converter(String path, int width) {
this.path = path;
this.width = width;
}
public String convert() {
try {
final Path path = Paths.get(this.path);
final URL url = path.toUri().toURL();
final AudioInputStream ais = AudioSystem.getAudioInputStream(url);
final AudioFormat format = ais.getFormat();
byte[] bytes = IOUtils.toByteArray(ais);
StringBuilder sb = new StringBuilder();
int wc = 0, count = 0;
for (int i = 0; i < bytes.length; i++) {
if (wc == 0) {
sb.append("0x");
}
sb.append(String.format("%02x", bytes[i]));
wc++;
if (wc % width == 0 && i < bytes.length - 1) {
sb.append(", ");
wc = 0;
count++;
}
if (wc == 0 && count % LINE_LIMIT == 0) {
sb.append("\n");
count = 0;
}
}
return String.format("Sample rate: %.2f Hz\nSample width: %d bits\nChannels: %d\nSamples: %d\n\n%s\n",
format.getSampleRate(),
format.getSampleSizeInBits(),
format.getChannels(),
bytes.length / width,
sb);
} catch (Throwable t) {
throw new RuntimeException(t);
}
}
public static void main(String[] args) {
String path = "/home/user/627b.wav";
String output = new Converter(path, 2).convert();
System.out.println(output);
}
}
二进制文件转Hex和Wav文件转Hex的Java代码的更多相关文章
- 【Java学习day04】Java文件的创建和Java代码的执行
Java文件的创建和Java代码的执行 随便新建一个文件夹,存放代码 在新建的文件夹里新建一个java文件 新建一个文本文档 将新建的文本文档重命名为hello.java 注意了!后缀必须改为.jav ...
- Linux音频编程--使用ALSA库播放wav文件
在UBUNTU系统上使用alsa库完成了对外播放的wav文件的案例. 案例代码: /** *test.c * *注意:这个例子在Ubuntu 12.04.1环境下编译运行成功. * */ #inclu ...
- HEX和BIN文件的区别
以下的内容是从网上转载来的,原文地址:http://blog.csdn.net/zhangliang_571/article/details/8519469 在这里感谢原作者. 1,是在keil中编 ...
- 豹哥嵌入式讲堂:ARM Cortex-M开发之文件详解(8)- 镜像文件(.bin/.hex/.s19)
大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是豹哥<ARM Cortex-M开发之文件详解>主 ...
- 痞子衡嵌入式:ARM Cortex-M文件那些事(8)- 镜像文件(.bin/.hex/.s19)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是痞子衡<ARM Cortex-M文件那些事>主 ...
- hex转mif文件 verilog
用FPGA来跑ARM 核的时候,刚开始将Keil编译产生的hex文件拿来仿真和下到板子上的时候,发现程序运行不正确.细细观察仿真波形发现,在Altera的ROM IP中直接调用Keil产生的hex文件 ...
- C#读取wav文件
private void showWAVForm(string filepath) //此函数只能用于读取16bit量化单声道的WAV文件 { FileStream fs = new FileStre ...
- delphi 合并两个 Wav 文件流的函数
合并两个 Wav 文件的函数 实例一 unit Unit1; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphic ...
- wav文件系列_1_wav格式解读
本文介绍 wav 文件格式,主要关注该类格式的结构. 参考: [1] 以一个wav文件为实例分析wav文件格式 ( 2017.04.11 CSDN ) [2] WAV ( Wikipedia ) [3 ...
- C++标准库实现WAV文件读写
在上一篇文章RIFF和WAVE音频文件格式中对WAV的文件格式做了介绍,本文将使用标准C++库实现对数据为PCM格式的WAV文件的读写操作,只使用标准C++库函数,不依赖于其他的库. WAV文件结构 ...
随机推荐
- 25-IP核简介
1.IP IP(Intellectual Property)即知识产权,在半导体产业中讲IP核定义为用于"ASIC或FPGA中的预先设计好的电路功能模块".简言之,这里的IP即电路 ...
- Laravel组件化开发学习笔记
组件化开发就是基于组件来进行迭代开发,而不是从零开始开发 1.语法基础 组件开发的基础语法是命名空间. 可以使用魔法常量__NAMESPACE__可以直接获取当前命名空间的名称的字符串. 例如: &l ...
- 【C++】为什么含有纯虚函数的类无法定义对象
纯虚函数的地址为空,无法分配内存,纯虚成员函数对类是没有意义的,失去了普通类的数据和方法绑定于同一对象中的意义,因此无法构造对象,只能由其派生类继承这些成员函数并实现,才能构造派生类对象. 纯虚成员函 ...
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.26)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- TLS简单理解
TLS简单理解 TLS的历史 From GTP3.5 TLS(传输层安全)是一种加密协议,旨在确保 Internet 通信的安全性和隐私保护.下面是 TLS 的历史概述: SSL(安全套接层):TLS ...
- [转帖]signal 11 (SIGSEGV)错误排查
https://www.jianshu.com/p/a4250c72d391 jni调试最蛋疼的就是signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault a ...
- [转帖]Nginx动静分离;资源分离;rewrite重写、跳转、伪静态、规则、日志
https://www.cnblogs.com/caodan01/p/14745562.html 一.动静分离 动静分离,通过中间件将动静请求和静态请求进行分离: 通过中间件将动态请求和静态请求分离, ...
- [转帖]【存储测试】cosbench存储性能测试工具
一.前言 参考资料: https://blog.csdn.net/QTM_Gitee/article/details/100067724 https://github.com/intel-cloud/ ...
- [转帖]redis操作 + StrictRedis使用
https://www.cnblogs.com/szhangli/p/9979600.html Redis string类型 字符串类型是 Redis 中最为基础的数据存储类型. 它在 Redis 中 ...
- 在k8s中的控制器和部署服务-ReplicationController和ReplicaSet
pod 代表了 k8s 中的基本部署单元,但是在实际应用场景中,服务不可能是单个pod运行的,否则会出现"单点".在 k8s 中对 pod 的托管部署,专门抽象成了单独的资源.其中 ...