Skip to content

C++ vector synthesis wav file 数组合成wav语音文件 #28

Open
@Shellbye

Description

@Shellbye

所需数据在这里,参考了这个文档。

#include <iostream>
#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <fstream>

typedef signed short BitDepth; //	16bit audio
template <typename _Ty>
void write(std::ofstream &stream, const _Ty &ty)
{
    stream.write((const char *)&ty, sizeof(_Ty));
}
void writeWaveFile(const char *filename, BitDepth *buffer, size_t sz)
{
    const int samplerate = 16000;
    const int channels = 1;
    std::ofstream stream(filename, std::ios::binary);
    stream.write("RIFF", 4);
    write<int>(stream, 0); // todo
    stream.write("WAVEfmt ", 8);
    write<int>(stream, 16);
    write<short>(stream, 1);
    write<unsigned short>(stream, channels);
    write<int>(stream, samplerate);
    write<int>(stream, samplerate * channels * sizeof(BitDepth));
    write<short>(stream, channels * sizeof(BitDepth));
    write<short>(stream, sizeof(BitDepth) * 8);
    stream.write("data", 4);
    write<int>(stream, sz * sizeof(BitDepth));
    stream.write((const char *)&buffer[0], sz * sizeof(BitDepth));
    stream.close();
}
int main()
{
    std::vector<BitDepth> b;
    std::string line;
    std::ifstream myfile("wave_data.txt");
    if (myfile.is_open())
    {
        while (getline(myfile, line))
        {
            b.push_back(std::stof(line));
        }
        myfile.close();
    }
    writeWaveFile("./e2.wav", b.data(), b.size());
    return 0;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions