摘 要: 介紹了ISD4004系列語音芯片" title="語音芯片">語音芯片,分析了芯片語音信息分段的內(nèi)部形成機(jī)制及特征,提出了獲取內(nèi)部地址的方法;在此基礎(chǔ)上采用地址拷貝法,開發(fā)設(shè)計(jì)出了語音拷貝系統(tǒng),并給出了軟件設(shè)計(jì)、硬件設(shè)計(jì)和部分應(yīng)用程序;最后通過測(cè)試驗(yàn)證了系統(tǒng)的可行性。
關(guān)鍵詞: ISD4004 語音拷貝 語音信息段 地址拷貝
1 ISD4004語音芯片介紹
ISD系列語音芯片是Winbond公司推出的產(chǎn)品。該芯片采用多電平直接模擬存儲(chǔ)專利技術(shù),聲音不需要A/D轉(zhuǎn)換和壓縮,模擬信號(hào)直接存儲(chǔ)在片內(nèi)的閃爍存儲(chǔ)器中,沒有A/D 轉(zhuǎn)換誤差, 因此能夠真實(shí)、自然地再現(xiàn)語音、音樂及效果聲。避免了傳統(tǒng)錄音電路量化和壓縮造成的量化噪聲和金屬聲。
ISD4004系列語音芯片的所有操作由微控制器控制,操作命令通過串行通信接口(SPI或Microwire)送入。錄音采樣頻率可為4.0Hz、5.3Hz、6.4Hz、8.0Hz,錄放時(shí)間可為8min、10min、12min、16min。采樣頻率越低,錄放時(shí)間越長,但音質(zhì)則有所下降。片內(nèi)信息存于閃爍存儲(chǔ)器中,可在斷電情況下保存100年,反復(fù)錄音10萬次(典型值)。器件工作電壓為3V,工作電流為15~25mA,維持電流為1μA。適用于移動(dòng)電話機(jī)及其它便攜式電子產(chǎn)品中。
本文以ISD4004-8MP(錄放時(shí)間為8min,PDIP封裝)語音芯片為例,介紹了語音拷貝系統(tǒng)的設(shè)計(jì)。
(聲明:本系統(tǒng)僅供測(cè)試使用,未經(jīng)許可復(fù)制他人音頻內(nèi)容,造成的侵權(quán)行為,由使用者自己承擔(dān);在使用本系統(tǒng)過程中造成的語音信息的失真、缺損及其它內(nèi)容變更等責(zé)任,由使用者自己承擔(dān)。)
2 ISD4004語音拷貝系統(tǒng)的設(shè)計(jì)
系統(tǒng)設(shè)計(jì)的整體思路是用錄制好語音的器件(母片)放音,待拷貝的器件(子片)錄音。其關(guān)鍵在于確??截惓龅淖悠Z音信息和母片完全一致,為此采用地址拷貝法。首先母片放音一遍,確認(rèn)母片的語音信息地址,建立地址索引表;在母片放音的同時(shí),子片同步進(jìn)行錄制拷貝,即在子片相同的地址處進(jìn)行相應(yīng)語音信息的錄制。地址拷貝法確保了母片和子片的語音信息地址完全一致。下面分軟件和硬件電路兩部分進(jìn)行介紹。
2.1 軟件的設(shè)計(jì)
2.1.1 母片語音地址的確定
母片語音地址的確定是整個(gè)設(shè)計(jì)的重點(diǎn)。ISD器件的地址不是通常意義上的字節(jié)地址單元,而是內(nèi)部存儲(chǔ)器的行地址。行是語音信息段的基本組成單位。以ISD4004-8MP為例,它內(nèi)部的3840K閃爍存儲(chǔ)器單元共分為1600行,每個(gè)地址單元指向其中的一行,即有1600個(gè)行地址單元。ISD4004-8MP的錄放時(shí)間為八分鐘,采樣頻率為8kHz,因此它的每行語音長度為200ms,即地址分辨率為200ms。
ISD器件可以進(jìn)行多段錄放操作,每一段稱為一個(gè)語音信息段。一個(gè)語音信息段由其起始地址、記錄的數(shù)據(jù)和信息結(jié)束標(biāo)志EOM(表示一個(gè)語音信息段的結(jié)束)三部分組成。ISD器件出廠時(shí),其內(nèi)部存儲(chǔ)器的一行已經(jīng)設(shè)計(jì)有多個(gè)可能的EOM標(biāo)志位置。ISD4004系列一行有八個(gè),第一個(gè)位于行起始后的25ms處,第八個(gè)位于行結(jié)束處,剩下EOM標(biāo)志間隔25ms均勻分布。錄音停止后,向器件發(fā)送STOP命令,錄音的進(jìn)程不會(huì)馬上停止,到了下一個(gè)最近的可能EOM標(biāo)志位置時(shí),用一個(gè)EOM標(biāo)志寫入器件來記錄語音結(jié)束的位置。這樣做可以使錄音的進(jìn)程在盡可能短的時(shí)間內(nèi)停止。在實(shí)際應(yīng)用中,一行最多只能有一個(gè)EOM標(biāo)志說明語音信息段的結(jié)束,無論這個(gè)標(biāo)志在哪里,下一條語音信息將從新的一行開始。所以一個(gè)語音信息段可以占用一行或多行存儲(chǔ)空間,可以包括多個(gè)地址單元;一個(gè)地址單元最多只能作為一個(gè)獨(dú)立的段。ISD4004最多可以分為1600個(gè)語音信息段。
ISD器件存儲(chǔ)陣列中的每一行都可以獨(dú)立尋址。錄放操作都是從一行的行首開始,可以一直持續(xù)到行尾,自動(dòng)無縫跳轉(zhuǎn)到下一行開始,繼續(xù)錄放。不同之處在于放音時(shí),遇到EOM標(biāo)志時(shí),放音自動(dòng)停止,產(chǎn)生中斷;錄音時(shí),需要向器件發(fā)送STOP命令,寫入一個(gè)EOM標(biāo)志,結(jié)束錄音。
放音時(shí),每播放一行語音,產(chǎn)生一個(gè)RAC周期信號(hào)。每個(gè)RAC周期表示ISD存儲(chǔ)器操作進(jìn)行了一行。該信號(hào)保持175ms的高電平,低電平為25ms。該端可以用于存儲(chǔ)器管理。ISD在播放和快進(jìn)操作中檢測(cè)到EOM或者OVF標(biāo)志(表明ISD錄放操作已經(jīng)達(dá)到存儲(chǔ)器的末尾)時(shí),都會(huì)產(chǎn)生中斷,變低并保持。中斷狀態(tài)在下一個(gè)SPI周期時(shí)清除,也就是說每播放完一個(gè)語音信息段,便會(huì)產(chǎn)生中斷。因此,RAC和
配合,可以確定每個(gè)語音段的起始和結(jié)束地址。在硬件設(shè)計(jì)中,母片ISD4004的
引腳接單片機(jī)的外部中斷" title="外部中斷">外部中斷INT0引腳,母片ISD404的RAC引腳接單片機(jī)的外部中斷INT1引腳,通過外部中斷INT0的中斷程序,判斷語音信息段的結(jié)束,通過外部中斷INT1的中斷程序,記錄播放的行數(shù)目(即行地址),那么下一個(gè)地址就是新的語音信息段的開始地址。這樣可通過中斷服務(wù)程序,獲取每個(gè)語音信息段的地址,然后建立地址索引表,記錄其起始地址。
2.1.2 各種子程序" title="子程序">子程序的設(shè)計(jì)
為了便于編程,對(duì)ISD器件的操作都需要設(shè)計(jì)相應(yīng)的子程序。其中有:POWERUP(上電" title="上電">上電)、SETPLAY(從指定地址開始放音)、PLAY(從當(dāng)前地址開始放音)、SETREC(從指定地址開始錄音)、REC(從當(dāng)前地址開始錄音)、SETRMC(從指定地址開始快進(jìn))、MC(從當(dāng)前地址開始快進(jìn))、STOP(停止當(dāng)前操作)、STOPWRDN(停止當(dāng)前操作并掉電)、RINT(讀狀態(tài)OVF和EOM)。在實(shí)際應(yīng)用中,針對(duì)母片和子片都有相應(yīng)的子程序。根據(jù)器件的手冊(cè),某些操作必需進(jìn)行適當(dāng)?shù)难訒r(shí)。播放和錄音時(shí),還應(yīng)遵守適當(dāng)?shù)牟僮鞔涡颉?BR> (1) POWERUP
上電操作時(shí),要等待Tpud(上電延遲)后器件才能工作。因此,單片機(jī)發(fā)送完上電指令后,必須等待Tpud,才能發(fā)送其它的指令。對(duì)于ISD4004-8MP,Tpud=25ms。
(2) STOP
在放音或者錄音過程中停止當(dāng)前操作時(shí),單片機(jī)發(fā)送完停止指令后,要等待Tstop后器件才能停止工作。對(duì)于ISD4004-8MP,Tstop=50ms。
(3) 為了達(dá)到較好的放音和錄音質(zhì)量,錄音和放音時(shí),建議采用下面的操作順序:
放音時(shí):①發(fā)送POWERUP命令;②等待Tpud;③從指定地址播放時(shí)發(fā)送SETPLAY命令,從當(dāng)前地址播放時(shí)發(fā)送PLAY命令;④結(jié)束放音時(shí)發(fā)送STOP命令或者等待播放操作檢測(cè)到EOM或者OVF時(shí)自動(dòng)停止。⑤等待Tstop。
錄音時(shí):①發(fā)送POWERUP命令;②等待Tpud;③再次發(fā)送POWERUP命令;④等待2倍Tpud;⑤從指定地址錄音時(shí)發(fā)送SETREC命令;從當(dāng)前地址錄音時(shí)發(fā)送REC命令;⑥發(fā)送STOP命令,結(jié)束錄音;⑦等待Tstop。
2.1.3 拷貝程序的設(shè)計(jì)
拷貝前,先把母片語音完全播放一遍,建立地址索引表。母片語音地址確定后,可以開始語音拷貝。通過相關(guān)子程序,從母片地址索引表中調(diào)入不同語音段的地址,開始播放,子片在相同的地址開始錄音。播放到一個(gè)語音段結(jié)束時(shí),母片檢測(cè)到EOM標(biāo)志,放音結(jié)束,并產(chǎn)生中斷,單片機(jī)調(diào)用中斷程序,向子片發(fā)送STOP命令,寫入EOM標(biāo)志,表示語音結(jié)束。延時(shí)Tstop,跳出中斷后,記錄已經(jīng)錄制的語音數(shù)目,并調(diào)入下一條語音的地址,重復(fù)進(jìn)行操作,直到地址表查詢完畢或者母片檢測(cè)到OVF標(biāo)志,表示全片放音結(jié)束,錄音結(jié)束。
2.2 硬件電路的設(shè)計(jì)
系統(tǒng)硬件電路圖如圖1所示。主要由單片機(jī)AT89C51、電源轉(zhuǎn)換芯片MAX603、有關(guān)按鍵和跳線、兩片同型號(hào)ISD4004-8MP(一片為母片,一片為子片)和運(yùn)放μA741等組成。硬件設(shè)計(jì)時(shí),要注意以下幾個(gè)方面:
(1)單片機(jī)引腳模擬SPI接口,編程時(shí)應(yīng)注意其時(shí)序。
(2)母片INT和RAC引腳分別接單片機(jī)外部中斷INT0和INT1,應(yīng)有上拉電阻。
(3)芯片采用+3V電源供電,放音時(shí)最大消耗電流為30mA,錄音時(shí)最大消耗電流為40mA,因此ISD芯片要有獨(dú)立的電源提供穩(wěn)定的供電。設(shè)計(jì)中采用MAX603電壓轉(zhuǎn)換芯片。
(4)錄音時(shí)輸入信號(hào)既可采用單端輸入(信號(hào)接在同相模擬輸入端ANA IN+),也可采用差分輸入(信號(hào)同時(shí)接在同相模擬輸入端ANA IN+和反相模擬輸入端ANA IN-)。采用單端輸入時(shí),輸入信號(hào)的峰峰值最大為32mV,此時(shí)器件輸出AUD OUT的峰峰值大約為450mV。為了擁有較好的音質(zhì),需要對(duì)母片的聲音輸出進(jìn)行衰減,再通過去耦電容" title="去耦電容">去耦電容,接到子片的同相模擬輸入端ANAIN+。而反相模擬輸入端ANAIN-則通過去耦電容接地。兩個(gè)去耦電容大小值應(yīng)相同。
(5)同型號(hào)芯片互相拷貝,應(yīng)使用ISD器件的內(nèi)部時(shí)鐘,即XCLK接地;采用音質(zhì)優(yōu)先模式,保障拷貝出的器件不會(huì)出現(xiàn)語速失真的情況。
(6)為了使噪聲最小,器件的模擬電路和數(shù)字電路應(yīng)使用不同的電源總線,并且分別引到外封裝的不同引腳上,模擬電源和數(shù)字電源最好分別走線,盡可能在靠近電源處相連,去耦電容應(yīng)盡量靠近器件。器件內(nèi)部的模擬電路和數(shù)字電路也應(yīng)使用不同的地線。幾個(gè)Vssa盡量在引腳焊盤上相連,并且用低阻通路連到地線上,Vssd也用低阻通路連接到地線上。
3 系統(tǒng)測(cè)試
拷貝完畢后,對(duì)錄制的子片進(jìn)行測(cè)試。系統(tǒng)采用夾具設(shè)計(jì),把母片和子片取出,把子片放在母片的位置,通過更改相應(yīng)的跳線,使系統(tǒng)工作在放音模式下。采用順序播放(即語音按照順序連續(xù)播放)方法,確認(rèn)錄入子片的全部語音信息。按地址播放(按照母片的地址索引表從子片的相應(yīng)地址逐條播放)方式,確認(rèn)子片語音信息地址和母片完全一致。通過測(cè)試,子片語音信息地址與母片完全一致,語音質(zhì)量接近于母片質(zhì)量,達(dá)到了較好的效果。
經(jīng)測(cè)試,本系統(tǒng)適用于ISD4004系列的全部型號(hào),只需要在程序中更改為各自型號(hào)的Tpud和Tstop即可。原則上,同型號(hào)和時(shí)間長度的ISD語音芯片都可以用本系統(tǒng)拷貝,但由于不同型號(hào)器件每行語音長度(即地址分辨率)不同,它們之間的拷貝可能會(huì)出現(xiàn)未知的問題。
4 部分程序
下面是語音拷貝和播放的部分程序。
…………
;偽定義
SPI_SS1 EQU P1.0
SPI_MOSI1 EQU P1.1
SPI_MISO1 EQU P1.2
SPI_SCLK1 EQU P1.3
SPI_SS2 EQU P1.4
SPI_MOSI2 EQU P1.5
SPI_MISO2 EQU P1.6
SPI_SCLK2 EQU P1.7
ISD_STOP_KEY EQU P0.0
ISD_EN_KEY EQU P0.1
ISD_PR_KEY EQU P0.2
…………
;初始化單片機(jī)
LCALL INIT_MCU
;初始化母片ISD4004,延時(shí)Tpud
;ISD1_×× 為母片子程序
LCALL ISD1_POWERUP
LCALL DELAY_25MS
;初始化子片ISD4004,兩次上電
;ISD2_×× 為子片子程序
LCALL ISD2_POWERUP
LCALL DELAY_25MS
LCALL ISD2_POWERUP
LCALL DELAY_25MS
LCALL DELAY_25MS
;主程序,判斷是否開始操作
MAINLOOP:
JB ISD_EN_KEY, MAINLOOP
;判斷播放還是拷貝
JB ISD_PR_KEY, ISD_PLAY1
JNB ISD_PR_KEY, ISD_COPY1
;置中斷標(biāo)志
SETB FLG_ISD_INT
;拷貝程序
;從語音信息地址調(diào)用子程序ISD_ADDRESS_COPY,
;從索引表中調(diào)入地址
ISD_COPY1:
LCALL ISD_ADDRESS_COPY
; 從指定地址開始播放和錄音
LCALL ISD1_SETPLAY
LCALL ISD2_SETREC
;從當(dāng)前地址開始播放和錄音
LCALL ISD1_PLAY
LCALL ISD2_REC
;判斷是否手動(dòng)結(jié)束拷貝操作
ISD_COPY2:
JNB ISD_STOP_KEY, ISD_COPY3
;判斷一段語音是否播放完畢,是否中斷處理完畢
;播放完畢重置中斷標(biāo)志
JB FLG_ISD_INT, ISD_COPY2
SETB FLG_ISD_INT
;延遲Tstop
LCALL DELAY_25MS
LCALL DELAY_25MS
;記錄拷貝個(gè)數(shù),×× 為需要拷貝的語音數(shù)目
;判斷是否拷貝完畢,未完則繼續(xù)拷貝
INC COPY_CNTR
MOV A, COPY_CNTR
CJNE A, ××, ISD_COPY1
;拷貝結(jié)束,返回主程序
ISD_COPY3:
LCALL ISD1_STOP
LCALL ISD2_STOP
LJMP MAINLOOP
;播放程序,順序播放方式
;設(shè)置從地址00開始進(jìn)行播放
ISD_PLAY1:
MOV ISD_ADRESS_H, #00H
MOV ISD_ADRESS_L, #00H
LCALL ISD1_SETPLAY
;開始播放
ISD_PLAY2:
LCALL ISD1_PLAY
;判斷是否手動(dòng)結(jié)束播放
ISD_PLAY3:
JNB ISD_STOP_KEY, ISD_PLAY4
;判斷一段語音是否播放完畢,是否中斷處理完畢
;播放完畢重置中斷標(biāo)志
JB FLG_ISD_INT, ISD_PLAY3
SETB FLG_ISD_INT
;繼續(xù)播放
JMP ISD_PLAY2
;播放結(jié)束
ISD_PLAY4:
LCALL ISD1_STOP
LJMP MAINLOOP
…………
拷貝出的子片已經(jīng)應(yīng)用在排隊(duì)管理系統(tǒng)的語音部分。在實(shí)際使用中,子片完全可以替代母片,效果良好。本系統(tǒng)不但解決了ISD4004系列器件的語音錄制問題,而且復(fù)制出的器件地址完全一致,與傳統(tǒng)的錄制方法相比,有很大的優(yōu)勢(shì)。
參考文獻(xiàn)
1 ISD4004 Series Single-Chip Multiple-Messages Voice Record/Playback Devices 8-, 10-, 12-, and 16-Minute Duration. Winbond Electronics Corp., 2004
2 The ISD Chipcorder Product Line: Sizes, Row Lengths and Other Useful Drtails for Address Able ISD Products.Winbond Electronics Corp., 2000
3 劉 欣,安欣賞,劉大生,許鳴宇.ISD語音器件分段地址的獲取.電子技術(shù)應(yīng)用,1999;25(10):64~65