CODE:
void diywt::writeWavFile(const std::string& filename) {realSize = m_maxWrite;sdkTraceInt(realSize);sdkTraceInt(m_lastMarkerNumber);// Structures pour les en-têtesstruct RiffHeader {char chunkId[4] = { 'R', 'I', 'F', 'F' };uint32_t chunkSize;char format[4] = { 'W', 'A', 'V', 'E' };};struct FmtChunk {char chunkId[4] = { 'f', 'm', 't', ' ' };uint32_t chunkSize = 16;uint16_t audioFormat = 3; // 32-bit floatuint16_t numChannels;uint32_t sampleRate;uint32_t byteRate;uint16_t blockAlign;uint16_t bitsPerSample;};struct DataChunk {char chunkId[4] = { 'd', 'a', 't', 'a' };uint32_t chunkSize;};std::ofstream outFile(filename, std::ios::binary);if (!outFile) {sdkTraceErrorChar("can't open file");return;}// Paramètres audioint numChannels = 1;int bitsPerSample = 32;int numSamples = m_markersStart[m_lastMarkerNumber];//realSize;// Calculer la taille des données audiouint32_t dataSize = numSamples * numChannels * bitsPerSample / 8;// Remplir les en-têtesRiffHeader riffHeader;FmtChunk fmtChunk;fmtChunk.numChannels = numChannels;fmtChunk.sampleRate = sdkGetSampleRate();fmtChunk.byteRate = fmtChunk.sampleRate * numChannels * bitsPerSample / 8;fmtChunk.blockAlign = numChannels * bitsPerSample / 8;fmtChunk.bitsPerSample = bitsPerSample;DataChunk dataChunk;dataChunk.chunkSize = dataSize;// Calculer la taille totale du fichieruint32_t totalFileSize = sizeof(RiffHeader) + sizeof(FmtChunk) + sizeof(DataChunk) + dataSize;// +sizeof(CueChunk) + cueChunkSize + sizeof(AdtlChunk) + adtlChunkSize;riffHeader.chunkSize = totalFileSize - 8; // Soustraire les 8 octets du chunkId et du chunkSize// Écrire les en-têtes dans le fichieroutFile.write(reinterpret_cast<char*>(&riffHeader), sizeof(RiffHeader));outFile.write(reinterpret_cast<char*>(&fmtChunk), sizeof(FmtChunk));outFile.write(reinterpret_cast<char*>(&dataChunk), sizeof(DataChunk));// Écrire les données audiofor (f = 0; f < numSamples; ++f) {outFile.write(reinterpret_cast<const char*>(&m_audioBuffer[f]), sizeof(float));}// Ajouter un padding si nécessaire pour aligner le chunk suivant sur un nombre pair d'octetsif (dataSize % 2 != 0) {outFile.put(0);}outFile.close();/*//mettre à jour la sortie markerOutint tempSize = m_lastMarkerNumber;markersOut.setSize(tempSize);for (int m = 0; m < tempSize; m++) {markersOut.setArrayData(m, float(m_markersStart[m])/float(numSamples));}*/if (!outFile) {sdkTraceErrorChar("Error closing file");return;}std::string s = fdrFileName.getPChar();s = s + " successfully created";sdkTraceChar(s.c_str());m_signalisation = 2;}Statistics: Posted by oli_lab — 21 Apr 2026, 19:41
Statistics: Posted by sm_jamieson — 21 Apr 2026, 19:06

Statistics: Posted by oli_lab — 21 Apr 2026, 17:29
Statistics: Posted by sm_jamieson — 21 Apr 2026, 10:46
CODE:
void diywt::writeWavFile(const std::string& filename) {realSize = m_maxWrite;sdkTraceInt(realSize);sdkTraceInt(m_lastMarkerNumber);// Structures pour les en-têtesstruct RiffHeader {char chunkId[4] = { 'R', 'I', 'F', 'F' };uint32_t chunkSize;char format[4] = { 'W', 'A', 'V', 'E' };};struct FmtChunk {char chunkId[4] = { 'f', 'm', 't', ' ' };uint32_t chunkSize = 16;uint16_t audioFormat = 3; // 32-bit floatuint16_t numChannels;uint32_t sampleRate;uint32_t byteRate;uint16_t blockAlign;uint16_t bitsPerSample;};struct DataChunk {char chunkId[4] = { 'd', 'a', 't', 'a' };uint32_t chunkSize;};std::ofstream outFile(filename, std::ios::binary);if (!outFile) {sdkTraceErrorChar("can't open file");return;}// Paramètres audioint numChannels = 1;int bitsPerSample = 32;int numSamples = m_markersStart[m_lastMarkerNumber];//realSize;// Calculer la taille des données audiouint32_t dataSize = numSamples * numChannels * bitsPerSample / 8;// Remplir les en-têtesRiffHeader riffHeader;FmtChunk fmtChunk;fmtChunk.numChannels = numChannels;fmtChunk.sampleRate = sdkGetSampleRate();fmtChunk.byteRate = fmtChunk.sampleRate * numChannels * bitsPerSample / 8;fmtChunk.blockAlign = numChannels * bitsPerSample / 8;fmtChunk.bitsPerSample = bitsPerSample;DataChunk dataChunk;dataChunk.chunkSize = dataSize;// Calculer la taille totale du fichieruint32_t totalFileSize = sizeof(RiffHeader) + sizeof(FmtChunk) + sizeof(DataChunk) + dataSize;// +sizeof(CueChunk) + cueChunkSize + sizeof(AdtlChunk) + adtlChunkSize;riffHeader.chunkSize = totalFileSize - 8; // Soustraire les 8 octets du chunkId et du chunkSize// Écrire les en-têtes dans le fichieroutFile.write(reinterpret_cast<char*>(&riffHeader), sizeof(RiffHeader));outFile.write(reinterpret_cast<char*>(&fmtChunk), sizeof(FmtChunk));outFile.write(reinterpret_cast<char*>(&dataChunk), sizeof(DataChunk));// Écrire les données audiofor (f = 0; f < numSamples; ++f) {outFile.write(reinterpret_cast<const char*>(&m_audioBuffer[f]), sizeof(float));}// Ajouter un padding si nécessaire pour aligner le chunk suivant sur un nombre pair d'octetsif (dataSize % 2 != 0) {outFile.put(0);}outFile.close();/*//mettre à jour la sortie markerOutint tempSize = m_lastMarkerNumber;markersOut.setSize(tempSize);for (int m = 0; m < tempSize; m++) {markersOut.setArrayData(m, float(m_markersStart[m])/float(numSamples));}*/if (!outFile) {sdkTraceErrorChar("Error closing file");return;}std::string s = fdrFileName.getPChar();s = s + " successfully created";sdkTraceChar(s.c_str());m_signalisation = 2;}Statistics: Posted by oli_lab — 21 Apr 2026, 19:41
Statistics: Posted by sm_jamieson — 21 Apr 2026, 19:06

Statistics: Posted by oli_lab — 21 Apr 2026, 17:29
Statistics: Posted by sm_jamieson — 21 Apr 2026, 10:46