VC播放mp3的方法
1、使用msi库
#include <mmsystem.h> #pragma comment(lib,"winmm.lib") .......//打开文件MCI_OPEN_PARMS mciOpen; mciOpen.lpstrDeviceType = _T("mpegvideo"); mciOpen.lpstrElementName = _T("c://1.mp3"); MCIERROR mciError = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen); if(mciError) { TCHAR buf[128]={0}; mciGetErrorString(mciError, buf, 128); printf("%s/n",buf); } //播放(异步)UINT DeviceID = mciOpen.wDeviceID ; MCI_PLAY_PARMS mciPlay; mciError = mciSendCommand(DeviceID, MCI_PLAY, 0 , (DWORD)&mciPlay);if(mciError) { printf("send MCI_PLAY command failed/n"); } //暂停//mciSendCommand(DeviceID, MCI_PAUSE, 0 , (DWORD)&mciPlay);//停止mciSendCommand(DeviceID, MCI_STOP, NULL , NULL);mciSendCommand(DeviceID, MCI_SEEK, MCI_SEEK_TO_START , NULL);//关闭//mciSendCommand(DeviceID, MCI_CLOSE, 0 , (DWORD)&mciPlay);//获得播放进度,仅为示例代码//MCI_STATUS_PARMS mciStatusParms;//mciStatusParms.dwItem=MCI_STATUS_POSITION; //mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);//关键,取得位置//int m_dPosition=mciStatusParms.dwReturn;//获得整个音频的时间长度,仅为示例代码//UINT DeviceID = mciOpen.wDeviceID ;//mciStatusParms.dwItem=MCI_STATUS_LENGTH; //mciSendCommand(DeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);//关键,取得长度// m_dLength=mciStatusParms.dwReturn;//在指定位置播放,仅为示例代码//MCI_PLAY_PARMS mciPlay;//mciPlay.dwFrom=m_dPosition;//mciError = mciSendCommand(m_wDeviceID,MCI_PLAY,MCI_FROM,(DWORD)&mciPlay);//控制音量,仅为示例代码//MCI_DGV_SETAUDIO_PARMS mciSetAudioPara; //mciSetAudioPara.dwItem = MCI_DGV_SETAUDIO_VOLUME; //mciSetAudioPara.dwValue = atoi(m_Volume.GetBuffer(m_Volume.GetLength()));//here is the value of the Volume(0--1000) //mciSendCommand(m_wDeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, (DWORD)(LPVOID)&mciSetAudioPara);
2、使用vfw库
#include <vfw.h>#pragma comment(lib,"vfw32.lib").......//打开文件CString filename = _T("c://1.mp3");HWND hwnd = MCIWndCreate(m_hWnd,NULL,MCIWNDF_NOPLAYBAR,filename);::ShowWindow(hwnd,SW_HIDE);//设置音量MCIWndSetVolume(hwnd,1000);//播放(异步)MCIWndPlay(hwnd);//关闭//MCIWndClose(hwnd);
3、使用DirectShow
#include <dshow.h>#pragma comment(lib,"strmiids.lib").......IGraphBuilder* pGBuilder; IMediaControl* pMControl; IMediaPosition* pMPos; IMediaEvent* pMEvent; CoInitialize(NULL); //初始化COM CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder,(void**)&pGBuilder); pGBuilder->QueryInterface(IID_IMediaControl,(void**)&pMControl); pGBuilder->QueryInterface(IID_IMediaEvent,(void**)&pMEvent); pGBuilder->QueryInterface(IID_IMediaPosition,(void**)&pMPos);pGBuilder->RenderFile(L"C://1.mp3", NULL); //调入文件 //播放MP3文件 pMPos->put_CurrentPosition(0); //移动到文件头 pMControl->Run(); //播放(异步) // 停止播放和释放对象 /*pMControl->Stop(); //停止播放 pMControl->Release();pMControl=NULL;pMEvent->Release();pMEvent=NULL;pMPos->Release();pMPos=NULL;pGBuilder->Release();pGBuilder=NULL;CoUninitialize(); //释放COM */
这三种试唯一的问题是的播放有些MP3失败例如网易云音乐上下载的MP3无法播放。
相关文章:
VC播放mp3的方法
1、使用msi库 #include <mmsystem.h> #pragma comment(lib,"winmm.lib") .......//打开文件MCI_OPEN_PARMS mciOpen; mciOpen.lpstrDeviceType _T("mpegvideo"); mciOpen.lpstrElementName _T("c://1.mp3"); MCIERROR mciError mci…...
Docker 部署 verdaccio 搭建 npm 私服
一、镜像获取 # 获取 verdaccio 镜像 docker pull verdaccio/verdaccio 二、修改配置文件 cd /wwwroot/opt/docker/verdaccio/conf vim config.yaml config.yaml 配置文件如下,可以根据自己的需要进行修改 # # This is the default configuration file. It all…...
49-拓展(1)
49-拓展(1) 扩展概述 扩展可以为在当前 package 可见的类型(除函数、元组、接口)添加新功能。 当不能破坏被扩展类型的封装性,但希望添加额外的功能时,可以使用扩展。 可以添加的功能包括: …...

国产编辑器EverEdit - 在文件中查找和替换
1 在文件中查找和替换 1.1 应用场景 某些场景,用户需要在所有工程文件中进行查找和替换关键词,比如:查找工程中哪些文件使用了某个常量。 1.2 使用方法 选择主菜单查找 -> 在文件中查找和替换,或使用快捷键Ctrl Shift F&a…...

安全行业大模型SecLLM技术白皮书
在ChatGPT 呈现全球现象级热度时,通用大语言模型(Large Language Model, LLM)技术成为了推动创新和变革的关键驱动力。但由于安全行业的特殊性和复杂性,LLM 并不能满足其应用需求。安全行业大模型(Security Large Language Model,…...

基础入门-HTTP数据包红蓝队研判自定义构造请求方法请求头修改状态码判断
知识点: 1、请求头&返回包-方法&头修改&状态码等 2、数据包分析-红队攻击工具&蓝队流量研判 3、数据包构造-Reqable自定义添加修改请求 一、演示案例-请求头&返回包-方法&头修改&状态码等 数据包 客户端请求Request 请求方法 …...

2025年日祭
本文将同步发表于洛谷(暂无法访问)、CSDN 与 Github 个人博客(暂未发布) 本蒟自2025.2.8开始半停课。 任务计划(站外题与专题) 数了一下,通过人数比较高的题,也就是我准备补的题&a…...
git命令行删除远程分支、删除远程提交日志
目录 1、从本地通过命令行删除远程git分支2、删除已 commit 并 push 的记录 1、从本地通过命令行删除远程git分支 git push origin --delete feature/feature_xxx 删除远程分支 feature/feature_xxx 2、删除已 commit 并 push 的记录 git reset --hard 7b5d01xxxxxxxxxx 恢复到…...
centOS8安装MySQL8设置开机自动启动失败
提供一个终极解决方案虽然systemctl 更符合管理预期但是不能用 使用一下命令 修改配置文件、修改mysql.service全是问题 systemctl start mysqld systemctl enable mysqld systemctl daemon-reload完全不生效各种报错 提示配置文件内容有问题 Main process exited, codeexite…...

对接DeepSeek
其实,整个对接过程很简单,就四步,获取key,找到接口文档,接口测试,代码对接。 获取 KEY https://platform.deepseek.com/transactions 直接付款就是了(现在官网暂停充值2025年2月7日࿰…...
SpringSecurity高级用法
SpringSecurity的高级用法,包括自定义loginUrl携带参数,自定义认证校验逻辑,自定义权限校验逻辑。 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-advanced-security 一、概述 在项目实际开发过程中,Spr…...
NLP_[2]-认识文本预处理
文章目录 1 认识文本预处理1 文本预处理及其作用2. 文本预处理中包含的主要环节2.1 文本处理的基本方法2.2 文本张量表示方法2.3 文本语料的数据分析2.4 文本特征处理2.5数据增强方法2.6 重要说明 2 文本处理的基本方法1. 什么是分词2 什么是命名实体识别3 什么是词性标注 1 认…...

字符设备驱动开发
驱动就是获取外设、传感器数据和控制外设。数据会提交给应用程序。 Linux 驱动编译既要编写一个驱动,还要编写一个简单的测试应用程序。 而单片机下驱动和应用都是放在一个文件里,也就是杂在一块。而 Linux 则是分开了。 一、字符设备驱动开发流程 Lin…...
c语言:取绝对值
假设我们有一个 long 类型的变量 l,我们希望恢复其绝对值。以下是两种方法的对比: 方法1:使用条件语句 这个很好理解,负数时取负运算 ,用于数值的符号反转。 long abs_value(long l) {if (l < 0) {return -l;} e…...

DeepSeek从入门到精通教程PDF清华大学出版
DeepSeek爆火以来,各种应用方式层出不穷,对于很多人来说,还是特别模糊,有种雾里看花水中望月的感觉。 最近,清华大学新闻与传播学院新媒体研究中心,推出了一篇DeepSeek的使用教程,从最基础的是…...

HTML之CSS定位、浮动、盒子模型
HTML之CSS定位、浮动、盒子模型 定位 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document<…...
LQB(1)-python-各种基础排序
前言 除了内置的快速排序sort(),python也可以实现冒泡排序、选择排序、插入排序、快速排序、归并排序和桶排序。 一、冒泡排序 (Bubble Sort) 基础代码 def bubble_sort(arr):n len(arr)for i in range(n):swapped False # 优化:若本轮无交换则提前…...
解锁国内主流前端与后端框架
前端框架大揭秘 在当今的 Web 开发领域,前端框架的地位愈发举足轻重。随着用户对 Web 应用交互性和体验性要求的不断攀升,前端开发不再仅仅是简单的页面布局与样式设计,更需要构建复杂且高效的用户界面。前端框架就像是一位得力助手…...

使用OBS推流,srs服务器播放
说明: ffmpeg可以推流,但是是命令行方式不太友好,还可以使用主流的OBS开源推流软件,可从官网Open Broadcaster Software | OBS 下载最新版本,目前很多网络主播都是用它做直播。该软件支持本地视频文件以及摄像头推流。…...

【鸿蒙HarmonyOS Next实战开发】多媒体视频播放-ijkplayer
简介 ijkplayer是OpenHarmony和HarmonyOS环境下可用的一款基于FFmpeg的视频播放器。 演示 下载安装 ohpm install ohos/ijkplayer使用说明 import { IjkMediaPlayer } from "ohos/ijkplayer";import type { OnPreparedListener } from "ohos/ijkplayer";i…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...