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

📄 audio.c

📁 jpeg and mpeg 编解码技术源代码
💻 C
字号:
#include <windows.h>
#include "all.h"#include "audio.h"


#define SAMPLE_BUF_SIZE 16384
#define OBUFFERSIZE 1024*2


void append (AudioFile *af, unsigned int channel, int value)
{
	af->sample_buffer[af->bufferp[channel]]   = (char) (value & 0xff);
	af->sample_buffer[af->bufferp[channel]+1] = (char) (value >> 8);

	af->bufferp[channel] += af->numChannel << 1;
}

void write_buffer(AudioFile *af)
{
	int i;
	for(i=0; i<af->numChannel; i++)
		af->bufferp[i] = i * af->numChannel;
}

AudioFile *AudioOpenWrite (  int numChannel,  float fSample){
	AudioFile *file;

	if ((file=(AudioFile*)LocalAlloc(LPTR,sizeof(AudioFile))) == NULL)
		CommonExit(1,"2004: Memory allocation error");

	file->numChannel = numChannel;
	file->currentSample = 0;
	file->data_size = OBUFFERSIZE * numChannel;

	return file;
}void AudioWriteData (  AudioFile *file,  float **data,  long numSample){
	long tot,cur,num;
	long i;
	float tmp;
	int   tmp2;

	tot = file->numChannel*numSample;
	cur = max(0,-file->numChannel*file->currentSample);
	while (cur < tot) {
		num = min(tot-cur,SAMPLE_BUF_SIZE);
		for (i=0; i<num; i++) {
			tmp = data[(cur+i)%file->numChannel][(cur+i)/file->numChannel];
			if(tmp < 0) {
				tmp -= .5;
				if(tmp < -0x7fff)
					tmp = (float) -0x7fff;
			} else {
				tmp += .5;
				if(tmp > 0x7fff)
					tmp = (float) 0x7fff;
			}
			tmp2 = (int)tmp;
			append(file,(cur+i)%file->numChannel,tmp2);
		}
		cur += num;
	}
	write_buffer(file);
	file->currentSample += tot/file->numChannel;
}void AudioClose (AudioFile *file){
	LocalFree(file);}/* end of audio.c */

⌨️ 快捷键说明

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