2022-11-30 07:59:38 +00:00
|
|
|
import wavefile from 'wavefile';
|
|
|
|
let WaveFile = wavefile.WaveFile;
|
|
|
|
|
|
|
|
import {
|
|
|
|
readFileSync,
|
|
|
|
writeFileSync
|
|
|
|
} from 'fs';
|
|
|
|
|
|
|
|
function byte2byte(arr) {
|
|
|
|
let lines = [];
|
|
|
|
for (let i=0; i < arr.length; i++) {
|
|
|
|
lines.push(`.byte ${arr[i]}`);
|
|
|
|
}
|
|
|
|
return lines.join('\n');
|
|
|
|
}
|
|
|
|
|
|
|
|
function to4bit(val8) {
|
2022-11-30 12:01:55 +00:00
|
|
|
let val = (val8 + 7) >> 4;
|
2022-11-30 07:59:38 +00:00
|
|
|
if (val > 15) {
|
|
|
|
return 15;
|
|
|
|
}
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
|
|
|
function pack(audio) {
|
|
|
|
let packed = [];
|
|
|
|
for (let i = 0; i < audio.length; i += 2) {
|
2022-12-08 00:12:15 +00:00
|
|
|
// little-endian 4-bit samples
|
2022-11-30 07:59:38 +00:00
|
|
|
let low = to4bit(audio[i]);
|
|
|
|
let high = to4bit(audio[i + 1]);
|
|
|
|
let byte = low | (high << 4);
|
|
|
|
packed.push(byte);
|
|
|
|
}
|
2022-12-08 00:12:15 +00:00
|
|
|
/*
|
|
|
|
// raw push bytes
|
2022-11-30 12:01:55 +00:00
|
|
|
for (let i = 0; i < audio.length; i += 2) {
|
|
|
|
let val = to4bit(audio[i]);
|
|
|
|
let byte = val | 0x10;
|
|
|
|
packed.push(byte);
|
|
|
|
}
|
2022-12-08 00:12:15 +00:00
|
|
|
*/
|
2022-11-30 07:59:38 +00:00
|
|
|
return packed;
|
|
|
|
}
|
|
|
|
|
|
|
|
function audio2assembly(audio) {
|
|
|
|
return `.data
|
|
|
|
.export audio_samples
|
|
|
|
.export audio_samples_end
|
|
|
|
|
|
|
|
audio_samples:
|
|
|
|
${byte2byte(pack(audio))}
|
|
|
|
audio_samples_end:
|
|
|
|
|
|
|
|
`;
|
|
|
|
}
|
|
|
|
|
|
|
|
function wav2assembly(buffer) {
|
|
|
|
let wav = new WaveFile(buffer);
|
|
|
|
let samples = wav.getSamples();
|
|
|
|
return audio2assembly(samples);
|
|
|
|
}
|
|
|
|
|
|
|
|
let infile = process.argv[2];
|
|
|
|
let outfile = process.argv[3];
|
|
|
|
|
|
|
|
let buffer = readFileSync(infile);
|
|
|
|
let asm = wav2assembly(buffer);
|
|
|
|
writeFileSync(outfile, asm, 'utf-8');
|
|
|
|
|