请音频驱动高手进,能帮助解决问题,本人即付现金1000元作为感谢
本人参照网上的wavedev2移植手册以及s3c6410开发板自带的ac97,iis音频驱动,改编了pcm口的音频驱动。
其pcm口的初始化工作有:选择MPLL时钟、设置FSYNC\SCLK分频,并将PCM配置为dma方式工作。
驱动程序的其他部分,比如中断\IST、DMA申请、执行都与例程相同。 pcm驱动已编译为dll文件,并成功加载激活。我将DMA的输出目的地址设置为PCM TX FIFO的地址了。
我自己产生了2个wav文件,同为16bit,数据长度固定(声音数据由固定的2个数据不断重复进行填充)。当用8khz采样率播放,可播放6s,若用48k采样率播放,可播放1s。
问题如下: 在wince6下,我使用waveOutWrite(hWaveOut, lpWaveHdr, sizeof(WAVEHDR));函数完成该音频的播放。当我使用ac97音频驱动时,听到正常的1s、6s信号,和我电脑播放的声音一致。
而用pcm驱动时听到的却是48s的信号,我用示波器监视pcm的数据输出发现它输出了很多不正确的数据但是PCM的FSYNC确实为8khz,由于pcm时序为1个FSYNC输出一个数据,所以我的输出采样率确实为8khz,当我把FSYNC提高至48khz后,输出6s信号。感觉我的dma传输时产生了6倍的新的错误的数据,使得当我用8k采样率播放时,足足播放了48s。
现诚征wavedev2驱动高手,如能帮助本人解决问题,本人愿汇款1000元以示感谢,价格可商量。本人手机13303602861,qq 122688188 可随时与本人联系
[解决办法]
帮顶帮顶,有提成没?哈哈
[解决办法]
建议用cool edit生成一段正玄波来播放,然后用示波器来看PCM数据。这样就可以很明显的看出音频数据是怎么失真的,哪里多了或者哪里缺了。这样可以看看是不是DMA的问题。