Qt播放amr文件

amr国际音频编解码实现源码(Qt工程) amr国际音频编码实现源码,非常完整,Qt4运行生成dll。已实践于商业项目。 立即下载

探索历程

  1. 使用QMediaPlayer播放,失败。 使用QAudioOutput播放,各种调参数,失败。
  2. 询问ChatGPT和NewBing和各种谷歌,最终结论是Qt无法直接播放amr,需要自己写解码器,然后用QMediaPlayer等播放,原地起飞的冲动。
  3. 根据GPT提示,开始研究opencore-amr三方,下载源码各种尝试,要自己make打包静态库。
  4. 折腾最后总算是将opencore-amr接入项目调用方法没有报错,继续查资料。
  5. 网上资料无法找到,直接在github中全局搜索相关代码进行筛选研究。
  6. github上没有找到Qt直接可以用的示例代码,继续网上研究和GPT与Bing轮番询问。
  7. 确认opencore-amr将amr转化为pcm进行播放方案,类比github上代码开始组装自己代码。
  8. amr到pcm代码处理完毕,不知道对不对,开始测试,声音无法正常播放,有声音却播放速度非常快,但不同amr文件音调不同,怀疑是逐帧播放问题。
  9. 继续github全局搜索,确认amr到wav方案,找到相关相似代码示例,模仿测试。
  10. 测试失败,Qt中fopen貌似有问题,开始网上查找,找到原因,最终播放成功。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextCodec>
#include <opencore-amrnb/interf_dec.h>
#include <stdio.h>
#include "opencore/wav.h"

const int sizes[] = { 12, 13, 15, 17, 19, 20, 26, 31, 5, 6, 5, 5, 0, 0, 0, 0 };

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    player = new QMediaPlayer();
}

MainWindow::~MainWindow()
{
    delete ui;

}

// 播放按钮点击
void MainWindow::on_play_clicked()
{

    QTextCodec *code = QTextCodec::codecForName("GB2312");
    std::string name = code->fromUnicode("E:/AmrTest/input.amr").data();

    // name需要处理一下
    FILE* in = fopen(name.c_str(), "rb");
    if (!in) {
        return;
    }
    char header[6];
    size_t n = fread(header, 1, 6, in);
    if (n != 6 || memcmp(header, "#!AMR\n", 6)) {
        fprintf(stderr, "Bad header\n");
        return;
    }

    // 本地文件路径
    QString fileName = "E:/AmrTest/output.wav";
    // 将wav放进了本地文件
    WavWriter wav(std::string(fileName.toLocal8Bit()).c_str(),8000,16,1);

    void* amr = Decoder_Interface_init();
    while (1) {
        uint8_t buffer[500];
        /* Read the mode byte */
        n = fread(buffer, 1, 1, in);
        if (n <= 0)
            break;
        /* Find the packet size */
        int size = sizes[(buffer[0] >> 3) & 0x0f];
        if (size <= 0)
            continue;
        n = fread(buffer + 1, 1, size, in);
        if (n != size)
            break;
        /* Decode the packet */
        int16_t outbuffer[160];
        Decoder_Interface_Decode(amr, buffer, outbuffer, 0);
        /* Convert to little endian and write to wav */
        uint8_t littleendian[320];
        uint8_t* ptr = littleendian;
        for (int i = 0; i < 160; i++) {
            *ptr++ = (outbuffer[i] >> 0) & 0xff;
            *ptr++ = (outbuffer[i] >> 8) & 0xff;
        }

        wav.writeData(littleendian, 320);
    }
    fclose(in);
    Decoder_Interface_exit(amr);

    player->setMedia(QUrl(fileName));
    player->play();
}

代码位置:https://github.com/anchoriteFili/AmrTest

基于QT开发的ARM/windows平台下的视频播放器 现在官方设定的最低分是2分,无奈无奈。 windows平台和arm开发板都能使用,注意源文件中的宏定义。 立即下载

相关推荐

qt 基于QAudioRecorder实现的录音以及基于QMediaPlayer实现的录音播放,使用ffmpeg解析音频并且带音频波形图实现

1.此工具是qt 基于QAudioRecorder实现的录音以及基于QMediaPlayer实现的录音播放,使用ffmpeg解析音频并且带音频波形图实现,可根据需要选择输入、输出音频设备,音频文件格式、音频编码格式、音频频率以及音频通道数。 2.目前音频文件时保存为wav格式的,编解器使用的是PCM,可根据需要选择不同的音频格式和编解码器,目前还未支持压缩音频。播放音频使用的QMediaPlayer,解码音频使用ffmpeg,工具里面包含ffmpeg第三方库。 3.播放端实现音频波形图,目前只支持一个音频通道和两个音频通道的波形图,都是64位的,在windows和linux下都测试可用。

QT arm播放音频

void SetEquiptestQualityVoice::on_tableWidget_voice_itemDoubleClicked(QTableWidgetItem *item) { QString soundaddr = item->text(); QString soundpathtemp = currpath + soundaddr; SoundPla...

qq_21342281的博客 984

QT播放pcm音频文件(自带音频文件,可直接运行)

使用QT播放PCM音频文件的实例,其中带有音频文件,可直接编译运行播放音频。 《大王派我来巡山》

【QT】ubuntu交叉编译Qt程序

问题交流请联系-》群名:IT项目交流群 群号:245022761 一、准备 1、ubuntu16.04 --64 位 2、交叉编译工具 arm-linux-gnueabi-5.4.0.tar.xz 3、arm版本Qt Qt-Embedded-5.7.0.tar.xz 工 具 下 载 地 址 :https://download.youkuaiyun.com/downloa...

Jason的技术探索与分享 3170

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

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

基于AMR6818的车载系统,功能有天气预报、视频播放、音乐播放、计时器,编辑环境及语言:Qt和C++.zip

使用QT开发的完整项目算法源码,可用于毕业设计、课程设计、练手学习等

QT实例之十四(qmediaplayer)

浮华若水 1537

(Touch™)搭建 Windows 开发环境

> OpenHaptics 开发包参考文档。

置心一处,便无事不办 1500

web页面如何播放amr的音频文件

这个需求由来已久,公司的语音订单很多,每次客服都是从服务器down下语音来听。很不方便。。于是我就上网扒拉看有么有什么web播放器能播放amr格式的音频文件,amr百度百科 总之找了很久。,,然后发现苹果的QuickTime Player 播放器能播放。。 具体步骤如下: 1.下载QuickTime Player 2.在服务器端需要添加web服务器的mime.type支持就是在Apache...

weixin_33836223的博客 2736

应广单片机 按键点灯 PMS171B GPIO LED

我也是第一次使用这款单片机,参考网友的资料,写个最近简单的demo 测试用例 #include "extern.h" /*端口定义*/ BIT KEY : PA.0; BIT SW : PA.4; /*相应于main函数*/ void FPPA0 (void) { /*单片机内部RC震动时钟为 IHRC默认为16M,因此,IHRC/2=8M,系统时钟为8M*/ .ADJUST_IC...

大江的专栏 1000

# 芯片良率是怎么算出来的?——从泊松到负二项分布,一个芯片测试工程师的视角

- 良率=好Die/总Die,但选错模型可能差17个百分点 - Poisson模型过于悲观,Murphy居中,**Negative Binomial才是业界标配** - 关键不是良率数字,是**跟踪聚类因子α的变化**——它能早几周预警工艺漂移 - Chiplet时代,10颗90%良率的Die封在一起,整体良率只有35%

Freezeblur的博客 650

h5页面播放 .amr格式音频方法

h5页面播放 .amr格式音频方法 下载安装插件QuickTime Player 使用下面代码播放,注意要使用IE浏览器!!!! <embed name="plugin" src="https://xxx.amr" type="audio/amr" id="QT_EMB" autostart=false height=50 width=150> 效果: ...

放任时光飞逝的博客 1359

若依RuoYi文件上传漏洞实战:如何安全配置/profile/upload路径(附避坑指南)

本文深入解析若依RuoYi框架中/profile/upload路径的文件上传漏洞,提供详细的安全配置方案和实战指南。通过权限修正、输入验证强化和存储隔离等多层防御策略,有效防范未授权访问和恶意文件上传风险,保障系统安全。

pink的博客 778

SILK SDK + Qt 将QQ/微信的 silk/amr 音频转为 wav 格式

参考示例:SILK_SDK_SRC_v1.0.9\SILK_SDK_SRC_ARM_v1.0.9\test\Decoder.c 参考博客(转载):Android 多媒体之 Silk 格式音频解码_weixin_34292924的博客-优快云博客 别人做的decoder:kn007/silk-v3-decoder: [Skype Silk Codec SDK]Decode silk v3 audio files (like wechat amr, aud files, qq slk files) and

龚建波 4823

VS2022下OSG+OSGEARTH开发环境一键配置指南(Win10 x64+CMake自动化构建)

本文详细介绍了在VS2022环境下配置OSG和OSGEARTH开发环境的完整指南,包括软件下载、CMake自动化构建、编译实战及环境验证。通过一键配置脚本和常见问题解决方案,帮助开发者快速搭建3D开发环境,提升开发效率。

weixin_28828243的博客 405

PCL Trimmed ICP实现点云精配准【2025最新版】

博客长期更新,本文最新更新时间为:2025年6月25日。抄袭狗记得来抄最新代码哦,抄都抄成错的,不够丢人钱。

点云侠的博客 37万+

qt如何将amr转mp3_如何使用微信转播软件将微信语音导出为可播放的mp3格式?

微信应用越来越广泛了,每个人都有很多各种各样的群,群里的消息也五花八门,但是不乏一些搞笑的语音或者重要的语音信息,图片、视频我们可以保存在手机,但是语音能保存在手机里吗?答案是肯定的!今天我就来教大家,如何使用非凡直播将微信语音转换为可播放的MP3格式,并保存在手机里。手机上下载一个叫“非凡直播”的安卓APP,下载后安装好就可以使用。登录微信,长按语音多选,选择需要保存的语音,点击下方的+课安装好...

weixin_39765290的博客 479

DSPy 入门: 再见提示,你好编程

DSPy("Declarative Self-improving Language Programs (in Python)",发音为 "dee-es-pie")[1] 是斯坦福大学 NLP 研究人员开发的 "基础模型编程 "框架。它强调编程而非提示,并将构建基于 LM 的管道从操作提示转向编程。因此,它旨在解决构建基于 LM 应用程序时的脆弱性问题。DSPy 还将程序的信息流与每一步的参数(提示和 LM 权重)分离开来,为构建基于 LM 的应用程序提供了更系统的方法。

具身机器人和通用AI 3484

qt如何将amr转mp3_如何解决播放FLV视频卡住不动?试试FFmpeg将FLV转MP4

最近在下载直播视频时,大器发现下载的视频是FLV格式,在快进或者拖动播放进度条时,视频图像会卡住不动很长时间,极大影响观看体验。解决FLV播放问题的方法是将FLV转换为大部分设备都支持的MP4格式。虽然本文是以FLV转MP4为例,但同样适用于其他类型视频文件的转换,包括WebM、AVI和WMV。编码简介FLV格式发布于2002年,一经推出便迅速成为了网页默认的视频格式,是第一个在互联网上被广泛使用...

weixin_39806818的博客 552

2026华为OD机试(C++)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,C++实现。

MISAYAONE的博客 20万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ffmpeg 去掉amr 噪音

分析了下,amr音频采样编码为AV_SAMPLE_FMT_FLT,而MP3音频文件采样编码为AV_SAMPLE_FMT_S16P 网上查了下,说是要用swr_convert函数转换,但是转换了还是不对。请高手给看看啊 代码如下: C/C++ code? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Miracle_包子 5081

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

qt如何将amr转mp3_荔枝作品如何转MP3

许多学习朗诵的诵友,经常会遇到把荔枝作品转为MP3格式。有些诵友不知道怎么操作,现在给大家介绍一下:手机系统分为安卓和苹果。安卓系统操作如下:(两种情况)一是别人的如果是别人的,在手机荔枝中先找到他的昵称,1.在荔枝FM打开试听,然后点击“↓”下载2.关闭荔枝后,在你的手机界面找“实用工具”→文件管理3、点开“文件管理”→“内部存储”→183→LiZhiFM(荔枝,频率)→Files(文...

weixin_39707693的博客 997

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

3款好用的多媒体播放器

来自韩国的影音全能播放器,与Mplayer一样从linux平台移植...

weixin_30606669的博客 235

百行代码实现VLC简易视频播放器【VLC环境配置过程+可执行源码注释完整】

本篇博客介绍了VLC的相关概念、函数和详细的VLC环境配置过程,最后还提供了百行代码实现的一个简易视频播放器源码,走过路过别错过呀

Jacksqh的博客 3254

Linux学习路线之linux的amr开发学习方法

学习步骤如下: 1、Linux 基础 安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命令 认识Linux系统的常用服务安装Linux操作系统 Linux基本命令实践 设置Linux环境变量 定制Linux的服务 Shell 编程基础使用vi编辑文件 使

phthalates的专栏 1771
上一篇: setNetworkAccessible作用
下一篇: QSystemTrayIcon使用,dock和工具栏上icon点击
瓦怕落地
博客等级 码龄11年 16粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值