注册 登录
编程论坛 C图形专区

发一个 DOS 下利用 SoundBlaster 声卡播放 WAV 音频的程序吧

RockCarry 发布于 2007-09-11 00:16, 5557 次点击

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 https://www.bc-cn.net
*/ 作者: RockCarry E-mail:rockcarry@163.com
*/ 时间: 2007-9-10 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

可能很多人都需要这个。
最近有空搞了下这个,其实很早以前就实现过 DOS 下的声卡程序,只是代码写得很烂,而且一直都有bug,所以没有发布。
现在重新看了下 SoundBlaster 的资料,还有就是 PC 的 DMAC 8237 和 PIC 8259,重新整理了下思路,把代码重写了,并且调试到现在,已经去除了很多bug,应该可以在 WinXP 平台下稳定的工作。
目前这个还是按照 SB2.01 来写的,因此只能支持 8bit 单声道的 wave 音频播放,采用的是 DMA + 中断的方式,可以播放任意长度的音频文件。WinXP 只能支持到 SB2.01 的标准,而且播放的时候对 CPU 的占用很大,这我也没有办法,这不是我的程序的问题,而是 XP 下 DOS BOX对 SoundBlaster 支持的不好。建议安装下 VMSound 这个软件,可以在 WinXP 平台上获得更高的 SoundBlaster 声卡支持,并且能减少 CPU 资源的占用。
以后可能会加入对更高版本的 SoundBlaster 声卡的支持。还有就是 MIDI,不过 MIDI 的实现还是比较麻烦的。
当然目前这个只是一个 demo 程序,在后面我会定义好接口,以函数库的形式发布,也会加入更多的新特性。

只有本站会员才能查看附件,请 登录



16 回复
#2
wangxy2006962007-09-11 01:44
我以前也弄过声卡播放wav文件,如果不用中断技术是好弄的,但要播放背景音乐就难了,我反汇编过一个德国人(团体)写的一个多媒体软件,它是用保护模式写的,我到现在还在一直反汇编,想看看它到底是怎么播放背景音乐和显示高分辨率图片的,不过我纯dos反汇编到lidt就死机,v86下反汇编到一个int31h中断也死机了,到现在也没有弄好,一直郁闷中...
#3
RockCarry2007-09-11 18:05
wangxy200696 你解决问题的思路似乎不对。一般情况下,我都是不会考虑去反汇编别人的代码的。比较好的做法是,最大限度的占有相关的资料和代码,然后进行分析,搞懂原理,然后理清思路,从头实现。反汇编实在不可取,只能作为找不到资料和代码时的无奈选择。
#4
wangxy2006962007-09-11 19:51

你说的有道理,不过我确实没有资料,没办法,只有反汇编了,我很喜欢反汇编,喜欢玩单机游戏,想改造游戏和软件的功能

#5
RockCarry2007-10-16 16:43
SoundBlaster 的资料我有的,Creative 的完整原始版本。
#6
ba_wang_mao2007-10-20 09:07
在XP下我运行不了呀!
#7
青格儿2007-11-24 11:43
XP下可以运行啊!
#8
夜礼服假面2007-11-26 17:45
提示: 作者被禁止或删除 内容自动屏蔽,只有管理员可见
#9
夜礼服假面2007-11-27 13:37
提示: 作者被禁止或删除 内容自动屏蔽,只有管理员可见
#10
RockCarry2007-11-27 14:21
This code is only written for Turbo C compiler, please use Turbo C to compile and run this demo.

[[italic] 本帖最后由 RockCarry 于 2007-11-27 14:22 编辑 [/italic]]
#11
夜礼服假面2007-11-27 16:02
提示: 作者被禁止或删除 内容自动屏蔽,只有管理员可见
#12
短笛2008-04-11 11:44
先下去看看
#13
kk48682008-04-11 12:11
回复 2# 的帖子
一般播放背景音乐需要使用中断的吧,不用中断我真的无法想象。。。
单纯播放背景音乐其实没有什么太困难的,设置好了硬件就OK了,让机器自己忙活去吧;稍微改动一下,循环播放也不难实现。
如果做前后台音乐切换,并且前台播放完之后后台续播,这个还是稍微复杂一点的。
#14
kankan96702008-04-29 09:42
dad
dsd
#15
createhebe2008-12-12 18:53
郁闷ing
显示图片可以利用VESA直接写VRAM,速度很快,而且支持24bit色
声卡一直没成功,找到DSP的端口是0x220,但是读0x22c一直是0,没办法写啊~~奇怪啦·
#16
acetuo2009-10-25 22:00
XP运行不了哟
#17
olliezhou2010-05-18 16:15
能不能给我发一些DOS下关于声卡编程的资料,现在急要! 请发到:0lliezhou@
1