If it's possible to record the time-domain audio output & plot it, that
might help in trying to figure out where the problem is.
Is the audio clipping perhaps, what is the amplitude set to ?
Have you tried copying the input buffer directly to the output buffer so you
can rule out everything except your algorithm ?
Regards
Rob
-----Original Message-----
From: Alan Wolfe
Sent: Tuesday, April 26, 2011 9:14 PM
To: A discussion list for music-related DSP
Subject: Re: [music-dsp] Sinewave generation - strange spectrum
just stabbing in the dark in case nobody else gives a more useful
response but...
#1 - what is the format of your output? If it's low in bitcount that
could make the signal more dirty i believe (less resolution to make a
more perfect sine wave)
#2 - have you tried calculating via doubles?
#3 - what is data->amplitude... does that ever change or is it just a
one time set volume adjustment for the left and right channels?
On Tue, Apr 26, 2011 at 12:57 PM, <eu...@lavabit.com> wrote:
Hello,
I want to generate two different frequency sinewaves on LineOut -
Left&Right. For audio IO I'm using Portaudio(Linux, PortAudio V19-devel
(built Apr 17 2011 22:00:29)), and the callback code is:
static int paCallback( const void* inBuff, void* outBuff,
unsigned long frpBuff,
const
PaStreamCallbackTimeInfo* tInf,
PaStreamCallbackFlags
flags,
void* userData )
{
int16_t i;
audioData* data = (audioData*) userData;
float* out = (float*) outBuff;
/* Prevent warnings */
(void) tInf;
(void) flags;
for( i=0; i<frpBuff; i++ )
{
*out++ = data->amplitude[0] * sinf( (2.0f * M_PI) *
data->phase[0] );
*out++ = data->amplitude[1] * sinf( (2.0f * M_PI) *
data->phase[1] );
/* Update phase, rollover at 1.0 */
data->phase[0] += (data->frequency[0] / SAMPLE_RATE);
if(data->phase[0] > 1.0f) data->phase[0] -= 2.0f;
data->phase[1] += (data->frequency[1] / SAMPLE_RATE);
if(data->phase[1] > 1.0f) data->phase[1] -= 2.0f;
}
return paContinue;
}
When I checked the output spectrum for a 10kHz frequency using baudline
(running on another PC), I got this http://images.cjb.net/80af2.png . The
spectrum is clean only for output frequencies below 2-3 kHz.
The tone generator inside baudline gives a clean spectrum at 10 kHz:
http://images.cjb.net/b943b.png .
What method would you recommend for generating a clean sinewave at 5-12
kHz?
I think there is a bug somewhere, because the sine is computed in float
for each sample and should be precise enough...
Thanks
--
dupswapdrop -- the music-dsp mailing list and website:
subscription info, FAQ, source code archive, list archive, book reviews,
dsp links
http://music.columbia.edu/cmc/music-dsp
http://music.columbia.edu/mailman/listinfo/music-dsp
--
dupswapdrop -- the music-dsp mailing list and website:
subscription info, FAQ, source code archive, list archive, book reviews, dsp
links
http://music.columbia.edu/cmc/music-dsp
http://music.columbia.edu/mailman/listinfo/music-dsp
--
dupswapdrop -- the music-dsp mailing list and website:
subscription info, FAQ, source code archive, list archive, book reviews, dsp
links
http://music.columbia.edu/cmc/music-dsp
http://music.columbia.edu/mailman/listinfo/music-dsp