c# - 交换文件中的字节

标签 c# audio

我正在读入一个原始音频文件(CD 音轨翻录),进行字节交换,然后写回一个 wav 文件。

我的例程正确处理了字节,但只处理了大约一半的文件。我是一名 VB.NET 开发人员,并不是真正的 C# 开发人员,并且此代码无法正确转换为 VB.NET(出现溢出错误)。

与其说是计算/修剪,不如说是真正的“交换”。 (短)((缓冲区[i + 1] * 256)+缓冲区[i])

我相信它只写了一半的示例,但我不知道如何修复!

        public static short[] SwapBytesArray(string fileName)
    {
        byte[] buffer = System.IO.File.ReadAllBytes(fileName);
        long fileLength = buffer.LongLength;
        if ((fileLength & 1) == 1)
        {
            throw new ArgumentException("File length must be an even number of bytes");
        }
        System.Collections.Generic.List<short> sList = new System.Collections.Generic.List<short>();


        for (long i = 0; i < fileLength - 1; i += 2)
        {
            byte tmp = buffer[i];
            sList.Add((short)((buffer[i + 1] * 256) + buffer[i]));
            //buffer[i + 1] = tmp;
        }
        return sList.ToArray();
    }

最佳答案

为什么要返回一个short的数组?

如果要写回文件,byte[] 数组不是更好的选择吗?

public static byte[] SwapBytes(string fileName)
{ 
    byte[] buffer = System.IO.File.ReadAllBytes(fileName);

    long fileLength = buffer.LongLength;

    if ((fileLength & 1) == 1)
    {
        throw new ArgumentException("File length must be an even number of bytes");
    }

    for (long i = 0; i < fileLength  - 1 ; i +=2 )
    {
        byte tmp = buffer[i];
        buffer[i] = buffer[i + 1];
        buffer[i + 1] = tmp;
    }

    return buffer;
}

关于c# - 交换文件中的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/931262/

相关文章:

c# - 如何让用户在首次登录后更改密码?

c# - 如何在应用程序重新启动之间保留对组合框中项目的选择

iPhone SDK 音频混合器

java - 音频频谱效果 iOS/Android

javascript - Backbonejs - 查看自定义 HTML 属性?

c# - 如何判断库代码中是否允许代码访问安全

c# - 使项目在多个 .NET 版本之间保持同步

java - 在 Java 中使用傅里叶变换处理音频数据

ios - 第一次音频启动延迟 - ios Swift

c# - 计算以公里为单位的两个地理点的距离 c#