소스 검색

Add amplitude() to AudioSynthWaveformSine

dds
PaulStoffregen 11 년 전
부모
커밋
7142f4c47d
3개의 변경된 파일20개의 추가작업 그리고 6개의 파일을 삭제
  1. +2
    -0
      keywords.txt
  2. +4
    -2
      synth_sine.cpp
  3. +14
    -4
      synth_sine.h

+ 2
- 0
keywords.txt 파일 보기

AudioPlaySdWav KEYWORD2 AudioPlaySdWav KEYWORD2
AudioSynthToneSweep KEYWORD2 AudioSynthToneSweep KEYWORD2
AudioSynthWaveform KEYWORD2 AudioSynthWaveform KEYWORD2
AudioSynthWaveformSine KEYWORD2
AudioSynthWaveformSineModulated KEYWORD2
isPlaying KEYWORD2 isPlaying KEYWORD2
positionMillis KEYWORD2 positionMillis KEYWORD2
lengthMillis KEYWORD2 lengthMillis KEYWORD2

+ 4
- 2
synth_sine.cpp 파일 보기

scale = (ph >> 8) & 0xFFFF; scale = (ph >> 8) & 0xFFFF;
val2 *= scale; val2 *= scale;
val1 *= 0xFFFF - scale; val1 *= 0xFFFF - scale;
block->data[i] = (val1 + val2) >> 16;
//block->data[i] = (((val1 + val2) >> 16) * magnitude) >> 16;
block->data[i] = multiply_32x32_rshift32(val1 + val2, magnitude);
ph += inc; ph += inc;
} }
phase = ph; phase = ph;
scale = (ph >> 8) & 0xFFFF; scale = (ph >> 8) & 0xFFFF;
val2 *= scale; val2 *= scale;
val1 *= 0xFFFF - scale; val1 *= 0xFFFF - scale;
block->data[i] = (val1 + val2) >> 16;
//block->data[i] = (((val1 + val2) >> 16) * magnitude) >> 16;
block->data[i] = multiply_32x32_rshift32(val1 + val2, magnitude);
// -32768 = no phase increment // -32768 = no phase increment
// 32767 = double phase increment // 32767 = double phase increment
mod = modinput->data[i]; mod = modinput->data[i];

+ 14
- 4
synth_sine.h 파일 보기

class AudioSynthWaveformSine : public AudioStream class AudioSynthWaveformSine : public AudioStream
{ {
public: public:
AudioSynthWaveformSine() : AudioStream(0, NULL) {}
AudioSynthWaveformSine() : AudioStream(0, NULL), magnitude(16384) {}
void frequency(float freq); void frequency(float freq);
//void amplitude(q15 n);
void amplitude(float n) {
if (n < 0) n = 0;
else if (n > 1.0) n = 1.0;
magnitude = n * 65536.0;
}
virtual void update(void); virtual void update(void);
private: private:
uint32_t phase; uint32_t phase;
uint32_t phase_increment; uint32_t phase_increment;
int32_t magnitude;
}; };


class AudioSynthWaveformSineModulated : public AudioStream class AudioSynthWaveformSineModulated : public AudioStream
{ {
public: public:
AudioSynthWaveformSineModulated() : AudioStream(1, inputQueueArray) {}
AudioSynthWaveformSineModulated() : AudioStream(1, inputQueueArray), magnitude(16384) {}
void frequency(float freq); void frequency(float freq);
//void amplitude(q15 n);
void amplitude(float n) {
if (n < 0) n = 0;
else if (n > 1.0) n = 1.0;
magnitude = n * 65536.0;
}
virtual void update(void); virtual void update(void);
private: private:
uint32_t phase; uint32_t phase;
uint32_t phase_increment; uint32_t phase_increment;
audio_block_t *inputQueueArray[1]; audio_block_t *inputQueueArray[1];
int32_t magnitude;
}; };





Loading…
취소
저장