Win32 API非混音播放声音函数

1.PlaySound
Win32 API 播放声音最简单的就是PlaySound函数了。
播放文件:

PlaySound("deal.wav",NULL,SND_FILENAME | SND_ASYNC);

播放资源:

PlaySound((LPCSTR)IDR_WAVE_DEAL, GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC);

其中SND_ASYNC可以换成SND_SYNC,SND_SYNC的意思是同步模式,程序运行到此处会阻塞,直到声音播放完为止。SND_ASYNC的意思是异步模式,此时声音开始播放,程序会继续执行。

停止播放:

PlaySound(NULL,NULL,NULL,NULL);

2.mciSendString
mciSendString函数以命令形式控制设备的播放动作。
打开文件:

mciSendString("OPEN deal.wav ALIAS MUSIC", NULL, 0, 0);

播放文件:

mciSendString("PLAY MUSIC FROM 0", NULL, 0, NULL);

关闭文件:

mciSendString("CLOSE MUSIC", NULL, 0, NULL);

需要注意的是mciSendString是不支持多线程的,也就是不能通过开多个线程同时播放以达到混音的效果。

3.mciSendCommand
这个函数和mciSendCommand是一组的,只是操作方式换成用结构体。
打开文件:

		MCI_OPEN_PARMS mciOpen;
		mciOpen.lpstrElementName = "deal.wav";
		DWORD dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpen);
		if (dwReturn)//此句是为得到出错信息
		{
			char sz[64];
			mciGetErrorString(dwReturn, sz, 64);
			throw sz;
		}

播放文件:

		MCI_PLAY_PARMS mciPlay;
		mciSendCommand(mciOpen.wDeviceID, MCI_PLAY, NULL,(DWORD)&mciPlay);

关闭文件:

		MCI_GENERIC_PARMS mciClose;
		mciSendCommand(mciOpen.wDeviceID, MCI_CLOSE, 0, DWORD_PTR(&mciClose));

4.waveOut系列函数
还不熟,待续。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FFmpeg是一个开源的跨平台音视频处理工具,它提供了丰富的API用于音视频的编解码、转码、混音等操作。下面是关于FFmpeg API混音的介绍: FFmpeg提供了libavfilter库,其中包含了用于音频处理的滤镜。混音就是通过将多个音频流合并成一个音频流来实现的。 在FFmpeg中,混音可以通过以下步骤实现: 1. 打开输入文件:使用avformat_open_input函数打开需要混音的音频文件。 2. 获取音频流信息:使用avformat_find_stream_info函数获取音频流的相关信息。 3. 创建输出上下文:使用avformat_alloc_output_context2函数创建输出上下文。 4. 添加音频流:使用avformat_new_stream函数创建新的音频流,并将其添加到输出上下文中。 5. 打开输出文件:使用avio_open函数打开输出文件。 6. 初始化音频编码器:使用avcodec_find_encoder函数查找合适的音频编码器,并使用avcodec_open2函数打开编码器。 7. 初始化滤镜:使用avfilter_graph_alloc函数创建滤镜图,并使用avfilter_graph_parse2函数解析滤镜图的描述字符串。 8. 连接输入输出:使用avfilter_link函数将输入和输出连接起来。 9. 配置滤镜图:使用avfilter_graph_config函数配置滤镜图。 10. 混音处理:使用av_read_frame函数读取输入音频帧,通过滤镜图进行混音处理,然后使用av_write_frame函数混音后的音频帧写入输出文件。 11. 清理资源:释放相关的资源,关闭文件等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值