⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wavwriter.c

📁 alac decoder,内容详细
💻 C
字号:
/* * ALAC (Apple Lossless Audio Codec) decoder * Copyright (c) 2005 David Hammerton * All rights reserved. * * Very basic WAV file writer (just writes the header) * * http://crazney.net/programs/itunes/alac.html *  * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * */#include <stdio.h>#include <stdlib.h>#include <stdint.h>#ifndef MAKEFOURCC#define MAKEFOURCC(ch0, ch1, ch2, ch3) ( \    ( (int32_t)(char)(ch0) << 24 ) | \    ( (int32_t)(char)(ch1) << 16 ) | \    ( (int32_t)(char)(ch2) << 8 ) | \    ( (int32_t)(char)(ch3) ) )#endif#define _Swap32(v) do { \                   v = (((v) & 0x000000FF) << 0x18) | \                       (((v) & 0x0000FF00) << 0x08) | \                       (((v) & 0x00FF0000) >> 0x08) | \                       (((v) & 0xFF000000) >> 0x18); } while(0)#define _Swap16(v) do { \                   v = (((v) & 0x00FF) << 0x08) | \                       (((v) & 0xFF00) >> 0x08); } while (0)extern int host_bigendian;static void write_uint32(FILE *f, uint32_t v, int bigendian){    if (bigendian ^ host_bigendian) _Swap32(v);    fwrite(&v, 4, 1, f);}static void write_uint16(FILE *f, uint16_t v, int bigendian){    if (bigendian ^ host_bigendian) _Swap16(v);    fwrite(&v, 2, 1, f);}void wavwriter_writeheaders(FILE *f, int datasize,                            int numchannels, int samplerate,                            int bitspersample){    /* write RIFF header */    write_uint32(f, MAKEFOURCC('R','I','F','F'), 1);    write_uint32(f, 36 + datasize, 0);    write_uint32(f, MAKEFOURCC('W','A','V','E'), 1);    /* write fmt header */    write_uint32(f, MAKEFOURCC('f','m','t',' '), 1);    write_uint32(f, 16, 0);    write_uint16(f, 1, 0); /* PCM data */    write_uint16(f, numchannels, 0);    write_uint32(f, samplerate, 0);    write_uint32(f, samplerate * numchannels * (bitspersample / 8), 0); /* byterate */    write_uint16(f, numchannels * (bitspersample / 8), 0);    write_uint16(f, bitspersample, 0);    /* write data header */    write_uint32(f, MAKEFOURCC('d','a','t','a'), 1);    write_uint32(f, datasize, 0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -