【QT】将处理后的音频文件保存到本地

目录

前言

一、MATLAB环境

二、QT环境

1.定义函数

2.调用函数

总结



前言

输出音频文件到本地常常基于MATLAB环境进行处理,且仅需一行代码就可以解决,最近准备将QT处理过后的音频文件输出到本地,通过查阅相关资料,问题得到解决。本文基于MATLAB和QT两种环境,对于如何将音频文件输出至本地路径进行详细介绍。

一、MATLAB环境

MATLAB环境下,仅需要audiowrite函数即可完成音频文件的输出,一行代码,非常简便。

//filename为保存文件的名字,如"audio.wav"
//y为需要保存的变量
//fs为采样率
audiowrite(filename,y,fs);

二、QT环境

1.定义函数

代码如下:

//形参分别为文件名、数据、采用率、数据点数
void write_audio(const char* filename, double* data, int sampleRate, int numSamples)
{
    FILE* file = fopen(filename, "wb");
    if (!file) {
        qDebug() << "Failed to open file for writing: " << filename;
        return;
    }
    int numChannels = 1; 
    int bitsPerSample = 16;
    int bytesPerSample = bitsPerSample / 8;
    int dataSize = numSamples * numChannels * bytesPerSample;
    int totalSize = dataSize + 44;
    fwrite("RIFF", 4, 1, file);
    fwrite(&totalSize, sizeof(int), 1, file);
    fwrite("WAVE", 4, 1, file);
    fwrite("fmt ", 4, 1, file);
    int fmtSize = 16;
    fwrite(&fmtSize, sizeof(int), 1, file);
    short audioFormat = 1;
    fwrite(&audioFormat, sizeof(short), 1, file);
    fwrite(&numChannels, sizeof(short), 1, file);
    fwrite(&sampleRate, sizeof(int), 1, file);
    int byteRate = sampleRate * numChannels * bytesPerSample;
    fwrite(&byteRate, sizeof(int), 1, file);
    short blockAlign = numChannels * bytesPerSample;
    fwrite(&blockAlign, sizeof(short), 1, file);
    fwrite(&bitsPerSample, sizeof(short), 1, file);
    fwrite("data", 4, 1, file);
    fwrite(&dataSize, sizeof(int), 1, file);
    for (int i = 0; i < numSamples; i++) {
        short sample = (short)(data[i] * 32767.0);
        fwrite(&sample, sizeof(short), 1, file);
    }
    fclose(file);
}

2.调用函数

代码如下:

QString filename = QFileDialog::getSaveFileName(this, "Save Audio File", "", "WAV file (*.wav)");
         if (filename.isEmpty()) {
             return;
          }
write_audio(filename.toStdString().c_str(), data, sampleRate, numSamples);


总结

通过上述方法,即可完成对于音频文件的输出,供诸位进行参考!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺碎冰冰!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值