java将 10进制的byte数组生成wav文件

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteArrayToWav {

    public static void main(String[] args) {
        String outputFilePath = "output.wav";

        try {
            // 示例 byte 数组
            byte[] audioData = {0x52, 0x49, 0x46, 0x46, 0x24, 0x08, 0x00, 0x00, /*...*/};

            writeWavFile(audioData, outputFilePath);

            System.out.println("WAV file generated successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void writeWavFile(byte[] audioData, String outputFilePath) throws IOException {
        try (FileOutputStream wavFile = new FileOutputStream(outputFilePath)) {
            // 写入WAV文件头
            writeWavHeader(wavFile, audioData.length);

            // 写入音频数据
            wavFile.write(audioData);
        }
    }

    private static void writeWavHeader(FileOutputStream wavFile, int dataSize) throws IOException {
        // WAV 文件格式头
        wavFile.write("RIFF".getBytes());
        wavFile.write(intToByteArray(36 + dataSize)); // Chunk size
        wavFile.write("WAVEfmt ".getBytes());
        wavFile.write(intToByteArray(16)); // Subchunk1 size
        wavFile.write(shortToByteArray((short) 1)); // Audio format (1 for PCM)
        wavFile.write(shortToByteArray((short) 1)); // Number of channels
        wavFile.write(intToByteArray(44100)); // Sample rate (e.g., 44.1kHz)
        wavFile.write(intToByteArray(44100 * 2)); // Byte rate (Sample rate * Number of channels * Bits per sample / 8)
        wavFile.write(shortToByteArray((short) 2)); // Block align (Number of channels * Bits per sample / 8)
        wavFile.write(shortToByteArray((short) 16)); // Bits per sample
        wavFile.write("data".getBytes());
        wavFile.write(intToByteArray(dataSize)); // Subchunk2 size
    }

    private static byte[] intToByteArray(int value) {
        return new byte[]{
                (byte) (value),
                (byte) (value >> 8),
                (byte) (value >> 16),
                (byte) (value >> 24)
        };
    }

    private static byte[] shortToByteArray(short value) {
        return new byte[]{
                (byte) (value),
                (byte) (value >> 8)
        };
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值