首页 > 代码库 > 也说alsa音乐播放(mp3文件从零开始)
也说alsa音乐播放(mp3文件从零开始)
首先也是最重要的是:我说大话了,本文也就是一个思路而已,如果你是音乐播放小白也想弄明白原理可以往下看,否则,return -1;
现有的音乐格式千差万别,于是就有了ffmpeg话说这个框架真是够牛逼,音频视频转码都不在话下,我是个死脑筋,遇到不懂的老是想弄明白,对于音乐播放感觉是一头雾水,经过几天的研究以后大致想明白了,对一个mp3文件要播放出来需要经过几个步骤:
1.转码,其实也就是提取文件中有用的音频信息2.经过第一步得到的wav波形文件
3.调用声卡来播放wav文件,对于linux 3.0以后的内核一般为alsa驱动,windows对wav也是天然支持的
关于转码可以见大婶写的转码系列教程http://lfp001.iteye.com/blog/739585
转码命令:ffmepg -i 1.mp3 -f wav 1.wav
编译: gcc -o alsa alsa.c -lasound
播放命令
./alsa 1.wav
//alsa.c 编写者未知,纯属引用 #include<stdio.h> #include<stdlib.h> #include <string.h> #include <alsa/asoundlib.h> struct WAV_HEADER { char rld[4]; //riff 标志符号 int rLen; char wld[4]; //格式类型(wave) char fld[4]; //"fmt" int fLen; //sizeof(wave format matex) short wFormatTag; //编码格式 short wChannels; //声道数 int nSamplesPersec ; //采样频率 int nAvgBitsPerSample;//WAVE文件采样大小 short wBlockAlign; //块对齐 short wBitsPerSample; //WAVE文件采样大小 char dld[4]; //”data“ int wSampleLength; //音频数据的大小 } wav_header; int set_pcm_play(FILE *fp); int main(int argc,char *argv[]) { if(argc!=2) { printf("Usage:wav-player+wav file name\n"); exit(1); } int nread; FILE *fp; fp=fopen(argv[1],"rb"); if(fp==NULL) { perror("open file failed:\n"); exit(1); } nread=fread(&wav_header,1,sizeof(wav_header),fp); printf("nread=%d\n",nread); //printf("RIFF 标志%s\n",wav_header.rld); printf("文件大小rLen:%d\n",wav_header.rLen); //printf("wld=%s\n",wav_header.wld); //printf("fld=%s\n",wav_header.fld); // printf("fLen=%d\n",wav_header.fLen); //printf("wFormatTag=%d\n",wav_header.wFormatTag); printf("声道数:%d\n",wav_header.wChannels); printf("采样频率:%d\n",wav_header.nSamplesPersec); //printf("nAvgBitsPerSample=%d\n",wav_header.nAvgBitsPerSample); //printf("wBlockAlign=%d\n",wav_header.wBlockAlign); printf("采样的位数:%d\n",wav_header.wBitsPerSample); // printf("data=http://www.mamicode.com/%s/n",wav_header.dld);>
也说alsa音乐播放(mp3文件从零开始)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。