使用/dev/dsp的wav文件播放器源码
转载于:http://blog.csdn.net/dux003/article/details/5459423
#include
#include
#include
#include
#include
void usage(const char* self)
{
printf("usage:/n");
printf("/t%s
[-c channels -r rate -s samplesize] wavfile/n",
self);
};
int set_fmt(int fd, int channels, int rate, int
samplesize)
{
int c =
channels;
if
(ioctl(fd, SNDCTL_DSP_CHANNELS, &c) == -1)
exit(1);
if
(ioctl(fd, SNDCTL_DSP_SPEED, &rate) == -1)
exit(1);
if
(ioctl(fd, SNDCTL_DSP_SAMPLESIZE, &samplesize) ==
-1)
exit(1);
return
0;
}
int main(int argc, char **argv)
{
int i =
1;
char*
filename = NULL;
int channels
= 1;
int
samplerate = 8000;
int
samplesize = 16;
int
dsp;
int
fd;
char
buf[1024];
int
len;
if
(argc%2)
{
usage(argv[0]);
exit(1);
}
while (i
< argc)
{
if (argv[i][0] != '-')
{
filename = argv[i];
i++;
}
else
{
if (i+1 < argc)
{ switch
(argv[i][1])
{
case 'c':
channels = atoi(argv[i+1]);
i += 2;
break;
case 'r':
samplerate = atoi(argv[i+1]);
i += 2;
break;
case 's':
samplesize = atoi(argv[i+1]);
i += 2;
break;
default:
perror("bad option/n");
exit(1);
}
}
else
{
perror("bad options/n");
exit(1);
}
}
}
dsp =
open("/dev/dsp", O_RDWR);
if (dsp ==
-1)
{
perror("can not open /dev/dsp/n");
exit(1);
}
set_fmt(dsp,
channels, samplerate, samplesize);
fd =
open(filename, O_RDWR);
if (fd ==
-1)
{
close(dsp);
fprintf(stderr, "can not open file %s/n",
filename);
exit(1);
}
while ((len
= read(fd, buf, 1024)) > 0)
{
write(dsp, buf, len);
}
close(fd);
close(dsp);
return
0;
}
使用/dev/dsp的wav文件播放器源码的更多相关文章
- Android音乐播放器源码(歌词.均衡器.收藏.qq5.0菜单.通知)
一款Android音乐播放器源码,基本功能都实现了 qq5.0菜单(歌词.均衡器.收藏.qq5.0菜单.通知) 只有向右滑动出现,菜单键和指定按钮都还没有添加. 源码下载:http://code.66 ...
- 一款非常简单的android音乐播放器源码分享给大家
一款非常简单的android音乐播放器源码分享给大家,该应用虽然很小,大家常用的播放器功能基本实现了,可能有点还不够完善,大家也可以自己完善一下,源码在源码天堂那里已经有了,大家可以到那里下载学习吧. ...
- 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- 项目源码--Android3D影音播放器源码
下载源码 技术要点: 1.本地音乐管理 2.音频流的解码 3. UI控件的综合使用 4. 视频流的解码 5. 动态更换皮肤 6. 3D效果的实现 7. 源码带详细的中文注释 ...... 详细 ...
- 实例源码--Android简单音乐播放器源码
下载源码 技术要点: 1.本地音乐管理 2.在线音乐听歌.下载 3.音频流的解码 4. HTTP通信模块 5. Sqlite数据库 6. 源码带详细的中文注释 ...... 详细介绍: 1.本 ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
- HTML5音频(自定义mp3播放器源码)
audio对象 src兼容.ogg .wav .mp3 <audio controls src='data/imooc.wav'></audio> width autoplay ...
- H5音乐播放器源码地址
源码获取 https://pan.baidu.com/s/1pR_bhIFFQWU6TK9ZvrRWIA 安卓安装包下载地址 https://pan.baidu.com/s/1Z8HF5LY ...
随机推荐
- 新建Maven项目Index.jsp文件报错解决方法
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path in ...
- Codeforces 610D Vika and Segments 线段树+离散化+扫描线
可以转变成上一题(hdu1542)的形式,把每条线段变成宽为1的矩形,求矩形面积并 要注意的就是转化为右下角的点需要x+1,y-1,画一条线就能看出来了 #include<bits/stdc++ ...
- gym强化学习入门demo——随机选取动作 其实有了这些动作和反馈值以后就可以用来训练DNN网络了
# -*- coding: utf-8 -*- import gym import time env = gym.make('CartPole-v0') observation = env.reset ...
- GitLab删除项目操作
相关项目:Github删除项目 刚开始找了半天没找到删除按钮在哪,现在记录一下,分享. 第一步:点进入项目 第二步:进入项目Settings 第三步:往下拉,找到Remove,删除即可.
- Python - 批量改变文件名
import osimport sysimport datetime path = "E:\python_test"datename = '2016-02-11'a = datet ...
- C#中DEV控件,XtraTabPage得小方法
DEV控件设计窗体程序,XtraTabPage用到的小方法,欢迎大家评论,分享技术! //DEV中的选项卡 private bool TabCtlPageExist(string pageName) ...
- dirent.h
#include <dirent.h> 是POSIX.1标准定义的unix类目录操作的头文件,包含了许多UNIX系统服务的函数原型,例如opendir函数.readdir函数. opend ...
- 导入的Android项目出现红色感叹号
[原因] 项目中存在导入包,在项目导入之后,classpath指向的包路径出现错误,即需要重新Bulidpath [解决方式] 右键项目名称 BuildPath —> Configure B ...
- unix的输入输出操作
unix的输入输出操作 使用的头文件 #include <unistd.h> #include <stdio.h> 函数说明 ssize_t read(int fd, void ...
- 团队队列(列和map结合的经典运用)
Queues and Priority Queues are data structures which are known to most computer scientists. The Team ...