view miscprog/tone-convert.c @ 395:00f5287db832

se_k200i/flash-notes: fix wrong number of zeros in 0x20000 address
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 01 Jan 2023 01:42:04 +0000
parents 4307b57229d3
children
line wrap: on
line source

/*
 * This command line utility converts a Calypso DSP tone specification from
 * frequency in Hz and amplitude in dBfs into the 16-bit tone control word
 * that would go into the DSP for the keybeep or tones audio task.
 *
 * The conversion is done in exactly the same way how RiViera Audio Service
 * does it, allowing the possibility of reconstructing Audio Service API
 * input values from DSP tone control words captured in L1 traces.
 */

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

main(argc, argv)
	char **argv;
{
	int freq_hz, ampl_dbfs;
	double frequency_index, frequency_beep;
	double amplitude_beep, amplitude, amplitude_index;
	unsigned output;

	if (argc != 3) {
		fprintf(stderr, "usage: %s freq ampl\n", argv[0]);
		exit(1);
	}
	freq_hz = atoi(argv[1]);
	ampl_dbfs = atoi(argv[2]);

	/* code from RiViera Audio Service */
	/* frequency computation */
	frequency_beep = (double) freq_hz;
	frequency_index = (256 * cos(6.283185*(frequency_beep/8000)));
	/* amplitude computation */
	amplitude_beep = (double) ampl_dbfs;
	amplitude      = exp((amplitude_beep*0.115129)+(5.544625));
	amplitude_index = amplitude * sin(6.283185*(frequency_beep/8000));
	/* output word */
	output = (unsigned)((((unsigned)(frequency_index))<<8) |
			    ((unsigned)(amplitude_index)));

	printf("0x%04X\n", output);
	exit(0);
}