支援錄音的音效卡驅動程式及錄音放音測試程式
from :上海尚觀嵌入式培訓 http://www.uplooking.sh.cn/embedded_training/tecnews/2012/1117/1456_1.html
說明:
1)音訊裝置只能以O_WRONLY或者O_RDONLY方式開啟,不能使用O_RDWR方式開啟,因為不支援同時錄音和放音。
2)使用方法舉例"./oss /tmp/test.wav 22050" ,會自動錄音2MB,再將其播放出來。
3)支援調整音訊取樣率:支援44100、22050、11025和8000四種取樣率。
4)驅動使用方法:將sep4020-uda1341.c替換sound/oss目錄下同名檔案。
以下為測試程式原始碼
==================================================================================
//注意!音訊裝置只能以O_WRONLY或者O_RDONLY方式開啟,不能使用O_RDWR方式開啟,因為不支援同時錄音和放音。
#include <sys/ioctl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/soundcard.h>
#define BUF_SIZE 4096
#define DEVICE_NAME "/dev/dsp"
int audio_fd; //音效卡
FILE *file_fd; //檔案
int file_len; //檔案長度
const char *file_name = "test.wav";
unsigned char audio_buffer[BUF_SIZE];
unsigned char *file_name_creat;
unsigned int audio_rate;
void delay(long x)
{
unsigned long i;
for(i=0; i<x; i++);
}
int main(int argc, char *argv[])
{
printf("This is an I2S record & play program.\n");
printf("Please add a file name and the audio rate! such as \"./oss test.wav 44100\" \n\n\n");
delay(100000);
file_name_creat = argv[1];
sscanf(argv[2],"%d", &audio_rate);
printf("the file name is %s audio rate is %d \n",file_name_creat,audio_rate);
delay(100000);
/*開啟音訊裝置,準備錄音*/
if ((audio_fd = open(DEVICE_NAME, O_RDONLY)) == -1)
{
printf("open error\n");
return -1;
}
/*設定取樣速率*/
int speed = audio_rate;
if (ioctl(audio_fd, SNDCTL_DSP_SPEED, &speed)==-1)
{
/* Fatal error */
printf("SNDCTL_DSP_SPEED error\n");
return -1;
}
printf("the wav speed is %d\n",speed);
/*錄音*/
int i=0;
unsigned long loops_record = 500; //500*4KB=2MB
file_fd = fopen(file_name_creat, "w");
printf("recording...\n");
for(i=0;i<loops_record;i++)
{
read(audio_fd,audio_buffer,4096);
fwrite(audio_buffer, 4096, 1, file_fd);
}
printf("recording...over\n");
/*關閉裝置和檔案*/
fclose(file_fd);
close(audio_fd);
delay(100000);
/*開啟音訊裝置,準備放音*/
if ((audio_fd = open(DEVICE_NAME, O_WRONLY)) == -1)
{
printf("open error\n");
return -1;
}
/*設定取樣格式*/
int format;
format = AFMT_S16_LE;
if (ioctl(audio_fd, SNDCTL_DSP_SETFMT, &format) == -1)
{
/* fatal error */
printf("SNDCTL_DSP_SETFMT error\n");
return -1;
}
if (format != AFMT_S16_LE)
{
/* 本裝置不支援選擇的取樣格式. */
printf("sep4020 oss driver does not support AFMT_S16_LE");
}
/*設定通道數*/
int channels = 2; /* 1=mono, 2=stereo */
if (ioctl(audio_fd, SNDCTL_DSP_CHANNELS, &channels) == -1)
{
/* Fatal error */
printf("SNDCTL_DSP_CHANNELS error");
return -1;
}
if (channels != 2)
{
/* 本裝置不支援立體聲模式 ... */
printf("sep4020 oss driver does ");
}
/*設定取樣速率*/
speed = audio_rate;
if (ioctl(audio_fd, SNDCTL_DSP_SPEED, &speed)==-1)
{
/* Fatal error */
printf("SNDCTL_DSP_SPEED error\n");
return -1;
}
printf("the wav speed is %d\n",speed);
/*開啟並計算檔案長度*/
file_fd = fopen(file_name_creat, "r");
fseek(file_fd,0,SEEK_END); //定位到檔案末
file_len = ftell(file_fd); //檔案長度
int loops = file_len/4096;
/*重新定位到檔案頭*/
fclose(file_fd);
file_fd = fopen(file_name_creat, "r");
/*播放wav檔案*/
for(i=0;i<loops;i++)
{
fread(audio_buffer, 4096, 1, file_fd);
write(audio_fd,audio_buffer,4096);
}
/*關閉裝置和檔案*/
fclose(file_fd);
close(audio_fd);
return 0;
}
//AUTHOR(" [email protected]");
//DESCRIPTION("sep4020 uda1341 sound card test program");
相關推薦
支援錄音的音效卡驅動程式及錄音放音測試程式
from :上海尚觀嵌入式培訓 http://www.uplooking.sh.cn/embedded_training/tecnews/2012/1117/1456_1.html 說明: 1)音訊裝置只能以O_WRONLY或者O_RDONLY方式開啟,不能使用O
ALSA音效卡驅動中的DAPM詳解之四:在驅動程式中初始化並註冊widget和route
前幾篇文章我們從dapm的資料結構入手,瞭解了代表音訊控制元件的widget,代表連線路徑的route以及用於連線兩個widget的path。之前都是一些概念的講解以及對資料結構中各個欄位的說明,從本章開始,我們要從程式碼入手,分析dapm的詳細工作原理: 如何註冊widg
解決win10音效卡驅動不相容問題和成功安裝戰神k650-i5-d2上的Sound Blaster Cinema2在win10系統上
安裝win10後,偶爾會出現藍屏,經過我的發現,每次聽歌用揚聲器並且長時間。都會發生藍屏 1 . 所以懷疑音效卡驅動VIA HD Audio(Win 8.1)與系統不相容。 2 .乾脆重新安裝音效卡驅動。在網上找到與win10相容的VIAHDAud_v11_1100e_01
Linux ALSA音效卡驅動之六:ASoC架構中的Machine
前面一節的內容我們提到,ASoC被分為Machine、Platform和Codec三大部分,其中的Machine驅動負責Platform和Codec之間的耦合以及部分和裝置或板子特定的程式碼,再次引用上一節的內容:Machine驅動負責處理機器特有的一些控制元件和音訊
ALSA音效卡驅動中的DAPM詳解之二:widget-具備路徑和電源管理資訊的kcontrol
上一篇文章中,我們介紹了音訊驅動中對基本控制單元的封裝:kcontrol。利用kcontrol,我們可以完成對音訊系統中的mixer,mux,音量控制,音效控制,以及各種開關量的控制,通過對各種kcontrol的控制,使得音訊硬體能夠按照我們預想的結果進行工作。同時我
ALSA音效卡驅動中的DAPM詳解之七:dapm事件機制(dapm event)
前面的六篇文章,我們已經討論了dapm關於動態電源管理的有關知識,包括widget的建立和初始化,widget之間的連線以及widget的上下電順序等等。本章我們準備討論dapm框架中的另一個機制:事件機制。通過dapm事件機制,widget可以對它所關心的dapm事
關於音效卡驅動後的madplay安裝問題以及解決
安裝madplay所需要的庫檔案的時候 遇到了zlib.h找不到的原因 按照上面的內容執行會出現libz找不到的問題 後經過網上的查詢發現是Makefile中編譯器名字出現的問題 //////////////////////////////////////////////////////
音效卡驅動除錯過程
ALSA音效卡驅動 https://blog.csdn.net/droidphone/article/category/1118446 PCM(Pulse-code modulation)脈衝編碼調製,把聲音從模擬轉換成數字訊號的一種技術 https://blog.csdn.
android下除錯音效卡驅動之概述
在Android中音訊系統使用的是ALSA系統架構。ASoC--ALSA System on Chip ,是建立在標準ALSA驅動層上,為了更好地支援 嵌入式處理器和移動裝置中的音訊Cod
Linux ALSA音效卡驅動之八:ASoC架構中的Platform
1. Platform驅動在ASoC中的作用 前面幾章內容已經說過,ASoC被分為Machine,Platform和Codec三大部件,Platform驅動的主要作用是完成音訊資料的管理,最終通過CPU的數字音訊介面(DAI)把音訊資料傳送給Codec進行處理,最終由Co
ALSA音效卡驅動中的DAPM詳解之五:建立widget之間的連線關係
前面我們主要著重於codec、platform、machine驅動程式中如何使用和建立dapm所需要的widget,route,這些是音訊驅動開發人員必須要了解的內容,經過前幾章的介紹,我們應該知道如何在alsa音訊驅動的3大部分(codec、platform、machin
android 音訊系統/音效卡驅動 codec
0. 專用術語 1. 物理結構 2. 系統架構 本文基於Freescale IMX平臺Codec ALC5625為例。 0. 專用術語 ASLA - Advanced Sound Linux Architecture OSS - 以前的Linux音訊體系結構,被ASL
AM335x(TQ335x)學習筆記——WM8960音效卡驅動移植
經過一段時間的除錯,終於調好了TQ335x的音效卡驅動。TQ335x採用的Codec是WM8960,本文來總結下WM8960驅動在AM335x平臺上的移植方法。Linux音效卡驅動架構有OSS和ALSA兩種架構,目前最常用的架構是ALSA,本文也使用ALSA架構對WM
Linux ALSA音效卡驅動之三:PCM裝置的建立
1. PCM是什麼 PCM是英文Pulse-code modulation的縮寫,中文譯名是脈衝編碼調製。我們知道在現實生活中,人耳聽到的聲音是模擬訊號,PCM就是要把聲音從模擬轉換成數字訊號的一種技術,他的原理簡單地說就是利用一個固定的頻率對模擬訊號進行取
android下除錯音效卡驅動之總結
1、在除錯中出現問題後,首先看I2C通訊有沒有問題,wm8960暫存器的設定是靠I2C來完成,另外I2C通訊不成功在開發板中是沒 有音效卡相關的裝置節點。 a、首先檢視Machi
android下除錯音效卡驅動之wm8960介紹二
三、LINPUT輸入通道介紹 有關LINPUT的主要配置如下: R32的bit8(LMN1)置1:LINPUT1連線PGA; R0
vmware Dos音效卡驅動安裝說明
Vmware虛擬機器中dos\win3.1音效卡驅動,Vmware使用虛擬創新SB16音效卡來實現的。在dos下執行install.exe就可以開始安裝了。同時注意檢視虛擬機器的vmx檔案,是不是有這樣幾條,如果沒有就要新增進去: sound.present = "TRU
ALSA音效卡驅動中的DAPM詳解之一:kcontrol
DAPM是Dynamic Audio Power Management的縮寫,直譯過來就是動態音訊電源管理的意思,DAPM是為了使基於linux的移動裝置上的音訊子系統,在任何時候都工作在最小功耗狀態下。DAPM對使用者空間的應用程式來說是透明的,所有與電源相關的開關都在A
Linux ALSA音效卡驅動之五:移動裝置中的ALSA
1. ASoC的由來 ASoC--ALSA System on Chip ,是建立在標準ALSA驅動層上,為了更好地支援嵌入式處理器和移動裝置中的音訊Codec的一套軟體體系。在ASoc出現之前,核心對於SoC中的音訊已經有部分的支援,不過會有一些侷限性:
Linux ALSA 音效卡驅動之一:ALSA架構簡介
一. 概述 ALSA是Advanced Linux Sound Architecture 的縮寫,目前已經成為了linux的主流音訊體系結構,想了解更多的關於ALSA的這一開源專案的資訊和知識,請檢視以下網址:http://www.alsa-project.org/。 在核心裝置驅動層,