c++获取系统pcm_C++ 播放音频流(PCM裸流)

本文提供了一段C++代码,用于从PCM音频文件读取数据并直接播放。通过使用Windows API,实现了简单的音频播放功能。代码中包含单缓冲和双缓冲的示例,适用于本地文件和网络音频数据的实时传输。在双缓冲示例中,回调函数用于在前一块音频播放完毕后加载新的数据,解决了单缓冲导致的‘哒哒’噪声问题。
摘要由CSDN通过智能技术生成

直接上代码。假设有须要能够直接建一个win32控制台程序然后将代码拷过去改个文件名称就能够用了(注意将声道和频率与你自己的文件相应)。当然我自己也用VS2008写了个样例上传了,假设有须要下载地址例如以下:点击打开链接。

这份代码是打开文件截取一段数据然后播放的,能够轻松的经过加一条线程的方式改成网络传输的形式,但经过本人測试,由于没有缓存机制会有“哒哒”的噪声,也就是说这份代码在网络实时音频上的表现并不太好。为了解决问题,能够加上缓存机制,本人由于一開始用的是事件响应方式。所以一直困在这个框架里,不能非常好的利用缓存的机制解决上面提到的问题,后来尝试了用回调函数的方式来响应数据播放完毕的消息。问题就轻松的攻克了。

那部分的代码会在稍候放上去。

#include "stdafx.h"

#include

#include

#pragma comment(lib, "winmm.lib")

char buf[1024 * 1024 * 4];

int _tmain(int argc, _TCHAR* argv[]) {

FILE* thbgm;//文件

int cnt;

HWAVEOUT hwo;

WAVEHDR wh;

WAVEFORMATEX wfx;

HANDLE wait;

wfx.wFormatTag = WAVE_FORMAT_PCM;//设置波形声音的格式

wfx.nChannels = 1;//设置音频文件的通道数量

wfx.nSamplesPerSec = 8000;//设置每一个声道播放和记录时的样本频率

wfx.nAvgBytesPerSec 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值