Exemplo n.º 1
0
/*********************************************************************************
 * Close WAV file.
 * Update chunk sizes so it can be read by audio applications.
 */
int Audio_WAV_CloseWriter(WAV_Writer *writer) {
  unsigned char buffer[4];
  unsigned char *bufferPtr;
  int numWritten;
  int riffSize;

  /* Go back to beginning of file and update DATA size */
  int result = fseek(writer->fid, writer->dataSizeOffset, SEEK_SET);
  if (result < 0)
    return result;

  bufferPtr = buffer;
  WriteLongLE(&bufferPtr, writer->dataSize);
  numWritten = fwrite(buffer, 1, sizeof( buffer), writer->fid);
  if (numWritten != sizeof(buffer))
    return -1;

  /* Update RIFF size */
  result = fseek(writer->fid, 4, SEEK_SET);
  if (result < 0)
    return result;

  riffSize = writer->dataSize + (WAV_HEADER_SIZE - 8);
  bufferPtr = buffer;
  WriteLongLE(&bufferPtr, riffSize);
  numWritten = fwrite(buffer, 1, sizeof(buffer), writer->fid);
  if (numWritten != sizeof(buffer))
    return -1;

  fclose(writer->fid);
  writer->fid = NULL;
  return writer->dataSize;
}
Exemplo n.º 2
0
void CEDPacket::WriteLongEDString(LPCTSTR psz, BOOL bUnicode)
{
	DWORD nLen;
	if ( bUnicode )
	{
		nLen = GetStringLenUTF8( psz );
		WriteLongLE( nLen );
		WriteStringUTF8( psz, FALSE );
	}
	else
	{
		nLen = GetStringLen( psz );
		WriteLongLE( nLen );
		WriteString( psz, FALSE );
	}
	ASSERT( nLen <= 0xFFFF );
}
Exemplo n.º 3
0
/*********************************************************************************
 * Open named file and write WAV header to the file.
 * The header includes the DATA chunk type and size.
 * Returns number of bytes written to file or negative error code.
 */
int Audio_WAV_OpenWriter(WAV_Writer *writer, const char *fileName, int frameRate, int samplesPerFrame) {
  unsigned int  bytesPerSecond;
    unsigned char header[WAV_HEADER_SIZE];
  unsigned char *addr = header;
    int numWritten;

    writer->dataSize = 0;
    writer->dataSizeOffset = 0;

    writer->fid = fopen(fileName, "wb");
    if (writer->fid == NULL) {
        return -1;
    }

/* Write RIFF header. */
  WriteChunkType(&addr, RIFF_ID);

/* Write RIFF size as zero for now. Will patch later. */
  WriteLongLE(&addr, 0);

/* Write WAVE form ID. */
  WriteChunkType(&addr, WAVE_ID);

/* Write format chunk based on AudioSample structure. */
  WriteChunkType(&addr, FMT_ID);
    WriteLongLE(&addr, 16);
    WriteShortLE(&addr, WAVE_FORMAT_PCM);
    bytesPerSecond = frameRate * samplesPerFrame * sizeof(int16_t);
  WriteShortLE(&addr, (int16_t) samplesPerFrame);
  WriteLongLE(&addr, frameRate);
  WriteLongLE(&addr,  bytesPerSecond);
  WriteShortLE(&addr, (int16_t) (samplesPerFrame * sizeof(int16_t))); /* bytesPerBlock */
  WriteShortLE(&addr, (int16_t) 16); /* bits per sample */

/* Write ID and size for 'data' chunk. */
  WriteChunkType(&addr, DATA_ID);
/* Save offset so we can patch it later. */
    writer->dataSizeOffset = static_cast<int>(addr - header);
  WriteLongLE(&addr, 0);

    numWritten = fwrite(header, 1, sizeof(header), writer->fid );
    if (numWritten != sizeof(header))
      return -1;

  return numWritten;
}