static void writePartToOpenFile (LongSound me, int audioFileType, long imin, long n, MelderFile file, int numberOfChannels_override, int numberOfBitsPerSamplePoint) { long ibuffer, offset, numberOfBuffers, numberOfSamplesInLastBuffer; offset = imin; numberOfBuffers = (n - 1) / my nmax + 1; numberOfSamplesInLastBuffer = (n - 1) % my nmax + 1; if (file -> filePointer) for (ibuffer = 1; ibuffer <= numberOfBuffers; ibuffer ++) { long numberOfSamplesToCopy = ibuffer < numberOfBuffers ? my nmax : numberOfSamplesInLastBuffer; LongSound_readAudioToShort (me, my buffer, offset, numberOfSamplesToCopy); offset += numberOfSamplesToCopy; MelderFile_writeShortToAudio (file, numberOfChannels_override ? numberOfChannels_override : my numberOfChannels, Melder_defaultAudioFileEncoding (audioFileType, numberOfBitsPerSamplePoint), my buffer, numberOfSamplesToCopy); } /* * We "have" no samples any longer. */ my imin = 1; my imax = 0; }
/* Precondition: size (my buffer) >= nbuf */ static void _LongSound_to_multichannel_buffer (LongSound me, short *buffer, long nbuf, int nchannels, int ichannel, long ibuf) { long numberOfReads = (my nx - 1) / nbuf + 1; long n_to_read = 0; if (ibuf <= numberOfReads) { n_to_read = ibuf == numberOfReads ? (my nx - 1) % nbuf + 1 : nbuf; long imin = (ibuf - 1) * nbuf + 1; LongSound_readAudioToShort (me, my buffer, imin, n_to_read); for (long i = 1; i <= n_to_read; i++) { buffer[nchannels * (i - 1) + ichannel] = my buffer[i]; } } if (ibuf >= numberOfReads) { for (long i = n_to_read + 1; i <= nbuf; i++) { buffer[nchannels * (i - 1) + ichannel] = 0; } } }
static void _LongSound_readSamples (LongSound me, int16 *buffer, long imin, long imax) { LongSound_readAudioToShort (me, buffer, imin, imax - imin + 1); }