完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请教下,播放flac音乐时,屏幕有干扰,是怎么回事啊 ? 刚开始时貌似有地方卡住了的感觉,会发出卡卡卡的使用,但是过一会就好了,声音就正常播放了,只是屏幕有干扰发生,不知道是怎么情况 ??? 播放部分代码如下: int flac_play_song(char* path) { FLACContext fc; int fd; int n; int bytesleft; int consumed; char tmp[20]; static volatile int8_t i; unsigned char *filebuf; unsigned short *temp_buffer; char value=0; uint8_t res; int16_t *PCM_buffer0=0; int16_t *PCM_buffer1=0; uint8_t *p8; UINT br; u32 flac_fptr=0; char PlayAddr[100] = {0}; strcpy(PlayAddr, (const char *)path); audiodev.file = (FIL*)mymalloc(SRAMDTCM,sizeof(FIL)); res=f_open(audiodev.file,(char*)PlayAddr,FA_READ); //读取文件错误 if(res!=FR_OK) { myfree(SRAMDTCM, audiodev.file); return 0xff; } flacctrl = mymalloc(SRAMDTCM,sizeof(__flacctrl)); /* Read the metadata and position the file pointer at the start of the first audio frame */ flac_init(audiodev.file, flacctrl, &fc); dump_headers(&fc); f_lseek (audiodev.file , audiodev.file->fptr); printf("波特率:%dKbpsnrn",fc.bitrate); printf("采样率:%dnrn",fc.samplerate); if (fc.length/1000%60>=10) printf("总时间:%d:%dnrn",fc.length/1000/60, fc.length/1000%60); else printf(tmp,"总时间:%d:0%dnrn",fc.length/1000/60, fc.length/1000%60); printf("块大小:%dnrn",fc.max_blocksize); PCM_buffer0 = (int16_t *)mymalloc(SRAMEX,MAX_BLOCKSIZE * MAX_CHANNELS * 2); PCM_buffer1 = (int16_t *)mymalloc(SRAMEX,MAX_BLOCKSIZE * MAX_CHANNELS * 2); filebuf = (uint8_t *)mymalloc(SRAMEX,MAX_FRAMESIZE * 2); //内存分配. if (filebuf==NULL) { printf("nr no mem!!nrn"); goto fail; } temp_buffer= (unsigned short *)mymalloc(SRAMEX,MAX_FRAMESIZE * MAX_CHANNELS * 2); //内存分配. if((fc.min_blocksize != fc.max_blocksize) || (fc.max_blocksize > MAX_BLOCKSIZE ) || (fc.max_framesize > MAX_FRAMESIZE)) { printf("nrOo Do not support this file!!nrn"); printf("You can choose another Converter.Such as foobar2000 ^_^nrn"); goto fail; } audiodev.i2***uf1 = (uint8_t *)PCM_buffer0; audiodev.i2***uf2 = (uint8_t *)PCM_buffer1; FLAC_Stop(); FLAC_EnterPlayMode(); //进入播放模式 FLAC_SaiConfInit(flacctrl->bps, flacctrl->samplerate, flacctrl->outsamples); __LTDC_drv->LTDC_DispStringAt(5, 375, LCD_COLOR_BLUE, //显示当前播放的 .wav文件名字 LCD_COLOR_WHITE, &FontAscii8x16, (const uint8_t *)PlayAddr); f_read(audiodev.file,filebuf,MAX_FRAMESIZE,&br);//读取最大帧长数据 bytesleft = br; flac_fptr = audiodev.file->fptr; //记录当前的文件位置. FLAC_Start(); //开始播放 while (bytesleft) { while(audiodev.AudioTransferEnd==0)//等待传输完成 { }; audiodev.AudioTransferEnd=0; if(audiodev.AudioSwitchBuf == 0) { p8 = audiodev.i2***uf1; } else { p8 = audiodev.i2***uf2; } fc.decoded0 = (int32_t *)p8; fc.decoded1 = (int32_t *)temp_buffer; flac_decode_frame(&fc,filebuf,bytesleft,(int16_t *)p8); consumed=fc.gb.index/8; rt_memmove(filebuf,&filebuf[consumed],bytesleft-consumed); bytesleft-=consumed; f_read(audiodev.file, &filebuf[bytesleft],MAX_FRAMESIZE-bytesleft, &br); if (br > 0) { bytesleft+=br; } flac_fptr=audiodev.file->fptr; //记录当前的文件位置. while(audiodev.status&(1<<1)) //正常播放中 { FLAC_MsgShow(audiodev.file); //得到总时间和当前播放的时间 audiodev.totsec=flacctrl->totsec; //参数传递 audiodev.cursec=flacctrl->cursec; audiodev.bitrate=flacctrl->bitrate; audiodev.samplerate=flacctrl->samplerate; audiodev.bps=flacctrl->bps; if(audiodev.status&0X01)break; //没有按下暂停 // else // HAL_Delay(5); // delay_ms(1000/OS_TICKS_PER_SEC); } if((audiodev.status&(1<<1))==0) //请求结束播放/播放完成 { break; } } fail: Getmemtablestatus(); //获取内存块状态 f_close(audiodev.file); myfree(SRAMDTCM,audiodev.file); myfree(SRAMDTCM,flacctrl); myfree(SRAMEX,PCM_buffer0); myfree(SRAMEX,PCM_buffer1); myfree(SRAMEX,filebuf); myfree(SRAMEX,temp_buffer); return value; } 具体效果你可以看看这个视频 http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1 播放其他的 wav, mp3 都是完全没有任何问题的,而且只要不播放 flac ,显示完全正常 |
|
相关推荐
9个回答
|
|
有干扰?是闪烁?屏幕是什么接口方式?
|
|
|
|
rgb接口的,但是播放ape,wav等音频屏幕显示非常好,就唯独这个 flac 音频就不行,估计应该是什么地址搞错了,但是具体的也不清楚到底是哪里出了问题,播放 flac 音频时,声音貌似还可以 |
|
|
|
7vyydyfwef 发表于 2018-12-10 13:52 你这里的屏幕闪烁指的是:乱码,还是数据闪烁? |
|
|
|
屏幕闪烁,目前指的显示貌似有干扰条纹出现,另外,显示的汉字乱码,但是 洋文显示正常, 等播放完 flac 文件 后,再播放其他 音频音乐时,此时播放出来的音乐貌似也不行,貌似有些断断续续的声音。 如果不播放 flac文件,连续播放 wav,mp3, ape 格式的都完全没有问题。 播放其他格式的 音乐,显示都是正常的,包括 中文。 |
|
|
|
7vyydyfwef 发表于 2018-12-10 14:30 你这么来说,我个人猜测,是不是屏幕的数据线受到干扰。。。 |
|
|
|
本帖最后由 hpdell 于 2017-9-25 22:42 编辑 具体效果你可以看看这个视频 http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1 播放其他的 wav, mp3 都是完全没有任何问题的,而且只要不播放 flac ,显示完全正常 |
|
|
|
你好,我刚刚把 优化基本设置为最高貌似就可以了, 播放 flac 的文件屏幕不闪,但是 播放完后不能够播放其他 类型的 音乐文件了, 我的编译器使用的 是 iar 这个问题是不是说明 这个 flac 的库文件有些指针写的不支持 iar 编译器啊 ? 或者是需要修改哪里 ?? |
|
|
|
我觉得乱码或者闪烁,就两个原因,要么显示数据有问题,要么数据线受到干扰。。。 |
|
|
|
如果数据线收到干扰,那么播放 wav,MP3, ape 的音乐都完全不会闪烁啊 硬件都是一样的 这个程序我是移植 keil 工程的,现在把他移植到 iar 的工程上来,有没有可能是底层的有些不兼容造成的啊 ? |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
969 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
954 浏览 2 评论
2066 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1162 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1587 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 06:12 , Processed in 0.790988 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号