【问题标题】:How to convert an audio file(mp3 file) into binary using java and the reverese?如何使用 java 将音频文件(mp3 文件)转换为二进制文件,反之亦然?
【发布时间】:2020-06-05 02:53:51
【问题描述】:

我想处理音频文件二进制数据,我想用处理后的二进制数据生成一个新的音频文件。 我已使用以下代码将音频文件转换为二进制文件

            BufferedInputStream is = new BufferedInputStream(new FileInputStream("song.mp3"));
            for (int i; (i = is.read()) != -1;) {
                String temp = "0000000" + Integer.toBinaryString(i).toUpperCase();
                if (temp.length() == 1) {
                    sb.append('0');
                }
                temp = temp.substring(temp.length() - 8); 
                sb.append(temp);
            }

我不知道如何使用存储在 sb(StringBuilder) 对象中的上述二进制数据创建音频文件。

【问题讨论】:

  • 我的实际需求是开发音频隐写术。我认为字符串会更容易处理和应用 LSB 算法。

标签: java audio binary stringbuilder


【解决方案1】:

以下示例将一些数字(可能是您的音频文件的内容)来回转换为二进制数字:

public class Main
{

    private static String toBin(int i)
    {
        String temp = "00000000" + Integer.toBinaryString(i);
        return temp.substring((temp.length() - 8)).toUpperCase();
    }

    public static void main(String[] args)
    {
        int[] inputData = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        StringBuffer sb = new StringBuffer();

        // Fill the buffer with binary numbers
        for (int x : inputData)
        {
            String binaryNumber = toBin(x);
            System.out.println("x="+x+", binaryNumber=" + binaryNumber);
            sb.append(binaryNumber);
        }

        // Print the whole buffer content
        System.out.println("sb=" + sb.toString());

        // Split the buffer into chunks of 8 characters
        for (int i = 0; i < sb.length(); i += 8)
        {
            String part = sb.substring(i, i + 8);

            // Convert back to integer
            int x = Integer.parseInt(part, 2);

            System.out.println("part=" + part + ", x=" + x);
        }
    }
}

输出:

x=1, binaryNumber=00000001
x=2, binaryNumber=00000010
x=3, binaryNumber=00000011
x=4, binaryNumber=00000100
x=5, binaryNumber=00000101
x=6, binaryNumber=00000110
x=7, binaryNumber=00000111
x=8, binaryNumber=00001000
x=9, binaryNumber=00001001
x=10, binaryNumber=00001010
sb=00000001000000100000001100000100000001010000011000000111000010000000100100001010
part=00000001, x=1
part=00000010, x=2
part=00000011, x=3
part=00000100, x=4
part=00000101, x=5
part=00000110, x=6
part=00000111, x=7
part=00001000, x=8
part=00001001, x=9
part=00001010, x=10

【讨论】:

  • 您正在使用public static int parseInt(java.lang.String, int) 方法将二进制数转换为整数。我怎样才能对我的音频文件做同样的事情?
  • 您的问题不清楚。你的问题是什么,你不知道如何读取二进制(音频)文件?
  • 我使用我提供的上述程序将音频文件(mp3)转换为二进制文件。但是我怎样才能颠倒逻辑呢?使用二进制值,我应该如何取回我的音频 (mp3) 文件?
  • 我上面的例子都做了,转换成你的二进制字符串,然后回到原始值。您只需要将“x”的值写入文件而不是打印到屏幕上。
  • 在您的情况下,“x”是一个原始整数。但在我的 'x' 不是原始的,它是一个音频文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2016-04-27
相关资源
最近更新 更多