哪位大虾可以搞到低级声音函数使用的资料?

xinguang 2000-08-15 02:33:00
...全文
227 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Un1 2001-02-17
  • 打赏
  • 举报
回复
http://www.banasoft.com/DownLoad/AVPhone.exe
westman 2000-09-03
  • 打赏
  • 举报
回复
是吗?哈哈!不过不是SoundBlaster开发包是我自己写的
sanhan 2000-09-03
  • 打赏
  • 举报
回复
westman,你这好像是在Dos下用的SoundBlaster开发包.对其他人不大适合吧!
westman 2000-08-29
  • 打赏
  • 举报
回复
要声卡编程资料吗?这里有一个播放WAVE的试列(省略DMA开发部分)
#include <stdio.h>
#include <i86.h>
#include <dos.h>
#include <conio.h>
#include <mem.h>

#include <lsys.h>
#include <lkey.h>

char lk_sb_init(short addr,short irq,short dma);
char lk_sb_rest();
int lk_sb_play(char *buf,int len,int sample);
///////////////////////////////////////////////////////////////////////////
struct
{ long phy;
short size;
short selector;
char *data;
} dma_buf[2];
struct
{ int sample;
long len_to_play;
char *data_to_play;
} lsnd_buf;
extern short lk_sb_port,lk_sb_irq,lk_sb_dma;
extern short lk_sb_stereo, lk_sb_16bit, lk_dsp_ver;
static short IntNumbers[] = {
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77 };
long int lk_dma_size=0x10000/8,lk_dma_mix_size;
long int lk_sb_sending=0,lk_sb_freq=-1;
static int sb_bufnum=0,sb_dma_count=0,sb_semaphore=0;
static int sb_init_flag=0;
static char *sb_card;

static char lsnd_create_buffers(int size,int block);
static char lsnd_release_buffers();
static char set_isr();
static char rest_isr();
static void interrupt interrupt_isr();
static void interrupt far (*old_interrupt)()=NULL;
static char lsnd_play_buffer(char buf,ushort size,int sampleRate);
///////////////////////////////////////////////////////
static char lsnd_create_buffers(int size,int block)
{ int first_size;
char i;
if (size<16384L) size=16384L;
if (block==1) first_size=size*2; else first_size=size;
i=lsys_dma_alloc(first_size,&dma_buf[0].phy,&dma_buf[0].selector);
if (i) { dma_buf[0].phy=0; return -1; }
dma_buf[0].size=first_size; dma_buf[0].data=(char*)dma_buf[0].phy;

if (block==2)
{ i=lsys_dma_alloc(size,&dma_buf[1].phy,&dma_buf[1].selector);
if (i) {
lsys_dma_free(size,dma_buf[0].phy,dma_buf[0].selector);
dma_buf[0].phy=dma_buf[1].phy=0;
return -1;
} dma_buf[1].size=size; dma_buf[1].data=(char*)dma_buf[1].phy;
} else {
dma_buf[1].data=dma_buf[0].data+size;
dma_buf[1].phy=dma_buf[0].phy+size;
dma_buf[1].size=0; dma_buf[1].selector=dma_buf[0].selector;
}
return 0;
}
static char lsnd_release_buffers()
{ int i;
for (i=0;i<2;i++) if (dma_buf[i].phy&&dma_buf[i].size>0) {
lsys_dma_free(dma_buf[i].size,dma_buf[i].phy,dma_buf[i].selector);
dma_buf[i].phy=dma_buf[i].size=0;
}
return 0;
}
char lk_sb_init(short addr,short irq,short dma)
{ short dma8,dma16;
int max_freq, default_freq,block=2;
char *msg;

if (sb_init_flag) return 0;
if (addr<0||irq<0||dma<0) {
lsGetBlasterEnv(&addr,&dma8,&dma16,&irq);
dma=dma8;
}
if (addr<0||irq<0||dma<0) return -1;
lk_sb_port=addr; lk_sb_dma=dma; lk_sb_irq=irq;
if (lsResetDsp(1)) return -2;

if (lsnd_create_buffers(lk_dma_size,block)) return -3;
if (set_isr()) return -4;
lsWritePortC(0xd1);
sb_init_flag=1;
return 0;
}
char lk_sb_rest()
{ if (sb_init_flag==0) return 0;
rest_isr();
lsnd_release_buffers();
lsWritePortC(0xd3);
return 0;
}
#define PIC1MODE 0x20 // for irq 0 - 7
#define PIC1MASK 0x21
#define PIC2MODE 0xA0 // for irq 8 - 15
#define PIC2MASK 0xA1
#define PICEOI 0x20 // End Of Interrupt
static char set_isr()
{ int Intr_num;
int Intr_mask;

if (old_interrupt!=NULL) return -1;
Intr_num = IntNumbers[lk_sb_irq];
Intr_mask = 1 << lk_sb_irq;
old_interrupt=_dos_getvect(Intr_num);
_disable();
_dos_setvect(Intr_num,interrupt_isr);
_enable();
outp(PIC1MASK, inp(PIC1MASK) & ~Intr_mask);
outp(PIC2MASK, inp(PIC2MASK) & ~(Intr_mask >> 8));
return 0;
}
static char rest_isr()
{ int Intr_num;
int Intr_mask;

if (old_interrupt==NULL) return -1;
Intr_num = IntNumbers[lk_sb_irq];
Intr_mask = 1 << lk_sb_irq;

outp(PIC1MASK, inp(PIC1MASK) | Intr_mask);
outp(PIC2MASK, inp(PIC2MASK) | (Intr_mask >> 8));
_disable();
_dos_setvect(Intr_num,old_interrupt);
_enable();
old_interrupt=NULL;
return 0;
}
///////////////////////////////////////////////////////
static void lk_sb_sample_rate(unsigned int rate)
{ lsWritePortC(0x40);
lsWritePortC((unsigned char)(256-1000000/rate));
}
static void lk_sb_play_buffer(int size)
{ lsWritePortC(0x14);
lsWritePortC((size-1) & 0xFF);
lsWritePortC((size-1) >> 8);
lk_sb_sending=1;
}
static char lsnd_play_buffer(char buf,ushort size,int sampleRate)
{ if (dma_buf[buf].phy==0) return -1;

lk_sb_sample_rate(sampleRate);
if (size>dma_buf[buf].size) size=dma_buf[buf].size;
sb_bufnum=buf;
lsys_dma_start(lk_sb_dma,dma_buf[buf].phy,size,0,0);
lk_sb_play_buffer(size);
return 0;
}
///////////////////////////////////////////////////////////////////////////
int lk_sb_play(char *buf,int len,int sample)
{ lsnd_buf.sample=sample;
lsnd_buf.len_to_play=len;
lsnd_buf.data_to_play=buf;
memset(dma_buf[0].data,0,lk_dma_size);
lsnd_play_buffer(0,1,sample);
lsWritePortC(0xd1);
return 0;
}
///////////////////////////////////////////////////////
static void interrupt interrupt_isr()
{ int len,cont=1;
lk_sb_sending=0;
len=lsnd_buf.len_to_play;
if (len>lk_dma_size) len=lk_dma_size;
if (len==0||lsnd_buf.data_to_play==NULL) cont=0;
if (cont) {
sb_bufnum = 1 - sb_bufnum;
memcpy(dma_buf[sb_bufnum].data,lsnd_buf.data_to_play,len);
lsys_dma_start(lk_sb_dma, dma_buf[sb_bufnum].phy, lk_dma_size, FALSE, FALSE);
lsnd_buf.len_to_play-=len;
lsnd_buf.data_to_play+=len;
lsnd_play_buffer(sb_bufnum,len,lsnd_buf.sample);
}
if (lsnd_buf.len_to_play<=0) {
}
outp(0x20, 0x20);
}
感兴趣到我的游戏制作主页来http://newbird.126.com
westman 2000-08-29
  • 打赏
  • 举报
回复
要声卡编程资料吗?这里有一个播放WAVE的试列(省略DMA开发部分)
#include <stdio.h>
#include <i86.h>
#include <dos.h>
#include <conio.h>
#include <mem.h>

#include <lsys.h>
#include <lkey.h>

char lk_sb_init(short addr,short irq,short dma);
char lk_sb_rest();
int lk_sb_play(char *buf,int len,int sample);
///////////////////////////////////////////////////////////////////////////
struct
{ long phy;
short size;
short selector;
char *data;
} dma_buf[2];
struct
{ int sample;
long len_to_play;
char *data_to_play;
} lsnd_buf;
extern short lk_sb_port,lk_sb_irq,lk_sb_dma;
extern short lk_sb_stereo, lk_sb_16bit, lk_dsp_ver;
static short IntNumbers[] = {
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77 };
long int lk_dma_size=0x10000/8,lk_dma_mix_size;
long int lk_sb_sending=0,lk_sb_freq=-1;
static int sb_bufnum=0,sb_dma_count=0,sb_semaphore=0;
static int sb_init_flag=0;
static char *sb_card;

static char lsnd_create_buffers(int size,int block);
static char lsnd_release_buffers();
static char set_isr();
static char rest_isr();
static void interrupt interrupt_isr();
static void interrupt far (*old_interrupt)()=NULL;
static char lsnd_play_buffer(char buf,ushort size,int sampleRate);
///////////////////////////////////////////////////////
static char lsnd_create_buffers(int size,int block)
{ int first_size;
char i;
if (size<16384L) size=16384L;
if (block==1) first_size=size*2; else first_size=size;
i=lsys_dma_alloc(first_size,&dma_buf[0].phy,&dma_buf[0].selector);
if (i) { dma_buf[0].phy=0; return -1; }
dma_buf[0].size=first_size; dma_buf[0].data=(char*)dma_buf[0].phy;

if (block==2)
{ i=lsys_dma_alloc(size,&dma_buf[1].phy,&dma_buf[1].selector);
if (i) {
lsys_dma_free(size,dma_buf[0].phy,dma_buf[0].selector);
dma_buf[0].phy=dma_buf[1].phy=0;
return -1;
} dma_buf[1].size=size; dma_buf[1].data=(char*)dma_buf[1].phy;
} else {
dma_buf[1].data=dma_buf[0].data+size;
dma_buf[1].phy=dma_buf[0].phy+size;
dma_buf[1].size=0; dma_buf[1].selector=dma_buf[0].selector;
}
return 0;
}
static char lsnd_release_buffers()
{ int i;
for (i=0;i<2;i++) if (dma_buf[i].phy&&dma_buf[i].size>0) {
lsys_dma_free(dma_buf[i].size,dma_buf[i].phy,dma_buf[i].selector);
dma_buf[i].phy=dma_buf[i].size=0;
}
return 0;
}
char lk_sb_init(short addr,short irq,short dma)
{ short dma8,dma16;
int max_freq, default_freq,block=2;
char *msg;

if (sb_init_flag) return 0;
if (addr<0||irq<0||dma<0) {
lsGetBlasterEnv(&addr,&dma8,&dma16,&irq);
dma=dma8;
}
if (addr<0||irq<0||dma<0) return -1;
lk_sb_port=addr; lk_sb_dma=dma; lk_sb_irq=irq;
if (lsResetDsp(1)) return -2;

if (lsnd_create_buffers(lk_dma_size,block)) return -3;
if (set_isr()) return -4;
lsWritePortC(0xd1);
sb_init_flag=1;
return 0;
}
char lk_sb_rest()
{ if (sb_init_flag==0) return 0;
rest_isr();
lsnd_release_buffers();
lsWritePortC(0xd3);
return 0;
}
#define PIC1MODE 0x20 // for irq 0 - 7
#define PIC1MASK 0x21
#define PIC2MODE 0xA0 // for irq 8 - 15
#define PIC2MASK 0xA1
#define PICEOI 0x20 // End Of Interrupt
static char set_isr()
{ int Intr_num;
int Intr_mask;

if (old_interrupt!=NULL) return -1;
Intr_num = IntNumbers[lk_sb_irq];
Intr_mask = 1 << lk_sb_irq;
old_interrupt=_dos_getvect(Intr_num);
_disable();
_dos_setvect(Intr_num,interrupt_isr);
_enable();
outp(PIC1MASK, inp(PIC1MASK) & ~Intr_mask);
outp(PIC2MASK, inp(PIC2MASK) & ~(Intr_mask >> 8));
return 0;
}
static char rest_isr()
{ int Intr_num;
int Intr_mask;

if (old_interrupt==NULL) return -1;
Intr_num = IntNumbers[lk_sb_irq];
Intr_mask = 1 << lk_sb_irq;

outp(PIC1MASK, inp(PIC1MASK) | Intr_mask);
outp(PIC2MASK, inp(PIC2MASK) | (Intr_mask >> 8));
_disable();
_dos_setvect(Intr_num,old_interrupt);
_enable();
old_interrupt=NULL;
return 0;
}
///////////////////////////////////////////////////////
static void lk_sb_sample_rate(unsigned int rate)
{ lsWritePortC(0x40);
lsWritePortC((unsigned char)(256-1000000/rate));
}
static void lk_sb_play_buffer(int size)
{ lsWritePortC(0x14);
lsWritePortC((size-1) & 0xFF);
lsWritePortC((size-1) >> 8);
lk_sb_sending=1;
}
static char lsnd_play_buffer(char buf,ushort size,int sampleRate)
{ if (dma_buf[buf].phy==0) return -1;

lk_sb_sample_rate(sampleRate);
if (size>dma_buf[buf].size) size=dma_buf[buf].size;
sb_bufnum=buf;
lsys_dma_start(lk_sb_dma,dma_buf[buf].phy,size,0,0);
lk_sb_play_buffer(size);
return 0;
}
///////////////////////////////////////////////////////////////////////////
int lk_sb_play(char *buf,int len,int sample)
{ lsnd_buf.sample=sample;
lsnd_buf.len_to_play=len;
lsnd_buf.data_to_play=buf;
memset(dma_buf[0].data,0,lk_dma_size);
lsnd_play_buffer(0,1,sample);
lsWritePortC(0xd1);
return 0;
}
///////////////////////////////////////////////////////
static void interrupt interrupt_isr()
{ int len,cont=1;
lk_sb_sending=0;
len=lsnd_buf.len_to_play;
if (len>lk_dma_size) len=lk_dma_size;
if (len==0||lsnd_buf.data_to_play==NULL) cont=0;
if (cont) {
sb_bufnum = 1 - sb_bufnum;
memcpy(dma_buf[sb_bufnum].data,lsnd_buf.data_to_play,len);
lsys_dma_start(lk_sb_dma, dma_buf[sb_bufnum].phy, lk_dma_size, FALSE, FALSE);
lsnd_buf.len_to_play-=len;
lsnd_buf.data_to_play+=len;
lsnd_play_buffer(sb_bufnum,len,lsnd_buf.sample);
}
if (lsnd_buf.len_to_play<=0) {
}
outp(0x20, 0x20);
}
sanhan 2000-08-17
  • 打赏
  • 举报
回复
MSDN Lib
->Platform SDK
->Graphics and Multimedia Services
->Multimedia Audio
->Waveform Audio

主要关注其中以WaveIn和WaveOut开头的函数.
xinguang 2000-08-17
  • 打赏
  • 举报
回复
sanhan:
请问能不能找道这方面的中文资料,我的E文实在是不太好看起来很吃力!
你想当“李逍遥”式的“大侠”吗? 这里无需计算机基础,无需编程经验,你也不必是计算机专业的在校大学生....只要爱好游戏,怀揣梦想! 有一定自主学习能力,跟着刘老师从“编程小白”修炼为游戏研发“大虾”吧!!!学习好Unity,其先决条件是一定要有稳固、扎实的编程基础!课程 《C# For Unity系列之入门篇》配套学习资料链接:http://pan.baidu.com/s/1gflxreN 密码:sou5;刘老师讲Unity学员群(2) 497429806一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

8,301

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧