[開發記錄] 函式庫調用 - 使用ALSA進行音訊資料擷取 之其一
来源:互联网 发布:旅游数据统计 编辑:程序博客网 时间:2024/06/05 05:04
目前打算使用ALSA進行資料擷取,
關於ALSA API所搜尋到的網路資料( http://equalarea.com/paul/alsa-audio.html ),
其中有一段 Mini Capture程式,並作了些許修改,如底下所示:
//---------------ALSA 測試程式---------------#include <stdio.h>#include <stdlib.h>#include <alsa/asoundlib.h> int main (int argc, char *argv[]){int i;int err;unsigned int sample_rate;int sample_dir;int size;snd_pcm_uframes_t frames;char *buf;snd_pcm_t *capture_handle;snd_pcm_hw_params_t *hw_params;if ((err = snd_pcm_open(&capture_handle, argv[1], SND_PCM_STREAM_CAPTURE, 0)) < 0) {fprintf (stderr, "cannot open audio device %s (%s)\n", argv[1], snd_strerror (err));exit(1);}printf("open OK!\n"); if ((err = snd_pcm_hw_params_malloc(&hw_params)) < 0) {fprintf (stderr, "cannot allocate hardware parameter structure (%s)\n", snd_strerror (err));exit(1);}printf("set allocation OK!\n"); if ((err = snd_pcm_hw_params_any(capture_handle, hw_params)) < 0) {fprintf (stderr, "cannot initialize hardware parameter structure (%s)\n", snd_strerror (err));exit(1);}printf("set para OK!\n");if ((err = snd_pcm_hw_params_set_access(capture_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {fprintf (stderr, "cannot set access type (%s)\n", snd_strerror (err));exit(1);}printf("set access OK!\n");if ((err = snd_pcm_hw_params_set_format(capture_handle, hw_params, SND_PCM_FORMAT_S16_LE)) < 0) {fprintf (stderr, "cannot set sample format (%s)\n", snd_strerror (err));exit(1);}printf("set sample format OK!\n");sample_rate=44100;sample_dir=0;//snd_pcm_hw_params_set_rate_near (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir) if ((err = snd_pcm_hw_params_set_rate_near(capture_handle, hw_params, &sample_rate, &sample_dir)) < 0) {fprintf (stderr, "cannot set sample rate (%s)\n", snd_strerror (err));exit(1);}printf("set sample rate OK!\n");if ((err = snd_pcm_hw_params_set_channels(capture_handle, hw_params, 2)) < 0) {fprintf (stderr, "cannot set channel count (%s)\n", snd_strerror (err));exit(1);}printf("set channel OK!\n");if ((err = snd_pcm_hw_params(capture_handle, hw_params)) < 0) {fprintf (stderr, "cannot set parameters (%s)\n", snd_strerror (err));exit(1);}printf("set para OK!\n");snd_pcm_hw_params_free(hw_params);if ((err = snd_pcm_prepare (capture_handle)) < 0) {fprintf (stderr, "cannot prepare audio interface for use (%s)\n", snd_strerror (err));exit(1);}printf("prepare audio interface OK!\n");frames=128;size=frames*4;buf=(char*)malloc(size);for (i = 0; i < 10; ++i) {//snd_pcm_readi(snd_pcm_t *pcm,void *buffer,snd_pcm_uframes_t size)if ((err = snd_pcm_readi (capture_handle, buf, 128)) != 128) {fprintf (stderr, "read from audio interface failed (%s)\n", snd_strerror (err));exit (1);}}free(buf);snd_pcm_close (capture_handle);printf("end of Mini-Capture!\n");exit (0);}
在編輯時遭遇零件庫問題,直接將 linux-devkit/arm-none-linux-guneabi/usr/include以及lib都複製到 CodeSourcery/Sourcery_G++_Lite/arm-none-linux-guneabi/相對應的資料夾,解決!
使用 gcc時,需要指定使用 -lasound 函式庫。
程式內,部分增加註解的地方,是由於函式庫的參數錯誤,出現Segmentation fail的訊息,修改參數類型後重新編譯,
在BBxM內,執行./MiniCapture default 指定設備使用default值,就可進行截取聲音訊號的工作,
內部參數的設定意義,等我了解後在另外補上。
- [開發記錄] 函式庫調用 - 使用ALSA進行音訊資料擷取 之其一
- [開發記錄] 函式庫調用 - 使用ALSA進行音訊資料擷取 之其二
- [開發記錄] 函式庫調用 - 使用C6accel 資料庫進行FFT函式調用 之其一
- [開發記錄] 函式庫調用 - 使用C6accel 資料庫進行FIR函式調用 之其一
- [開發記錄] 函式庫調用 - 使用ALSA進行音訊資料擷取 之其三
- 【ALSA】使用ALSA進行音訊資料擷取 之其二
- Android之googleMap(其一)
- Android之googleMap(其一)
- 其一
- Android服务之Service(其一)
- Android服务之Service(其一)
- Android服务之Service(其一)
- Android服务之Service(其一)
- Android服务之Service(其一)
- Android服务之Service(其一)
- Android服务之Service(其一)
- Android服务之Service(其一)
- Android服务之Service(其一)
- STL hash_map 底层初探
- postgres的自定义主键
- 文件处理
- (一) Andriod初始化流程
- NSString NSData 转换与常见的 NSString 和 NSMutableString 方法
- [開發記錄] 函式庫調用 - 使用ALSA進行音訊資料擷取 之其一
- mysql中一直的语法错误---表名与关键字重复
- 观察者模式
- 测试连接oracle数据库服务时错误
- CreateThread()、_beginthreadex()及、AfxBeginThread()函数的讨论
- TextBox中只能输入数字的几种常用方法(C#)
- linux C网络编程基本流程
- ios 进阶 -- private(私有) API
- [classic aglo]-quick sort 纯净版