• 大小: 7KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: C/C++
  • 标签:

资源简介

纯C语言,利用正弦波生成生成产生类似do、re、mi、fa、so的音频wave文件

资源截图

代码片段和文件信息

// sin.cpp : Defines the entry point for the console application.
#include    
#include    
#include 
#include 
#include 

#define PI 3.1425926

int main()   
{
char *sine_buf  =(char *) malloc(100000 * sizeof(char)); 
int i;   
struct bb
{
char RiffID[4]; // ‘R‘‘I‘‘F‘‘F‘ “RIFF“标志
int RiffSize; // 文件长度(WAVE文件的大小 不含前8个字节)
char RiffFormat[4]; // ‘W‘‘A‘‘V‘‘E‘ “WAVE“标志
char FmtID[4]; // ‘f‘‘m‘‘t‘‘ ‘ “fmt “标志
int FmtSize; //过渡字节(不定)16 for PCM. This is the size of the rest of the Subchunk which follows this number.
unsigned short FormatTag; //格式类别 当FormatTag=1,用的就是非压缩格式。
unsigned short Channels; //通道数(单声道为1 双声道为2)
int SamplesPerSec; //采样率(每秒样本数) 表示每个通道的播放速度
int AvgBytesPerSec; //波形音频数据传输速率 其值为:通道数*每秒数据位数*每样本的数据位数/8 播放软件可以利用该值估计缓冲区大小
unsigned short BlockAlign; //每样本的数据位数(按字节算) 其值为:通道数*每样本的数据位值/8, 播放软件需要一次处理多个该值大小的字节数据 以便将其值用于缓冲区的调整
unsigned short BitsPerSample; //每样本的数据位数 表示每个声道中各个样本的数据位数. 如果有多个声道对每个声道而言 样本大小都一样
char DataID[4]; // ‘d‘‘a‘‘t‘‘a‘ 
int DataSize; //语音数据的长度
}sTest;

FILE   *fp1;   
fp1=fopen(“q.txt““wb“);       
if(fp1==NULL)   
{   
printf(“open file zk1 fail! \n“);  
return;   

}

int iSamplesPerSec = 8000; //正弦波的采样频率
int iPerSec = 300; //正弦波的频率
static double wt = 0; //采样角度

for(i=0;i<2500;i++)   
{   
sine_buf[i]= (char)(127 + 127*sin(wt));
fwrite(&sine_buf[i]11fp1);
wt += 2*PI*iPerSec / iSamplesPerSec;

if (wt > 2*PI)
{
wt -= 2 * PI;
}
}   
fclose(fp1);   


fp1=fopen(“q.txt““a+“);       
if(fp1==NULL)   
{   
printf(“open file fail! \n“);  
return;   
}

for(i=0;i<1500;i++)   
{   
sine_buf[i]= 0;
fwrite(&sine_buf[i]11fp1);
}   

iSamplesPerSec = 8000; //正弦波的采样频率
iPerSec = 400; //正弦波的频率
wt = 0; //采样角度

for(i=0;i<2500;i++)   
{   
sine_buf[i]= (char)(127 + 127*sin(wt));
fwrite(&sine_buf[i]11fp1);
wt += 2*PI*iPerSec / iSamplesPerSec;

if (wt > 2*PI)
{
wt -= 2 * PI;
}
}   
fclose(fp1);  


fp1=fopen(“q.txt““a+“);       
if(fp1==NULL)   
{   
printf(“open file fail! \n“);  
return;   
}

for(i=0;i<1500;i++)   
{   
sine_buf[i]= 0;
fwrite(&sine_buf[i]11fp1);
}   

iSamplesPerSec = 8000; //正弦波的采样频率
iPerSec = 500; //正弦波的频率
wt = 0; //采样角度

for(i=0;i<2500;i++)   
{   
sine_buf[i]= (char)(127 + 127*sin(wt));
fwrite(&sine_buf[i]11fp1);
wt += 2*PI*iPerSec / iSamplesPerSec;

if (wt > 2*PI)
{
wt -= 2 * PI;
}
}   
fclose(fp1);  


fp1=fopen(“q.txt““a+“);       
if(fp1==NULL)   
{   
printf(“open file fail! \n“);  
return;   
}

for(i=0;i<1500;i++)   
{   
sine_buf[i]= 0;
fwrite(&sine_buf[i]11fp1);
}   

iSamplesPerSec = 8000; //正弦波的采样频率
iPerSec = 600; //正弦波的频率
wt = 0; //采样角度

for(i=0;i<2500;i++)   
{   
sine_buf[i]= (char

评论

共有 条评论

相关资源