`
duyouhua1214
  • 浏览: 236293 次
  • 性别: 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接口,使得开发者可以方便地创建出具备多媒体功能的应用。对于...

    qtserialport-opensource-src-5.4.2.tar

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

    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-everywhere-opensource-src-4.8.7.7z

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

    vs2017的qt插件qt-vsaddin-msvc2017-2.8.1-rev.06.vsix.rar

    《Visual Studio 2017中的Qt插件:qt-vsaddin-msvc2017-2.8.1-rev.06》 在软件开发领域,集成开发环境(IDE)如Microsoft的Visual Studio 2017为程序员提供了丰富的功能和便利。然而,对于使用Qt框架的开发者来说,...

    qttelnet-2.1_1

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

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

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

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

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

    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-material-widgets-master

    "qt-material-widgets-master" 是一个基于Qt框架的用户界面(UI)开发项目,它提供了Material Design风格的控件库。这个库使得Qt开发者能够轻松地在他们的应用中实现Google的Material Design设计规范,从而获得现代...

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

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

    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的文件格式,通过双击这些文件,用户...

    QT+eclipse插件qt-eclipse-integration-linux.x86_64-1.6.1 1.6.0等

    对于Windows用户,qt-eclipse-integration-win32-1.6.1.exe是一个可执行文件,用于在Windows环境下安装插件。这个.exe文件是一个标准的Windows安装程序,用户只需双击运行,然后按照安装向导的指示完成安装过程。 ...

Global site tag (gtag.js) - Google Analytics