sine wave
This commit is contained in:
parent
8649141cbb
commit
a586af8b5c
53
audio.c
53
audio.c
|
@ -70,24 +70,6 @@ void aud_rnd(Audio*aud,size_t mode)
|
|||
}
|
||||
}
|
||||
|
||||
/*******
|
||||
* Triangle waveform generator
|
||||
*******/
|
||||
void aud_tri(Audio*aud,double freq,size_t mode)
|
||||
{
|
||||
if(!aud->data||!aud->nsamples||!aud->samplerate||!aud->channels)return;
|
||||
for(size_t i=0;i<aud->nsamples;++i)
|
||||
{
|
||||
/* for(size_t ch=0;ch<aud->channels;++ch,++i) */
|
||||
//aud->data[i]=sin(i);
|
||||
uint16_t sample=(i%(int)(aud->samplerate/freq))*7;
|
||||
if(mode==GEN)
|
||||
aud->data[i]=sample;
|
||||
else if(mode==ADD)
|
||||
aud->data[i]=(aud->data[i]+sample)/2;
|
||||
}
|
||||
}
|
||||
|
||||
/*******
|
||||
* Zero all data
|
||||
*******/
|
||||
|
@ -110,3 +92,38 @@ void aud_env(Audio*aud)
|
|||
for(size_t i=0;i<aud->nsamples/8;++i)
|
||||
aud->data[aud->nsamples-1-i]*=(float)i/range;
|
||||
}
|
||||
|
||||
/*******
|
||||
* Sine waveform generator
|
||||
*******/
|
||||
void aud_sine(Audio*aud,double freq,size_t mode)
|
||||
{
|
||||
if(!aud->data||!aud->nsamples||!aud->samplerate||!aud->channels)return;
|
||||
for(size_t i=0;i<aud->nsamples;++i)
|
||||
{
|
||||
/* for(size_t ch=0;ch<aud->channels;++ch,++i) */
|
||||
uint16_t sample=sin((2*PI)/(aud->samplerate/freq)*i)*8000;
|
||||
if(mode==GEN)
|
||||
aud->data[i]=sample;
|
||||
else if(mode==ADD)
|
||||
aud->data[i]=(aud->data[i]+sample)/2;
|
||||
}
|
||||
}
|
||||
|
||||
/*******
|
||||
* Triangle waveform generator
|
||||
*******/
|
||||
void aud_tri(Audio*aud,double freq,size_t mode)
|
||||
{
|
||||
if(!aud->data||!aud->nsamples||!aud->samplerate||!aud->channels)return;
|
||||
for(size_t i=0;i<aud->nsamples;++i)
|
||||
{
|
||||
/* for(size_t ch=0;ch<aud->channels;++ch,++i) */
|
||||
//aud->data[i]=sin(i);
|
||||
uint16_t sample=(i%(int)(aud->samplerate/freq))*7;
|
||||
if(mode==GEN)
|
||||
aud->data[i]=sample;
|
||||
else if(mode==ADD)
|
||||
aud->data[i]=(aud->data[i]+sample)/2;
|
||||
}
|
||||
}
|
||||
|
|
4
audio.h
4
audio.h
|
@ -24,6 +24,7 @@ Audio aud_new(size_t samplerate,size_t nsamples,size_t channels);
|
|||
void aud_free(Audio*aud);
|
||||
|
||||
// Audio data manipulation
|
||||
#define PI 3.141592653589793
|
||||
#define SEMITONE_CONSTANT 1.0594630943592953 // pow(2,1/12.0)
|
||||
#define raisesemitone(freq,nsemitones) ((freq)*pow(SEMITONE_CONSTANT,(nsemitones)))
|
||||
|
||||
|
@ -35,7 +36,8 @@ void aud_free(Audio*aud);
|
|||
enum{GEN,ADD};
|
||||
|
||||
void aud_avg(Audio*aud,size_t blocksize);
|
||||
void aud_env(Audio*aud);
|
||||
void aud_rnd(Audio*aud,size_t mode);
|
||||
void aud_sine(Audio*aud,double freq,size_t mode);
|
||||
void aud_tri(Audio*aud,double freq,size_t mode);
|
||||
void aud_zero(Audio*aud);
|
||||
void aud_env(Audio*aud);
|
||||
|
|
Loading…
Reference in New Issue
Block a user