📄 audio.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 + -