ffmpeg学习九:音频编码前奏-ubuntu下录音和播放

2024-06-19 15:18

本文主要是介绍ffmpeg学习九:音频编码前奏-ubuntu下录音和播放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇博客,我们把一个Yuv编码格式的视频文件编码为H264格式。那么接下来,自然要学习下音频编码了。在学习音频编码之前,我们先看看ubuntu下如何采集声音和播放声音。

录音

录制5秒钟的一段音频。
audio_recorder.c:

/*created by Jinwei Liu*/
#define ALSA_PCM_NEW_HW_PARAMS_API  #include <alsa/asoundlib.h>  int main(int argc,char **argv) {  long loops;  int rc;  int size;  snd_pcm_t *handle;  snd_pcm_hw_params_t *params;  unsigned int val;  int dir;  snd_pcm_uframes_t frames;  char *buffer;  FILE * fd_out;if(argc!=2){printf("usage:./a.out outfile\n");}/* Open PCM device for recording (capture). */  rc = snd_pcm_open(&handle, "default",  SND_PCM_STREAM_CAPTURE, 0);  if (rc < 0) {  fprintf(stderr,  "unable to open pcm device: %s\n",  snd_strerror(rc));  exit(1);  }  /* Allocate a hardware parameters object. */  snd_pcm_hw_params_alloca(&params);  /* Fill it in with default values. */  snd_pcm_hw_params_any(handle, params);  /* Set the desired hardware parameters. */  /* Interleaved mode */  snd_pcm_hw_params_set_access(handle, params,  SND_PCM_ACCESS_RW_INTERLEAVED);  /* Signed 16-bit little-endian format */  snd_pcm_hw_params_set_format(handle, params,  SND_PCM_FORMAT_S16_LE);  /* Two channels (stereo) */  snd_pcm_hw_params_set_channels(handle, params, 2);  /* 11025 bits/second sampling rate (CD quality) */  val = 11025;  snd_pcm_hw_params_set_rate_near(handle, params,  &val, &dir);  /* Set period size to 32 frames. */  //frames = 32;  // snd_pcm_hw_params_set_period_size_near(handle,  //                             params, &frames, &dir);  /* Write the parameters to the driver */  rc = snd_pcm_hw_params(handle, params);  if (rc < 0) {  fprintf(stderr,  "unable to set hw parameters: %s\n",  snd_strerror(rc));  exit(1);  }  /* Use a buffer large enough to hold one period */  snd_pcm_hw_params_get_period_size(params,  &frames, &dir);  size = frames * 4; /* 2 bytes/sample, 2 channels */  buffer = (char *) malloc(size);  /* We want to loop for 5 seconds */  snd_pcm_hw_params_get_period_time(params,  &val, &dir);  loops = 5000000 / val;  fd_out = fopen(argv[1],"w+");while (loops > 0) {  loops--;  rc = snd_pcm_readi(handle, buffer, frames);  if (rc == -EPIPE) {  /* EPIPE means overrun */  fprintf(stderr, "overrun occurred\n");  snd_pcm_prepare(handle);  } else 

这篇关于ffmpeg学习九:音频编码前奏-ubuntu下录音和播放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075390

相关文章

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视