【Unity开发】简单的Wav文件压缩

14 篇文章 0 订阅
using UnityEngine;
using System.Collections;
using System.Text;
using System.IO;
using System;
using System.Collections.Generic;
public class audioTest : MonoBehaviour {



	void Start () {
        
        //采样率
        byte[] samplingRate = new byte[4];
        byte[] tempSR = new byte[4]; 
        //传输速度
        byte[] speed = new byte[4];
        byte[] tempSpeed = new byte[4];
        //DATA长度
        byte[] length = new byte[4];
        byte[] tempLenth = new byte[4];

        byte[] source = new byte[24];
        byte[] mid = new byte[8];
        
        

        FileStream fs = new FileStream(Application.dataPath + @"\test.wav", FileMode.Open, FileAccess.Read);
       // fs.Position = dataPosition;
        BinaryReader br = new BinaryReader(fs);
        br.Read(source, 0, 24);
        br.Read(samplingRate, 0, 4);
        int temp = System.BitConverter.ToInt32(samplingRate, 0);
        tempSR = System.BitConverter.GetBytes(temp / 2);
        br.Read(speed, 0, 4);
        temp = System.BitConverter.ToInt32(speed, 0);
        tempSpeed = System.BitConverter.GetBytes(temp / 2);
        br.Read(mid, 0, 8);
        br.Read(length, 0, 4);
        temp = System.BitConverter.ToInt32(length,0);
        tempLenth = System.BitConverter.GetBytes(temp /2);
        
        byte[] content = new byte[getHexToInt(length)];
        byte[] sample = new byte[(content.Length)/2];
        br.Read(content, 0, content.Length);
        getHex(content);
        sample = getSample(content);
       
        using (FileStream fs1 = new FileStream(Application.dataPath + @"\data.wav", FileMode.Create))
        {
            BinaryWriter bw = new BinaryWriter(fs1);
            foreach (byte i in source)
            {
                bw.Flush();
                bw.Write(i);
            }
            foreach (byte i in tempSR)
            {
                bw.Flush();
                bw.Write(i);
            }

            foreach (byte i in tempSpeed)
            {
                bw.Flush();
                bw.Write(i);
            }
            foreach (byte i in mid)
            {
                bw.Flush();
                bw.Write(i);
            }
            foreach (byte i in tempLenth)
            {
                bw.Flush();
                bw.Write(i);
            }
            foreach (byte i in sample)
            {
                bw.Flush();
                bw.Write(i);
            }

            bw.Close();
            fs1.Close();
        }
	}

    /// <summary>
    /// 通过头 计算DATA大小
    /// </summary>
    /// <param name="x"></param>
    /// <returns></returns>
    static int getHexToInt(byte[] x)
    {
        string retValue = "";
        for (int i = x.Length - 1; i >= 0; i--)
        {
            retValue += x[i].ToString("X");
        }
        //180FA50   即10进制DATA大小
        print(retValue);

        return Convert.ToInt32(retValue, 16);
    }
    /// <summary>
    /// 将字符串转化为16进制字节
    /// </summary>
    /// <param name="x"></param>
    static void getHex(byte[] x)
    {
        byte tmp;
        for (int i = 0; i < x.Length; i++)
        {
            tmp = Convert.ToByte(x[i].ToString("X"), 16);
            x[i] = tmp;
        }
    }

    static byte[] getSample(byte[] x)
    {
        byte[] retValue = new byte[x.Length];
        byte[] temp = new byte[retValue.Length/2 ];
        

        for (int i = 0; i < retValue.Length; i++)
        {
            
                retValue[i] += x[i];
         
         
        }
        for (int i = 0; i < retValue.Length/2; i++)
        {
            temp[(i)] = retValue[(2*i+1)];
        }
        return temp;
    }
	
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件名称:Monkey's Audio 软件版本:4.06 运行环境:WinALL 汉化类型:汉化安装版 软件性质:免费 官方主页:http://www.monkeysaudio.com ━━━━━━━━━━━━━━━ 软件简介 ━━━━━━━━━━━━━━━ Monkey's Audio(http://www.monkeysaudio.com)是一种无损压缩技术。他并不是由什么大公司发明的,完全是一个个人业余兴趣作品。为了使Monkey's Audio能有更好的发展,现在这个软件已经公开了源代码。   这种压缩格式的特点是无损压缩,也就是说对压缩数据进行还原之后得到的数据与原来的数据是完全相同的。该格式的特点尤其适合那些拥有一对“金耳朵”并且一直对mp3的音质耿耿于怀的音乐发烧友。后者有人会问,要无损压缩,我随便找个压缩软件比如WINRAR都可以达到不错的效果了,还要这种格式干嘛? 所以这里要澄清一个误解:使用普通的压缩软件进行压缩无疑是可以得到不错的压缩效果,有时候甚至更优于使用Monkey's Audio,但是压缩软件生成的压缩包必须要先解压还原之后才能播放里面的内容,而Monkey's Audio这种无损压缩编码得到的文件可以直接使用播放器(比如WinAMP)进行播放。Monkey's Audio的压缩效果大约在2:1左右,也就是说压缩结果是原来的二分之一大小。一张CD大约需要330MB左右的空间存放,相比之下还是比较占空间的。由于这个原因,所以对音质要求不是太高的人通常都选择VBR方式的mp3而不是选择它。   与Monkey's Audio类似的编码格式还包括WavPack、RKAU、Shorten等等。由于相对不是那么出名,又或者在某些方面不够Monkey's Audio做得好,因此获得的关注程度就逊色很多。   Monkey's Audio 软件在Monkey‘s Audio官方网站可以下载,专用于压缩wav文件为ape文件或解压ape文件wav文件   Monkey's Audio 是一种快速且易于操作的数字音乐压缩方案,它所生成的 APE 无损压缩格式,压缩率接近50%,压缩后的品质跟原始声音的品质完全是一样的(据说有人将 Wav 文件生成 APE 格式后,再转换回 Wav 文件,结果对比两个Wav 文件的 MD5 值时,发现居然完全一样)!   APE 无损压缩音频格式已被绝大多数音频播放器如:Winamp、Media Jukebox以及越来越多的应用程序支持。Monkey's Audio 是 APE 的压缩、解压缩、转换操作的平台。   本汉化安装版包括了原版的一切组件,无需原版文件,另外,用于 Winamp的APE插件安装程序也替换为汉化版。 ━━━━━━━━━━━━━━━ 汉化历程 ━━━━━━━━━━━━━━━ 2006.01.11 发布 Monkey's Audio 4.01 b1 汉化版 2006.03.14 发布 Monkey's Audio 4.01 b2 汉化版 2009.02.02 发布 Monkey's Audio 4.03 汉化版 2009.02.03 发布 Monkey's Audio 4.04 汉化版 2009.02.05 发布 Monkey's Audio 4.05 汉化版 2009.03.19 发布 Monkey's Audio 4.06 汉化版
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值