pcm

PCM data flow - 3 - ASoC codec driver

怎甘沉沦 提交于 2020-01-26 08:36:43
上一章提到codec_drv的几个组成部分,下面逐一介绍,基本是以内核文档Documentation/sound/alsa/soc/codec.txt中的内容为脉络来分析的。codec的作用,在概述中有说明,本章主要罗列下codec driver中重要的数据结构及注册流程。 Codec DAI and PCM configuration codec_dai和pcm配置信息通过结构体snd_soc_dai_driver描述,包括dai的能力描述和操作接口,snd_soc_dai_driver最终会被注册到asoc-core中。 /* * Digital Audio Interface Driver. * * Describes the Digital Audio Interface in terms of its ALSA, DAI and AC97 * operations and capabilities. Codec and platform drivers will register this * structure for every DAI they have. * This structure covers the clocking, formating and ALSA operations for each * interface. */ struct snd

使用FAAC实现PCM转AAC

大城市里の小女人 提交于 2020-01-22 18:47:38
一、前言 AAC全称为Advanced Audio Coding,目前比较主流的AAC开源编码器主要有Nero和Faac。接下来我们将使用Faac实现音频PCM至AAC的音频格式转换,并使用Emscripten编译成WebAssembly模块。 二、实现步骤 使用Faac实现音频编码,主要有以下步骤: 2.1 主要函数 faacEncOpen faacEncHandle FAACAPI faacEncOpen ( unsigned long sampleRate , unsigned int numChannels , unsigned long * inputSamples , unsigned long * maxOutputBytes ) ; 变量名 变量含义 sampleRate 输入PCM的采样率。 numChannels 输入PCM的通道数。 inputSamples 编码一帧AAC所需要的字节数,打开编码器后获取,故声明时不需赋值。 maxOutputBytes 编码后的数据输出的最大长度。 faacEncEncode int FAACAPI faacEncEncode ( faacEncHandle hEncoder , int32_t * inputBuffer , unsigned int samplesInput , unsigned char *

音频PCM知识整理

萝らか妹 提交于 2020-01-22 18:31:24
简介 PCM(Pulse Code Modulation),脉冲编码调制。人耳听到的是模拟信号, PCM是把声音从模拟信号转化为数字信号的技术 。原理是用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲(脉搏似的短暂起伏的电冲击),把这些脉冲的幅值按一定精度进行量化,这些量化后的数值被连续的输出、传输、处理或记录到存储介质中,所有这些组成了数字音频的产生过程(抽样、量化、编码三个过程)。 采样频率、量化精度(采样位数)和声道数 采样频率是设备一秒钟内对模拟信号的采样次数,在主流的采集卡上分为:(8Khz的电话采样率就可以达到人的对话程度) 22.05KHz:无线电广播; 44.1KHz:音频 CD,MP3等; 48KHz:miniDV、数字电视、DVD、电影和专业音频。 人耳能够感觉到的最高频率为20kHz,要满足人耳的听觉要求,则需要每秒进行40k次采样,即40kHz。我们常见的CD采样率为44.1kHz。(也比如我对接过硬件的扬声器最高是16KHz,则手机MIC采样率就不用太高,节省传输带宽) 采样位数比如8bit(现在少见)、16bit(常用)和24bit,指的是描述数字信号所使用的位数。 声道数:声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号。 单声道 采样数据为8位的短整数(short); 双声道 采样数据为16位的整数

计算机与网络课程设计开发纪要

廉价感情. 提交于 2020-01-21 00:25:36
首先祝福课程设计负责老师祖坟冒火花,四天时间让人写一个软件出来也是有点东西的:) 1.IP地址 127.0.0.1 是本机地址。 2.端口 为了区分不同的网络程序,计算机会为每个网络程序分配一个独一无二的端口号(Port Number),例如,Web服务的端口号是 80,FTP 服务的端口号是 21,SMTP 服务的端口号是 25。 3.协议 协议有很多种,例如 TCP、UDP、IP 等,通信的双方必须使用同一协议才能通信。 4.数据传输方式 计算机之间有很多数据传输方式,各有优缺点,常用的有两种:SOCK_STREAM 和 SOCK_DGRAM。 1) SOCK_STREAM 表示面向连接的数据传输方式。数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,但效率相对较慢。常见的 http 协议就使用 SOCK_STREAM 传输数据,因为要确保数据的正确性,否则网页不能正常解析。 2) SOCK_DGRAM 表示无连接的数据传输方式。计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。因为 SOCK_DGRAM 所做的校验工作少,所以效率比 SOCK_STREAM 高。 本次做的是视频聊天可以使用SOCK_DGRAM tip: socket() 函数用来创建套接字

数字传输系统

半世苍凉 提交于 2020-01-19 00:04:30
数字传输系统 脉码调制 PCM 体制 脉码调制 PCM 体制最初是为了在电话局之间的中继线上传送多路的电话; 由于历史上的原因,PCM 有两个互不兼容的国际标准,即北美的 24 路 PCM(简称为 T1)和欧洲的 30 路 PCM(简称为 E1)。我国采用的是欧洲的 E1 标准; E1 的速率是 2.048 Mb/s,而 T1 的速率是 1.544 Mb/s; 当需要有更高的数据率时,可采用复用的方法; 这是一个模拟信号 -> 采样 -> 调制 ->数字信号 上面的是E1标准,为了把输入信号表示清楚,每秒钟采样8000次,每次采样使用8bit的数据;承载的数据量为2.048Mb/s; 上面则是T1标准,同样每秒钟采样8000次,每次采样使用8bit的数据;承载的数据量为1.544Mb/s; 来源: https://www.cnblogs.com/AhuntSun-blog/p/12210623.html

Android OpenSL ES 开发:Android OpenSL 介绍和开发流程说明

岁酱吖の 提交于 2020-01-16 07:24:32
一、Android OpenSL ES 介绍 OpenSL ES (Open Sound Library for Embedded Systems)是无授权费、跨平台、针对嵌入式系统精心优化的硬件音频加速API。它为嵌入式移动多媒体设备上的本地应用程序开发者提供标准化, 高性能,低响应时间的音频功能实现方法,并实现软/硬件音频性能的直接跨平台部署,降低执行难度,促进高级音频市场的发展。简单来说OpenSL ES是一个嵌入式跨平台免费的音频处理库。 Android的OpenSL ES库是在NDK的platforms文件夹对应android平台先相应cpu类型里面,如: 二、Android OpenSL ES 开发流程 OpenSL ES 的开发流程主要有如下6个步骤: 1、 创建接口对象 2、设置混音器 3、创建播放器(录音器) 4、设置缓冲队列和回调函数 5、设置播放状态 6、启动回调函数 注明:其中第4步和第6步是OpenSL ES 播放PCM等数据格式的音频是需要用到的。 在使用OpenSL ES的API之前,需要引入OpenSL ES的头文件,代码如下: #include <SLES/OpenSLES.h> #include <SLES/OpenSLES_Android.h> 由于是在Native层使用该特性,所需需要在Android.mk中增加链接选项

Creating a stereo sin WAV using C

左心房为你撑大大i 提交于 2020-01-16 03:29:16
问题 I am trying to create a stereo sine WAV in C, with the possibility to have a different (and possibly blank) left and right channels. A tone is generated for each channel with this function: int16_t * create_tone(float frequency, float amplitude, float duration) I then open a FILE* and call create_wav . Here are the two structures I'm using to create the WAV: struct wav_h { char ChunkID[4]; int32_t ChunkSize; char Format[4]; char Subchunk1ID[4]; int32_t Subchunk1Size; int16_t AudioFormat;

精简ffmpeg

倖福魔咒の 提交于 2020-01-15 04:25:42
我只需要ffmpeg中的一个或者某个功能,或者让其只支持某几种格式,就需要订制或者精简ffmpeg。 1.先说需求 我需要ffmpeg只支持wav和mp3的功能,而且是静态编译链接的。 2.再谈依据 配置ffmpeg的时候,首先 ./configure --help > cfghelp.txt 这样,帮助信息就重定向到cfghelp.txt文件里面了,help信息里面有很多的很全面的帮助信息,可以作为参考。 2.show一下我的编译指令吧(蓝色文字是说明,不是命令) ./configure --prefix=/FFmpeg/wav \ 设置编译结果的目录为/FFmpeg/wav --extra-cflags=-I/olibs/include \ --extra-ldflags=-L/olibs/lib \ --enable-memalign-hack \ --disable-debug \ 不编译debug版本 --disable-ffplay \ 不编译ffplay --disable-ffserver \ 不编译ffserver --enable-static \ 静态链接 --disable-shared \ --disable-encoders \ 先关闭所有的编码器 --enable-encoder=mpeg4 \ 再打开需要的编码器 --enable-encoder

Signed 16 bit PCM transformations aren't working. Why?

我的未来我决定 提交于 2020-01-14 14:58:26
问题 For the past 2 days I've been trying to manipulate 16 bit PCM data on Android with little success. I'm currently using WAV recorder to capture audio. In the onPeriodicNotification(AudioRecord recorder) method before the buffer is written with the randomAccessWriter I send the buffer to a custom class, to manipulate the samples, and save the samples back into the buffer. The method in my custom class is as follows: As the buffer is a byte array I first convert them into shorts, now one short

iphone利用AudioQueue播放wav(PCM码)

徘徊边缘 提交于 2020-01-14 08:37:50
续上一篇 iphone利用AudioQueue播放音频文件(mp3,aac,caf,wav等) 绝对原创,转载请注明出处: http://www.cnblogs.com/xuanyuanchen/admin/EditPosts.aspx?postid=2450169 1、ffmpeg解码音频流并且保存成wav文件。  这一步比较简单,只要熟悉ffmpeg解码音频的流程,将解码出的pcm码,保存到本地文件中,并实时统计解码的pcm的字节长度,最后解码完成之后再添加44字节的wav文件头。 save_audio.c View Code 1 #include <stdio.h> 2 #include "libavformat/avformat.h" 3 #include "libavcodec/avcodec.h" 4 #include "libavutil/avutil.h" 5 static void writeWavHeader(AVCodecContext *pCodecCtx,AVFormatContext *pFormatCtx,FILE *audioFile) { 6 int8_t *data; 7 int32_t long_temp; 8 int16_t short_temp; 9 int16_t BlockAlign; 10 int bits=16; 11 int32