Problems using rawWrite in an experiment with WAVs in D
tososdk
elcahivo at gmail.com
Wed Dec 27 20:20:23 UTC 2023
I was recreating some code from C++ to D:
```
import std.stdio;
import std.file;
import std.string;
import std.math;
struct WavHeader {
char[4] riff;
int flength;
char[4] wave;
char[4] fmt;
int chunk_size;
short format_tag;
short num_chans;
int sample_rate;
int bytes_per_second;
short bytes_per_sample;
short bits_per_sample;
char[4] data;
int dlength;
}
void main() {
WavHeader wahv;
wahv.riff[] = "RIFF".dup;
wahv.wave[] = "WAVE".dup;
wahv.fmt[] = "fmt ".dup;
wahv.data[] = "data".dup;
wahv.chunk_size = 16;
wahv.format_tag = 1;
wahv.num_chans = 1;
wahv.sample_rate = 8000;
wahv.bits_per_sample = 16;
wahv.bytes_per_sample = cast(short)((wahv.bits_per_sample /
8) * wahv.num_chans);
wahv.bytes_per_second = wahv.sample_rate *
wahv.bytes_per_sample;
const int duration_seconds = 10;
const int buffer_size = wahv.sample_rate * duration_seconds;
wahv.dlength = buffer_size * wahv.bytes_per_sample;
wahv.flength = wahv.dlength + 44;
short[] buffer = new short[buffer_size];
foreach (i; 0 .. buffer_size) {
buffer[i] = cast(short)(cos((2.0 * PI * 256.0 * i) /
wahv.sample_rate) * 1000);
}
// Corrected file handling
auto file = File("test.wav", "r");
file.rawWrite(wahv);
// Writing the audio data as raw bytes
file.rawWrite(cast(ubyte[])buffer);
file.close();
}
```
But since I am somewhat new to these topics and even more so to
Dlang, I don't understand very well. The problem occurs in the
creation of the .wav, regarding rawWrite, I'm not really sure
what to do in that specific part. Maybe I'm ignorant, but I'm not
very good at these topics, plus it's for experimentation.
More information about the Digitalmars-d-learn
mailing list