`
duyouhua1214
  • 浏览: 238340 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

qt录音--raw(pcm)文件转换wav文件

    博客分类:
  • QT
 
阅读更多
Qt录音需要用到#include <QtMultimedia/QAudioInput>
void ***::***()
{
    QFile inputFile;
    QAudioInput *audioInput;
    inputFile.setFileName("a.raw");
    inputFile.open(QIODevice::WriteOnly | QIODevice::Truncate);
    QAudioFormat format;
    format.setSampleRate(8000);
    format.setChannels(2);
    format.setSampleSize(16);
    format.setCodec("audio/pcm");
    format.setByteOrder(QAudioFormat::LittleEndian);
    format.setSampleType(QAudioFormat::SignedInt);
    QAudioDeviceInfo info(QAudioDeviceInfo::defaultInputDevice());
    if (!info.isFormatSupported(format))
    {
        qWarning() << "default format not supported try to use nearest";
        format = info.nearestFormat(format);
    }
    audioInput = new QAudioInput(format, this);
    QTimer::singleShot(10000, this, SLOT(stopRecording()));
    audioInput->start(&inputFile);
    qDebug() << "record begin!";
}
void ***::stopRecording()
{
    audioInput->stop();
    inputFile.close();
    delete audioInput;
    qDebug() << "record end!";
}
然后播放的时候,可以把raw文件加个文件头,变成wav文件
typedef struct
{
    char fccID[4]; //"RIFF"
    unsigned long dwSize;//length-8
    char fccType[4]; //"WAVE"
}HEADER;
typedef struct
{
    char fccID[4]; //"fmt "
    unsigned long dwSize; //16
    unsigned short wFormatTag; //1
    unsigned short wChannels; //1 or 2
    unsigned long dwSamplesPerSec; //44100
    unsigned long dwAvgBytesPerSec; //
    unsigned short wBlockAlign; //声道数*量化数/8
    unsigned short uiBitsPerSample; //量化数 8 or 16
}FMT;
typedef struct
{
    char fccID[4]; //"data"
    unsigned long dwSize; //length-44
}DATA;

//转换文件为wav
HEADER pcmHEADER;
FMT pcmFMT;
DATA pcmDATA;
unsigned long m_pcmData;
FILE *fp, *fpCopy;
fp = fopen("a.raw", "rb");
fpCopy = fopen("a.wav", "wb+");
if(!fp)
{
    qDebug() << "open pcm file error";
    return;
}
if(!fpCopy)
{
    qDebug() << "create wave file error";
    return;
}
qstrcpy(pcmHEADER.fccID, "RIFF");
qstrcpy(pcmHEADER.fccType, "WAVE");
fseek(fpCopy, sizeof(HEADER), 1);
pcmFMT.dwSamplesPerSec = 8000;
pcmFMT.dwAvgBytesPerSec = pcmFMT.dwSamplesPerSec*sizeof(m_pcmData);
pcmFMT.uiBitsPerSample = 16;
qstrcpy(pcmFMT.fccID, "fmt ");
pcmFMT.dwSize = 16;
pcmFMT.wBlockAlign = 4;
pcmFMT.wChannels = 2;
pcmFMT.wFormatTag = 1;
fwrite(&pcmFMT, sizeof(FMT), 1, fpCopy);
qstrcpy(pcmDATA.fccID, "data");
pcmDATA.dwSize = 0;
fseek(fpCopy, sizeof(DATA), 1);
fread(&m_pcmData, sizeof(unsigned long), 1, fp);
while(!feof(fp))
{
    pcmDATA.dwSize += 4; //计算数据的长度;每读入一个数据,长度就加一;
    fwrite(&m_pcmData, sizeof(unsigned long), 1, fpCopy); //将数据写入.wav文件;
    fread(&m_pcmData, sizeof(unsigned long), 1, fp); //从.pcm中读入数据
}
fclose(fp);
pcmHEADER.dwSize = 44+pcmDATA.dwSize-8; //根据pcmDATA.dwsize得出pcmHEADER.dwsize的值
rewind(fpCopy); //将fpCpy变为.wav的头,以便于写入HEADER和DATA;
fwrite(&pcmHEADER, sizeof(HEADER), 1, fpCopy); //写入HEADER
fseek(fpCopy, sizeof(FMT), 1);  //跳过FMT,因为FMT已经写入
fwrite(&pcmDATA, sizeof(DATA), 1, fpCopy);   //写入DATA;
fclose(fpCopy)
分享到:
评论

相关推荐

    Qt之实现录音播放及raw(pcm)转wav格式

    整个程序实现了一个录音机功能,QAudioInput生成的raw文件不能直接用播放器播放,这里将生成的.raw文件转成wav格式的音频文件。这样既可用QAudioOutput来播放,又可以用播放器来播放,详情见 ...

    基于QT开发的录音播放小工具-可以实现raw转wav

    在本项目中,开发者利用QT库创建了一个录音播放小工具,该工具不仅能够进行音频录制,还支持将原始(raw)音频数据转换为WAV格式的音频文件。以下是关于这个工具涉及到的主要知识点的详细解释: 1. **QAudioInput**...

    QT实现wav音频文件读写

    本话题将重点讨论如何使用QT实现PCM(脉冲编码调制)与WAV音频文件的相互转换,以及如何读取和写入WAV音频格式。 首先,WAV是一种无损音频文件格式,它保存原始音频数据,包括采样率、位深度和声道数等信息。在QT中...

    Qt qt-opensource-windows-x86-5.11.0安装包

    Qt qt-opensource-windows-x86-5.11.0安装包,适用于开发openCV、QtAndroid

    qtcreator-gdb-7.4-MINGW32_NT-6.1-i686

    通常,安装或更新Qt Creator的GDB调试器时,会包含可执行文件、库文件、配置文件等一系列组件,它们将被放置到Qt Creator的相应目录下,以便IDE能够识别和使用这个调试器。 综上所述,这个压缩包提供了适用于...

    Qt实现录音功能并声称wav格式文件

    在本文中,我们将深入探讨如何使用Qt框架来实现录音功能,并将录制的音频保存为WAV格式的文件。Qt是一个跨平台的应用程序开发框架,它提供了丰富的API接口,使得开发者可以方便地创建出具备多媒体功能的应用。对于...

    QT qt-opensource-linux-x64-5.7.1.zip

    这将得到`qt-opensource-linux-x64-5.7.1.run`这个可执行文件。 2. **赋予执行权限**:由于Linux的安全性机制,你需要赋予该文件执行权限才能运行。在终端中,使用`chmod`命令: ``` chmod +x qt-opensource-...

    qtserialport-opensource-src-5.4.2.tar

    这个压缩包包含了用于编译和使用Qt Serial Port的所有必要文件。 首先,让我们深入理解Qt Serial Port的核心功能。它提供了一个全面的API,使得开发者能够轻松地进行串行通信操作,如打开、关闭、设置波特率、数据...

    qt-everywhere-opensource-src-4.8.7.7z

    "qt-everywhere-opensource-src-4.8.7.7z" 是一个包含QT库开源源代码的压缩文件,版本为4.8.7,格式为7z。这个版本可能在发布时是最稳定和广泛使用的,对于学习、研究或者定制QT库的开发者来说非常有价值。 首先,...

    eclipse 集成 qtjambi插件(qtjambi-eclipse-integration-4.5.2_01)

    QtJambi将C++的Qt库转换为Java语言,使得Java开发者可以无缝地使用Qt的API,包括窗口系统、图形渲染、网络通信、数据库访问等功能。 这个插件"qtjambi-eclipse-integration-4.5.2_01"是针对QtJambi 4.5.2版本的,...

    QT-in-windows.zip_HTTP_QT5_Qt http下载文件_Qt5.2.1_qt http

    下载文件:qt-opensource-windows-x86-mingw48_opengl-5.2.1.exe并安装D:\Qt\Qt5.2.1 这个版本一般已经包含工具qt-creator和mingw32-make 若不含有,可以去下载IDE : ----打开网页:...

    Qt 5.0.2及qt-vs-addin-1.2.1之Visual Studio 2012配置小结

    在本文中,我们将详细探讨如何在Windows 7 x64系统上配置Qt 5.0.2和qt-vs-addin-1.2.1,以便在Visual Studio 2012环境下进行Qt开发。首先,确保您已安装了Visual Studio 2012。 第一步是下载Qt的相关软件。您可以从...

    qttelnet-2.1_1

    2. **构建脚本**:为了编译源代码,压缩包可能包含Makefile或其他构建系统(如qmake或CMake)的配置文件,这些文件指示如何将源代码转换为可执行程序。 3. **资源文件**:可能包含图标、图片、配置文件等,这些都是...

    qt-vsaddin-msvc2015-2.7.2-rev.02

    【压缩包子文件的文件名称列表】中的 "qt-vsaddin-msvc2015-2.7.2-rev.02.vsix" 是安装文件,这是一种Visual Studio扩展的打包格式。VSIX(Visual Studio Extension)文件可以被Visual Studio识别并安装,将Qt VS ...

    Qt安装配置文件(Qt Linux-x64-5.3.2安装).原创

    解压后会得到一个名为"qt-opensource-linux-x64-android-5.3.2.run"的可执行文件。这个文件实际上是一个安装程序,需要通过"chmod 777"命令再次修改其权限,然后在命令行中执行它以启动安装过程。 安装程序启动后,...

    qt6在线安装文件:qt-unified-windows-x64-online 向下兼容

    qt6在线安装文件:qt-unified-windows-x64-online 向下兼容

    QT5.14.2-MQTT库文件

    QT5.14.2-MQTT库文件是基于Qt框架的一个特定版本,即5.14.2,集成MQTT(Message Queuing Telemetry Transport)协议的库。MQTT是一种轻量级的发布/订阅消息传输协议,常用于物联网(IoT)设备之间的通信,因为它具有...

    qt-solutions-qt-solutions

    http://qt.nokia.com/products/qt-addons/solutions-archive/ 有JPEG2000的,有Windows中Services的,有浏览器插件的,有单应用程序的,有SOAP的,有文件加锁操作的,有属性操作的。 如果你比较节俭资源分,那么也...

    qt-vsaddin-msvc2015-2017-2.2.0

    文件`qt-vsaddin-msvc2017-2.2.0.vsix`和`qt-vsaddin-msvc2015-2.2.0.vsix`是VS插件的安装文件,它们分别对应于Visual Studio 2017和2015的版本。VSIX是Visual Studio Extension的文件格式,通过双击这些文件,用户...

    Kylin-Desktop-V10-GFB-Release-020-ARM64 编译完成QT5.13.1-Lenovo版本

    1、把qt5.13.1lenovo.tar.gz文件复制到系统根目录opt下给予权限 2、解压:sudo tar -xvf qt5.13.1lenovo.tar.gz 3、打开QT Creator - 工具 - Kits - Qt Vsersions 4、选择添加 文件系统opt/qt5.13.1/bin/qmake 确定 ...

Global site tag (gtag.js) - Google Analytics