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


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

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

被折叠的 条评论
为什么被折叠?



