亚洲免费人人妻人人,cao78在线视频,福建一级毛片,91精品视频免费观看,高清另类图片操逼,日本特黄特色大片免费看,超碰欧美人人澡曰曰澡夜夜泛

在 DOS 下使用Windows *.WAV 文件

時(shí)間:2023-05-01 07:40:13 計(jì)算機(jī)論文 我要投稿
  • 相關(guān)推薦

在 DOS 下使用Windows *.WAV 文件

摘 要 該文介紹了Windows聲波文件(*.WAV)的格式,然后分析了在DOS下不使用聲音適配卡播放聲波文件的關(guān)鍵問題,并給出了程序清單。

關(guān)鍵詞 DOS應(yīng)用軟件開發(fā) 多媒體聲波文件在DOS應(yīng)用軟件開發(fā)過程中,我們非常希望能在不附加任何硬件設(shè)備的條件下實(shí)現(xiàn)一些簡(jiǎn)單的多媒體功能。

過去許多文章中都討論過Windows圖像文件(*.BMP,*.PCX)的格式及其用于美化DOS程序界面的方法。在MS WIMDOWS3.1以后,Windows又提供了標(biāo)準(zhǔn)的聲波文件(*.WAV),因此我們可以利用已有的聲波文件鑲嵌在自己的軟件中,在DOS下實(shí)現(xiàn)語音或其它音響的播放,提高我們的軟件質(zhì)量。

一、聲波文件格式分析

*.WAV文件作為多媒體中使用的聲波文件格式之一,它是以RIFF格式為標(biāo)準(zhǔn)的。RIFF是英文Resource Interchange File Format的縮寫,每個(gè)WAV文件的頭四個(gè)字節(jié)便是“RIFF”。

常見的聲波文件主要有兩種,分別對(duì)應(yīng)于單聲道(11.025KHz采樣率、8Bit的采樣值)和雙聲道(44.1KHz采樣率、16Bit的采樣值)。這里,采樣率是指:聲波信號(hào)[模→數(shù)]轉(zhuǎn)換過程中單位時(shí)間內(nèi)采樣的次數(shù)。采樣值是指每一次采樣周期內(nèi)聲波模擬信號(hào)的積分值,在編程播放過程中我們認(rèn)為它是揚(yáng)聲器在此周期單位時(shí)間段的音量。

*.WAV文件由文件頭和數(shù)據(jù)體兩大部分組成。其中文件頭又分為RIFF/WAV文件標(biāo)識(shí)段和聲波數(shù)據(jù)格式說明段兩部分。

WAV文件各部分內(nèi)容及格式見附表。

對(duì)于單聲道聲波文件,采樣數(shù)據(jù)為八位的短整數(shù)(short int 00H-FFH);而對(duì)于雙聲道立體聲聲波文件,每次采樣數(shù)據(jù)為一個(gè)16位的整數(shù)(int),高八位和低八位分別代表左右兩個(gè)聲道。

@@03A04400.GIF;*.WAV文件格式說明表@@

二、WAV文件編程

在沒有聲音適配卡的條件下,利用PC機(jī)內(nèi)部揚(yáng)聲器發(fā)聲需解決幾個(gè)關(guān)鍵問題。

首先是如何產(chǎn)生按指定采樣率要求的標(biāo)準(zhǔn)時(shí)間間隔段,以此為基礎(chǔ)控制揚(yáng)聲器發(fā)聲。

由于此時(shí)間段要求精確且非常短暫,因此實(shí)現(xiàn)起來有一定的難度。解決該問題的思路是修改8253定時(shí)器芯片的計(jì)數(shù)器0(地址:040H)的初始值,改變系統(tǒng)時(shí)鐘中斷頻率使其和采樣率相一致,建立用戶的時(shí)鐘中斷例程,最終產(chǎn)生標(biāo)準(zhǔn)的時(shí)間間隔段。但是在我們修改原有系統(tǒng)時(shí)鐘中斷(Int 08H)以后,最終必須恢復(fù)原有18.2Hz的系統(tǒng)時(shí)鐘中斷。

其次是如何快速地打開和關(guān)閉揚(yáng)聲器。解決這個(gè)問題的方法是直接向8255芯片端口(地址:061H)寫操作。由于PC機(jī)機(jī)內(nèi)揚(yáng)聲器發(fā)聲只有開/閉兩種狀態(tài),并不能控制音量大小。

因此還須考慮如何通過開閉揚(yáng)聲器來摸擬實(shí)現(xiàn)音量大小的控制。實(shí)現(xiàn)方法是:在每個(gè)時(shí)間單位內(nèi)通過改變揚(yáng)聲器打開延時(shí)的長短代表音量的大小。例如:對(duì)于8Bit單聲道聲波文件,采樣數(shù)據(jù)的最大值是0FFH,那么在每個(gè)標(biāo)準(zhǔn)時(shí)間單位內(nèi)揚(yáng)聲器打開時(shí)間應(yīng)為Delay=(采樣值/256)*標(biāo)準(zhǔn)時(shí)間段長度。在此思想下可以將該方法簡(jiǎn)化,設(shè)揚(yáng)聲器延時(shí)只有0、1(時(shí)間單位)兩種情況,即在每個(gè)時(shí)間單位內(nèi),如果采樣值大于128則發(fā)聲,如果采樣值小于128就不發(fā)聲。顯然這樣做是以拋棄大量聲波信息為代價(jià)的,采用的信息量只占原有用信息的1/12

8,所以這種方法產(chǎn)生的音質(zhì)較差。

三、程序?qū)嵗?/p>

下面是一個(gè)能播放11.025KHz/8Bit/單聲道聲波文件的演示程序。關(guān)于使用*.WAV文件的其它細(xì)節(jié),可通過閱讀本程序得到。它采用了第二種延時(shí)方式,如果讀者有興趣提高音質(zhì)可將其改成使用第一種方法,只需將newint08h中的聲音開/關(guān)判斷(與128比較)部分改成循環(huán)等待即可。

循環(huán)次數(shù)通過i=int(vol[counter]/256)*MAXTIMES得到。

式中MAXTIMES為延長一個(gè)標(biāo)準(zhǔn)時(shí)間單位的循環(huán)次數(shù)。

程度運(yùn)行環(huán)境:486兼容機(jī),MS DOS6.0,TC2.0編譯系統(tǒng)。

/*/*/*

*.WAV文件播放程序 DEMO.C,石寧 1994.12

*/*/*/

#include "dos.h"

#include "stdio.h"

#include"string.h"

#define MAXSIZE 50000

struct wave-file_head /*聲波*/

{ /*文件頭*/

char riff_id[4];/*結(jié)構(gòu)體*/

long int size0;

char wave-fmt[8];

lont int sizel;

int fmttag;

int c

[1] [2] [3] 

【在 DOS 下使用Windows *.WAV 文件】相關(guān)文章:

WAV04-29

DOS命令04-29

使用故障恢復(fù)控制臺(tái)修復(fù)不能啟動(dòng)的Windows系統(tǒng)05-01

DOS的特點(diǎn)電腦資料11-01

windows 2003server FTP主目錄文件夾拒絕訪問,解決方案04-28

日語接辭的分類及使用(下)04-30

防火墻·什么是DoS04-26

文件04-29

WINDOWS XP教案04-25

安裝Windows或啟動(dòng)Windows時(shí)鼠標(biāo)不可用06-20