sd卡播放flac无损音乐在线播放吗

用SD卡或U盘播放无损音乐吗_百度知道
用SD卡或U盘播放无损音乐吗
我有更好的答案
这些是数据存放的东西。。。和能否播放没有直接联系。主要还是看你硬件是否支持这些SD卡和U盘吧。
数据存放。歌曲。文件。档案。压缩包全是数据。这些全是一样的。如果是运行软件就会不一样加了一个IP(指针)
如果你学过一点编程应该知道吧(不献丑。也没学好。现在基本就是忘的差不多了)
采纳率:77%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。FLAC无损音频播放
FLAC无损音频播放
无损音频不存在音频损失的问题,可以获取到原始PCM采样数据,代表数字音频最高的保真水准。随着储存设备容量的增大,网络传输带宽的提升,无损音频越来越受到人们的追捧。
1. FLAC概述
常用的无损音频格式有WAV、FLAC、APE等等。WAV格式直接保存原始的PCM数据,造成容量过大,不方便使用。FLAC和APE为无损音频压缩格式,通过压缩算法重新对PCM数据进行编码,减小容量,同时可以通过可逆的算法解压还原成PCM数据。在众多的无损音频压缩格式中,FLAC被认为是最具潜力的一种无损音频压缩格式。
FLAC(FreeLossless Audio Codec)是一套自由的音频压缩编解码器,不同于其它有损音频压缩格式,FLAC格式不会破坏任何原有的音频资讯。这种压缩类似于ZIP的方式,但FLAC是专门针对PCM音频特点设计的压缩格式,其压缩率要大于ZIP方式。FLAC是一种非专有的,不受专利影响,开放源码,并且完全免费的无损音频压缩格式,它的编码算法相当成熟,已经通过了严格的测试,被很多软件以及硬件音频产品所支持,如支持大多数的操作系统,包括Windows、Unix类系统、Mac等等,应用在移动多媒体播放器、汽车音响、家用音响等等设备。
2、FLAC库移植
FLAC编解码复杂度比较低,对计算要求不高,在普通的硬件平台就可以轻松实现实时解码播放,因此可以在LPC5411x开发平台上实现FLAC音频的播放。FLAC有专门的项目组维护,可以在下载完整的FLAC编解码源码,对于C开发环境,其对应的库为libFLAC。libFLAC包含了操作系统相关的数据结构,并且对于cortex-m平台来说,功能过于臃肿,需要对该库做较大的改动才能完成移植,并不是最适合的。
此处采用rockbox嵌入式项目中的FLAC解码库,减少移植的工作量。rockbox是一个免费的数字音频播放器框架,支持众多的音频编解码器。其采用的FLAC解码库移植于libffmpeg,与FLAC解码相关的源码有:
bitstream.c/bitstream.h,获取位流源码实现。
decoder.c/decoder.h,FLAC解码实现。
arm.S/arm.h,针对cortex-m,MDK下修改的LPC解码arm汇编实现,非必须文件,用于优化Level 8的解码速度。在decoder.c中取消定义CPU_ARM宏则取消arm汇编的优化实现。
golomb.h和tables.c为编码头文件和常数表实现。
把该库源码加入LPC5411x工程编译即可。
3、FLAC播放
FLAC音频的播放涉及到音频驱动、SD卡读写文件的实现,可以参考前面的章节。播放实现主要流程如下:
用Flac_ParceMetadata()函数打开FLAC音频文件并解析FLAC头,获取采样位数、采样频率、声道数等等音频格式。
static int Flac_ParceMetadata(constTCHAR filePath[], FLACContext* context)
UINT s1 = 0;
int metaDataFlag = 1;
char metaDataChunk[128];
unsigned long metaDataBlockLength = 0;
char* tagC
if(f_open(&FLACfile, filePath,FA_READ) != FR_OK) {
PRINTF("Couldnot open: %s\r\n", filePath);
f_read(&FLACfile, metaDataChunk, 4,&s1);
if(s1 != 4) {
PRINTF("Readfailure\r\n");
f_close(&FLACfile);
if(memcmp(metaDataChunk,"fLaC", 4) != 0) {
PRINTF("Nota FLAC file\r\n");
f_close(&FLACfile);
// Now we are at the stream block
// Each block has metadata header of 4bytes
f_read(&FLACfile, metaDataChunk, 4,&s1);
if(s1 != 4) {
PRINTF("Readfailure\r\n");
f_close(&FLACfile);
//Check if last chunk
if(metaDataChunk[0] & 0x80)metaDataFlag = 0;
metaDataBlockLength = (metaDataChunk[1]&& 16) | (metaDataChunk[2] && 8)
| metaDataChunk[3];
//STREAMINFO block
if((metaDataChunk[0] & 0x7F) == 0) {
if(metaDataBlockLength& 128) {
PRINTF("Metadatabuffer too small\r\n");
f_close(&FLACfile);
f_read(&FLACfile,metaDataChunk, metaDataBlockLength, &s1);
if(s1!= metaDataBlockLength) {
PRINTF("Readfailure\r\n");
f_close(&FLACfile);
&bits&Field in STEAMINFO
&16&min block size (samples)
&16&max block size (samples)
&24&min frams size (bytes)
&24&max frams size (bytes)
&20&Sample rate (Hz)
&3&(number of channels)-1
&5&(bits per sample)-1.
&36&Total samples in stream.
&128&MD5 signature of the unencoded audio data.
context-&min_blocksize= (metaDataChunk[0] && 8) | metaDataChunk[1];
context-&max_blocksize= (metaDataChunk[2] && 8) | metaDataChunk[3];
context-&min_framesize= (metaDataChunk[4] && 16) |
(metaDataChunk[5] && 8) | metaDataChunk[6];
context-&max_framesize= (metaDataChunk[7] && 16) |
(metaDataChunk[8] && 8)| metaDataChunk[9];
context-&samplerate= (metaDataChunk[10] && 12) |
(metaDataChunk[11] && 4) | ((metaDataChunk[12] & 0xf0)&& 4);
context-&channels= ((metaDataChunk[12] & 0x0e) && 1) + 1;
context-&bps= (((metaDataChunk[12] & 0x01) && 4) |
((metaDataChunk[13] &0xf0)&&4) ) + 1;
//Thisfield in FLAC context is limited to 32-bits
context-&totalsamples= (metaDataChunk[14] && 24) | (metaDataChunk[15] && 16) |
(metaDataChunk[16] &&8) | metaDataChunk[17];
if(f_lseek(&FLACfile,FLACfile.fptr + metaDataBlockLength) != FR_OK) {
PRINTF("FileSeek Failed\r\n");
f_close(&FLACfile);
} while(metaDataFlag);
// track length in ms
context-&length =(context-&totalsamples / context-&samplerate) * 1000;
// file size in bytes
context-&filesize =f_size(&FLACfile);
// current offset is end of metadata inbytes
context-&metadatalength =FLACfile.
// bitrate of file
context-&bitrate =((context-&filesize - context-&metadatalength) * 8) / context-&
f_close(&FLACfile);
根据解析的音频格式,对I2S音频驱动初始化。
PRINTF("Playing %s\r\n",filePath);
PRINTF("Mode: %s\r\n",context.channels==1?"Mono":"Stereo");
PRINTF("Samplerate: %d Hz\r\n",context.samplerate);
PRINTF("SampleBits: %dbit\r\n", context.bps);
PRINTF("Samples: %d\r\n",context.totalsamples);
I2S_SetSamplerate(context.samplerate);
I2S_TxStart();
调用flac_decode_frame()从fileChunk缓存区读取一块的码流数据进行解码,解码出来的左声道数据放在decodedSamplesLeft缓存区,右声道数据放在decodedSamplesRight缓存区。
if (flac_decode_frame(&context,decodedSamplesLeft, decodedSamplesRight,
fileChunk,bytesLeft, yield) & 0) {
PRINTF("FLACDecode Failed\r\n");
解码的左右声道数据填充到音频输出缓存,进行播放。解码一块产生context.blocksize个音频数据,一个一个填充到音频输出缓存,如果输出缓存满,则等待播放完一帧后,继续填充。
while (i & context.blocksize) {
//LeftChannel
samplePair[0]= (uint16_t) (decodedSamplesLeft[i]&&sampleShift);
if(context.channels==2) {
//RightChannel
samplePair[1]= (uint16_t) (decodedSamplesRight[i]&&sampleShift);
//RepeatLeft channel if mono
samplePair[1]= (uint16_t) (decodedSamplesLeft[i]&&sampleShift);
while(WriteIndex == I2SState.TxReadIndex) {
//Samplepair is 4 bytes, 16-bit mode
if(WriteIndex != I2SState.TxReadIndex) {
I2SState.TxBuffer[I2SState.TxWriteIndex][Index]=
(samplePair[0]&0xffff) |(samplePair[1]&&16);
if(Index &= AUDIO_FRAME_SIZE) {
I2SState.TxWriteIndex= WriteI
if(WriteIndex &= AUDIO_NUM_BUFFERS-1) {
WriteIndex= 0;
WriteIndex++;
从SD卡读取下一块码流数据到fileChunk缓存区,跳到步骤c,如此循环解码、填充音频输出流、读取码流数据这些过程,直至文件结束,解码完毕。
//calculate the number of valid bytesleft in the fileChunk buffer
bytesUsed = context.gb.index/8;
bytesLeft -= bytesU
//shift the unused stuff to the front ofthe fileChunk buffer
memmove(fileChunk,&fileChunk[bytesUsed], bytesLeft);
//Refill the fileChunk buffer
f_read(&FLACfile,&fileChunk[bytesLeft], MAX_FRAMESIZE - bytesLeft, &s1);
//add however many were read
bytesLeft += s1;
播放&&天空之城&&主题曲sky city.flac如下:
MDK工程,包含SD卡文件读写代码,I2S播放驱动,FLAC无损音频文件解码播放的实现,FLAC音频文件sky city.flac。
没有更多推荐了,17款sd卡能听无损音乐吗【奥迪a4l吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:87,719贴子:
17款sd卡能听无损音乐吗
来个大神教下怎么下载 什么格式
7月14-15日无锡车展,奥迪a4l同期低价,特惠让利到底,报名送门票+签到礼等!订车送6668元豪华大礼包,整点抽取自行车,电烤箱等大奖.
我也想知道 你的sd卡是大的卡还是小的卡啊
网上买一个u盘阿,里头全是无损的
你在汽车之家论坛上找 有个专门教sd卡u盘什么下载高品质音乐的
我用的flac格式
高品质~。无损的好像听不来
可以的。买sd大卡,百度搜车载无损音乐。音乐下载wav的,不要下flac~刚入手17进取。。
flac都可以
手机内存卡得买个壳
贴吧热议榜
使用签名档&&
保存至快速回贴请问无损音乐怎么下到sd卡里_百度知道
请问无损音乐怎么下到sd卡里
我有更好的答案
无损音乐,一般有flac格式,或是ape格式的,它不同于MP3格式,在电脑文件的后面通常是写有这些格式的符号,比如一首歌叫Beat It,这首歌是MP3格式那么后面就写.MP3,也就是Beat It.Mp3这样的。无损音乐可以去专门下载无损音乐的网站下载你想要的歌曲。可以自己去百度搜索找找这类型的网站,有很多都提供免费下载的。你的sd卡是什么设备里的sd卡?是手机,还是MP4一类的电子设备呢?不管怎么样,这类的电子设备通常有自带的数据线,可以插到电脑上,电脑屏幕右下角会提示有新硬件,你打开“计算机”或是“我的电脑”,在那里多出来的磁盘就是你插入的设备的储存盘。你把下载好的音乐文件,无损的话就是后面是.flac或是.ape的文件全部拖动或是复制、剪切进去就可以了。
采纳率:87%
为您推荐:
其他类似问题
无损音乐的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。播放SD卡上的无损高品质音乐吗_百度知道
播放SD卡上的无损高品质音乐吗
我有更好的答案
所谓的无损其实还是多少有损的 尤其是网上大部分的所谓无损音乐例如APE,FLAC格式,有很多都是320KPS的冒牌货,利用专业测试看频谱就可以识别了。所以还是建议高级发烧友选择正版CD,一般情况下选择高品质的(例如320,192,128的)MP3就可以了。
采纳率:95%
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 无损音乐在线网站 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信