正弦波 音频 C语言,C++生成指定频率的正弦波wav音频文件以及生成播放数据

本文介绍了如何使用C/C++在MTK平台上编写代码,生成指定频率的正弦波wav音频文件。代码示例中包含了正弦波数据生成函数和wav文件头结构,同时提供了测试用例进行播放数据生成。讨论了8位和16位单、双声道的处理,并提到了在某些编辑软件中可能出现的显示问题。
摘要由CSDN通过智能技术生成

基于MTK平台的工厂模式代码编写的一个正弦波wav音频文件生成代码片

0f510ea4f44d74b8b2e69f28aee69d6c.png

c7ef0028bf62440b0e3c87bb1358070b.png

struct WavHead{

char RIFF[4]; //头部分那个RIFF

int size0;//存的是后面所有文件大小

char WAVE[4];

char FMT[4];

int size1;//存的是fmt保存的大小,包含这之后,data前面几个,共16个

short fmttag;

short channel;

int samplespersec;//每秒采样数

int bytepersec;

short blockalign;

short bitpersamples;

char DATA[4];

int size2;//剩下文件大小

};

int MakeWaveData2(int freq, float amp, int time_ms, unsigned char* p, int len, int sampleRate = 44100, int channels = 2, int BitsPerSample = 16)

{

int ret = 0;

ALOGD(TAG"%s Enter\n", __FUNCTION__);

int SAMPLE_NUM = sampleRate * time_ms / 1000; //采集样本总数

int AUDIO_CYCLE = sampleRate / freq; //一个正弦波采集样本个数

int ACCURACY = (BitsPerSample == 16) ? INT16_MAX : INT8_MAX; //精度

//int BUFF_SIZE = sampleRate * durations * channels * BitsPerSample/8;

ALOGD(TAG"amp=%0.2f SAMPLE_NUM=%d AUDIO_CYCLE=%d ACCURACY=%d len=%d\n", amp, SAMPLE_NUM, AUDIO_CYCLE, ACCURACY, len);

if(amp > 1.0){

ALOGW(TAG"amp>1.0 set to 1.0\n");

amp = 1.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值