Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

PCM tone generator

Name: Anonymous 2011-10-30 12:52

Hey /prog/

I'm trying to teach myself how to generate PCM audio in C, and I can't figure out why this isn't generating a clear sine wave signal when I pipe it to aplay.  Any ideas?


#include <math.h>

#define MIDDLE_C 261.626
#define HZ 8000.0
#define ONE_CYCLE 2.0
#define PI 3.14159265

int main() {

    float frames = HZ / MIDDLE_C;
    float i;
    float n;
    unsigned int x;
    int s, v;

    for(v=0; v<MIDDLE_C; v++) {
        for(i=0; i<frames; i++) {
            n = (1 + sin((i / frames) * (PI * 2))) / 2;
            x = (int)round(0xFF * n);
            putchar(x);
        }
    }

    return 0;

}

Name: Anonymous 2011-10-30 16:00

>>5
Thanks for the thoughts, but it actually expects unsigned chars.  This is working as intended as far as I can tell:



#include <stdio.h>
#include <math.h>

#define A4 440
#define HZ 8000.0
#define ONE_CYCLE 2.0
#define PI 3.14159265

float frequency(int note);
void play(int note, float duration);

int main() {

    play(3, 0.1);
    play(2, 0.1);
    play(1, 0.1);
    play(2, 0.1);
    play(3, 0.5);
   
    return 0;

}

float frequency(int note) {
    return pow(2, note / 12.0) * A4;
}

void play(int note, float duration) {
    int samples = (int)round(duration * HZ);
    float freq = frequency(note);

    float period = HZ / freq;

    int v, x, s;
    float n, i;
    for(v=0; v<samples / period; v++) {
        for(i=0; i<period; i++) {
            n = (1 + sin((i / period) * (PI * 2))) / 2;
            x = (int)round(0xFF * n);

            putchar(x);
        }
    }
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List