ISD4004系列器件语音拷贝系统的设计
2008-07-17
作者:鲁奇璞, 魏 丰
摘 要: 介绍了ISD4004系列语音芯片" title="语音芯片">语音芯片,分析了芯片语音信息分段的内部形成机制及特征,提出了获取内部地址的方法;在此基础上采用地址拷贝法,开发设计出了语音拷贝系统,并给出了软件设计、硬件设计和部分应用程序;最后通过测试验证了系统的可行性。
关键词: ISD4004 语音拷贝 语音信息段 地址拷贝
1 ISD4004语音芯片介绍
ISD系列语音芯片是Winbond公司推出的产品。该芯片采用多电平直接模拟存储专利技术,声音不需要A/D转换和压缩,模拟信号直接存储在片内的闪烁存储器中,没有A/D 转换误差, 因此能够真实、自然地再现语音、音乐及效果声。避免了传统录音电路量化和压缩造成的量化噪声和金属声。
ISD4004系列语音芯片的所有操作由微控制器控制,操作命令通过串行通信接口(SPI或Microwire)送入。录音采样频率可为4.0Hz、5.3Hz、6.4Hz、8.0Hz,录放时间可为8min、10min、12min、16min。采样频率越低,录放时间越长,但音质则有所下降。片内信息存于闪烁存储器中,可在断电情况下保存100年,反复录音10万次(典型值)。器件工作电压为3V,工作电流为15~25mA,维持电流为1μA。适用于移动电话机及其它便携式电子产品中。
本文以ISD4004-8MP(录放时间为8min,PDIP封装)语音芯片为例,介绍了语音拷贝系统的设计。
(声明:本系统仅供测试使用,未经许可复制他人音频内容,造成的侵权行为,由使用者自己承担;在使用本系统过程中造成的语音信息的失真、缺损及其它内容变更等责任,由使用者自己承担。)
2 ISD4004语音拷贝系统的设计
系统设计的整体思路是用录制好语音的器件(母片)放音,待拷贝的器件(子片)录音。其关键在于确保拷贝出的子片语音信息和母片完全一致,为此采用地址拷贝法。首先母片放音一遍,确认母片的语音信息地址,建立地址索引表;在母片放音的同时,子片同步进行录制拷贝,即在子片相同的地址处进行相应语音信息的录制。地址拷贝法确保了母片和子片的语音信息地址完全一致。下面分软件和硬件电路两部分进行介绍。
2.1 软件的设计
2.1.1 母片语音地址的确定
母片语音地址的确定是整个设计的重点。ISD器件的地址不是通常意义上的字节地址单元,而是内部存储器的行地址。行是语音信息段的基本组成单位。以ISD4004-8MP为例,它内部的3840K闪烁存储器单元共分为1600行,每个地址单元指向其中的一行,即有1600个行地址单元。ISD4004-8MP的录放时间为八分钟,采样频率为8kHz,因此它的每行语音长度为200ms,即地址分辨率为200ms。
ISD器件可以进行多段录放操作,每一段称为一个语音信息段。一个语音信息段由其起始地址、记录的数据和信息结束标志EOM(表示一个语音信息段的结束)三部分组成。ISD器件出厂时,其内部存储器的一行已经设计有多个可能的EOM标志位置。ISD4004系列一行有八个,第一个位于行起始后的25ms处,第八个位于行结束处,剩下EOM标志间隔25ms均匀分布。录音停止后,向器件发送STOP命令,录音的进程不会马上停止,到了下一个最近的可能EOM标志位置时,用一个EOM标志写入器件来记录语音结束的位置。这样做可以使录音的进程在尽可能短的时间内停止。在实际应用中,一行最多只能有一个EOM标志说明语音信息段的结束,无论这个标志在哪里,下一条语音信息将从新的一行开始。所以一个语音信息段可以占用一行或多行存储空间,可以包括多个地址单元;一个地址单元最多只能作为一个独立的段。ISD4004最多可以分为1600个语音信息段。
ISD器件存储阵列中的每一行都可以独立寻址。录放操作都是从一行的行首开始,可以一直持续到行尾,自动无缝跳转到下一行开始,继续录放。不同之处在于放音时,遇到EOM标志时,放音自动停止,产生中断;录音时,需要向器件发送STOP命令,写入一个EOM标志,结束录音。
放音时,每播放一行语音,产生一个RAC周期信号。每个RAC周期表示ISD存储器操作进行了一行。该信号保持175ms的高电平,低电平为25ms。该端可以用于存储器管理。ISD在播放和快进操作中检测到EOM或者OVF标志(表明ISD录放操作已经达到存储器的末尾)时,都会产生中断,变低并保持。中断状态在下一个SPI周期时清除,也就是说每播放完一个语音信息段,便会产生中断。因此,RAC和配合,可以确定每个语音段的起始和结束地址。在硬件设计中,母片ISD4004的引脚接单片机的外部中断" title="外部中断">外部中断INT0引脚,母片ISD404的RAC引脚接单片机的外部中断INT1引脚,通过外部中断INT0的中断程序,判断语音信息段的结束,通过外部中断INT1的中断程序,记录播放的行数目(即行地址),那么下一个地址就是新的语音信息段的开始地址。这样可通过中断服务程序,获取每个语音信息段的地址,然后建立地址索引表,记录其起始地址。
2.1.2 各种子程序" title="子程序">子程序的设计
为了便于编程,对ISD器件的操作都需要设计相应的子程序。其中有:POWERUP(上电" title="上电">上电)、SETPLAY(从指定地址开始放音)、PLAY(从当前地址开始放音)、SETREC(从指定地址开始录音)、REC(从当前地址开始录音)、SETRMC(从指定地址开始快进)、MC(从当前地址开始快进)、STOP(停止当前操作)、STOPWRDN(停止当前操作并掉电)、RINT(读状态OVF和EOM)。在实际应用中,针对母片和子片都有相应的子程序。根据器件的手册,某些操作必需进行适当的延时。播放和录音时,还应遵守适当的操作次序。
(1) POWERUP
上电操作时,要等待Tpud(上电延迟)后器件才能工作。因此,单片机发送完上电指令后,必须等待Tpud,才能发送其它的指令。对于ISD4004-8MP,Tpud=25ms。
(2) STOP
在放音或者录音过程中停止当前操作时,单片机发送完停止指令后,要等待Tstop后器件才能停止工作。对于ISD4004-8MP,Tstop=50ms。
(3) 为了达到较好的放音和录音质量,录音和放音时,建议采用下面的操作顺序:
放音时:①发送POWERUP命令;②等待Tpud;③从指定地址播放时发送SETPLAY命令,从当前地址播放时发送PLAY命令;④结束放音时发送STOP命令或者等待播放操作检测到EOM或者OVF时自动停止。⑤等待Tstop。
录音时:①发送POWERUP命令;②等待Tpud;③再次发送POWERUP命令;④等待2倍Tpud;⑤从指定地址录音时发送SETREC命令;从当前地址录音时发送REC命令;⑥发送STOP命令,结束录音;⑦等待Tstop。
2.1.3 拷贝程序的设计
拷贝前,先把母片语音完全播放一遍,建立地址索引表。母片语音地址确定后,可以开始语音拷贝。通过相关子程序,从母片地址索引表中调入不同语音段的地址,开始播放,子片在相同的地址开始录音。播放到一个语音段结束时,母片检测到EOM标志,放音结束,并产生中断,单片机调用中断程序,向子片发送STOP命令,写入EOM标志,表示语音结束。延时Tstop,跳出中断后,记录已经录制的语音数目,并调入下一条语音的地址,重复进行操作,直到地址表查询完毕或者母片检测到OVF标志,表示全片放音结束,录音结束。
2.2 硬件电路的设计
系统硬件电路图如图1所示。主要由单片机AT89C51、电源转换芯片MAX603、有关按键和跳线、两片同型号ISD4004-8MP(一片为母片,一片为子片)和运放μA741等组成。硬件设计时,要注意以下几个方面:
(1)单片机引脚模拟SPI接口,编程时应注意其时序。
(2)母片INT和RAC引脚分别接单片机外部中断INT0和INT1,应有上拉电阻。
(3)芯片采用+3V电源供电,放音时最大消耗电流为30mA,录音时最大消耗电流为40mA,因此ISD芯片要有独立的电源提供稳定的供电。设计中采用MAX603电压转换芯片。
(4)录音时输入信号既可采用单端输入(信号接在同相模拟输入端ANA IN+),也可采用差分输入(信号同时接在同相模拟输入端ANA IN+和反相模拟输入端ANA IN-)。采用单端输入时,输入信号的峰峰值最大为32mV,此时器件输出AUD OUT的峰峰值大约为450mV。为了拥有较好的音质,需要对母片的声音输出进行衰减,再通过去耦电容" title="去耦电容">去耦电容,接到子片的同相模拟输入端ANAIN+。而反相模拟输入端ANAIN-则通过去耦电容接地。两个去耦电容大小值应相同。
(5)同型号芯片互相拷贝,应使用ISD器件的内部时钟,即XCLK接地;采用音质优先模式,保障拷贝出的器件不会出现语速失真的情况。
(6)为了使噪声最小,器件的模拟电路和数字电路应使用不同的电源总线,并且分别引到外封装的不同引脚上,模拟电源和数字电源最好分别走线,尽可能在靠近电源处相连,去耦电容应尽量靠近器件。器件内部的模拟电路和数字电路也应使用不同的地线。几个Vssa尽量在引脚焊盘上相连,并且用低阻通路连到地线上,Vssd也用低阻通路连接到地线上。
3 系统测试
拷贝完毕后,对录制的子片进行测试。系统采用夹具设计,把母片和子片取出,把子片放在母片的位置,通过更改相应的跳线,使系统工作在放音模式下。采用顺序播放(即语音按照顺序连续播放)方法,确认录入子片的全部语音信息。按地址播放(按照母片的地址索引表从子片的相应地址逐条播放)方式,确认子片语音信息地址和母片完全一致。通过测试,子片语音信息地址与母片完全一致,语音质量接近于母片质量,达到了较好的效果。
经测试,本系统适用于ISD4004系列的全部型号,只需要在程序中更改为各自型号的Tpud和Tstop即可。原则上,同型号和时间长度的ISD语音芯片都可以用本系统拷贝,但由于不同型号器件每行语音长度(即地址分辨率)不同,它们之间的拷贝可能会出现未知的问题。
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
…………
;初始化单片机
LCALL INIT_MCU
;初始化母片ISD4004,延时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
;置中断标志
SETB FLG_ISD_INT
;拷贝程序
;从语音信息地址调用子程序ISD_ADDRESS_COPY,
;从索引表中调入地址
ISD_COPY1:
LCALL ISD_ADDRESS_COPY
; 从指定地址开始播放和录音
LCALL ISD1_SETPLAY
LCALL ISD2_SETREC
;从当前地址开始播放和录音
LCALL ISD1_PLAY
LCALL ISD2_REC
;判断是否手动结束拷贝操作
ISD_COPY2:
JNB ISD_STOP_KEY, ISD_COPY3
;判断一段语音是否播放完毕,是否中断处理完毕
;播放完毕重置中断标志
JB FLG_ISD_INT, ISD_COPY2
SETB FLG_ISD_INT
;延迟Tstop
LCALL DELAY_25MS
LCALL DELAY_25MS
;记录拷贝个数,×× 为需要拷贝的语音数目
;判断是否拷贝完毕,未完则继续拷贝
INC COPY_CNTR
MOV A, COPY_CNTR
CJNE A, ××, ISD_COPY1
;拷贝结束,返回主程序
ISD_COPY3:
LCALL ISD1_STOP
LCALL ISD2_STOP
LJMP MAINLOOP
;播放程序,顺序播放方式
;设置从地址00开始进行播放
ISD_PLAY1:
MOV ISD_ADRESS_H, #00H
MOV ISD_ADRESS_L, #00H
LCALL ISD1_SETPLAY
;开始播放
ISD_PLAY2:
LCALL ISD1_PLAY
;判断是否手动结束播放
ISD_PLAY3:
JNB ISD_STOP_KEY, ISD_PLAY4
;判断一段语音是否播放完毕,是否中断处理完毕
;播放完毕重置中断标志
JB FLG_ISD_INT, ISD_PLAY3
SETB FLG_ISD_INT
;继续播放
JMP ISD_PLAY2
;播放结束
ISD_PLAY4:
LCALL ISD1_STOP
LJMP MAINLOOP
…………
拷贝出的子片已经应用在排队管理系统的语音部分。在实际使用中,子片完全可以替代母片,效果良好。本系统不但解决了ISD4004系列器件的语音录制问题,而且复制出的器件地址完全一致,与传统的录制方法相比,有很大的优势。
参考文献
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语音器件分段地址的获取.电子技术应用,1999;25(10):64~65