mirror of
https://github.com/cookiengineer/audacity
synced 2025-12-18 22:51:25 +01:00
Add new files missed in previous commit
This commit is contained in:
69
lib-src/libnyquist/nyquist/cmupv/src/cmupvdbg.c
Normal file
69
lib-src/libnyquist/nyquist/cmupv/src/cmupvdbg.c
Normal file
@@ -0,0 +1,69 @@
|
||||
/* cmupvdbg.c -- debug support for cmupv
|
||||
* Roger B. Dannenberg
|
||||
* Nov 2015
|
||||
*/
|
||||
|
||||
/* To see what data is going into the phase vocoder, write_pv_frame
|
||||
* saves frames or buffers to disk as audio.
|
||||
* If something is wrong with your applications delivery of analysis frames,
|
||||
* probably most frames are wrong, so you should write, say, 10 initial
|
||||
* files and look at them. Set MAX_FILES to 10 and MAX_SAVE to 10. Then,
|
||||
* after running your program, use Audacity to open the 10 frames saved
|
||||
* to disk: use the Files:Import:Audio command to load all 10 in one
|
||||
* command as different tracks. You should see 10 tracks, each containing
|
||||
* one frame, shifted to the correct source time location. (If not, then
|
||||
* find and fix the bug.)
|
||||
*
|
||||
* This function is also useful for printing other data, e.g. synthesis frames
|
||||
* or output buffers. To get the most out of this, you should set the first
|
||||
* parameter, zeros, to the absolute sample offset, e.g. if you want to view
|
||||
* synthesis frames that are spaced with a 64 sample hop size, you should set
|
||||
* zeros to 0, 64, 128, 192, ... so that when you view the files in Audacity,
|
||||
* the samples will line up in time with each other and with the output file.
|
||||
*
|
||||
* You can display multiple frame types and lengths, so the prefix parameter
|
||||
* allows you to effectively label the data. This prefix is used to construct
|
||||
* the file name.
|
||||
*
|
||||
* MAX_FILES tells how many files to write. Because of padding, file writing
|
||||
* is an N-squared operation, so only write initial frames if possible, but
|
||||
* use a large number if you need to see everything.
|
||||
*
|
||||
* MAX_SAVE tells how many file *names* to use. Files are numbered, so we'll
|
||||
* simply take the number modulo MAX_SAVE so that file names are reused and
|
||||
* old files are overwritten. Use a large value of MAX_SAVE to save everything.
|
||||
* Use 1 to get only the last frame.
|
||||
*/
|
||||
|
||||
#include "stdio.h"
|
||||
#include "sndfile.h"
|
||||
|
||||
|
||||
#define MAX_FILES 10
|
||||
#define MAX_SAVE 10
|
||||
static int file_no = 0;
|
||||
|
||||
|
||||
void write_pv_frame(long zeros, float *frame, long fftsize, char *prefix)
|
||||
{
|
||||
float z = 0;
|
||||
char path[128];
|
||||
SF_INFO sfinfo;
|
||||
SNDFILE *sf;
|
||||
if (file_no >= MAX_FILES) return;
|
||||
sprintf(path, "%s-%02d.wav", prefix, (file_no % MAX_SAVE) + 1);
|
||||
sfinfo.frames = 0;
|
||||
sfinfo.samplerate = 44100;
|
||||
sfinfo.channels = 1;
|
||||
sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
|
||||
sfinfo.sections = 0;
|
||||
sfinfo.seekable = 0;
|
||||
sf = sf_open(path, SFM_WRITE, &sfinfo);
|
||||
for (long i = 0; i < zeros; i++) {
|
||||
sf_writef_float(sf, &z, 1);
|
||||
}
|
||||
sf_writef_float(sf, frame, fftsize);
|
||||
sf_close(sf);
|
||||
printf("wrote %s, %ld zeros\n", path, zeros);
|
||||
file_no++;
|
||||
}
|
||||
Reference in New Issue
Block a user