音频采样率 wav->aac

2024-04-13 14:38
文章标签 音频 wav aac 采样率

本文主要是介绍音频采样率 wav->aac,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

音频采样率

1.采样率sample_rate 44100(CD)
2.通道channels (左右声道)
3.样本大小(格式) sample_size

-AV_SAMPLE_FMT_S16
-AV_SAMPLE_FMT_FLTP

wav_to_aac.cpp

extern "C"
{#include <libavformat/avformat.h>#include <libswscale/swscale.h>#include <libswresample/swresample.h>
}
#include <iostream>
using namespace std;
int main()
{char infile[] = "16.wav";char outfile[] = "out.aac";//muxer,demutersav_register_all();avcodec_register_all();//1.打开音频编码格式AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_AAC);if(!codec){cout<<"avcodec_find_encoder error"<<endl;return -1;}AVCodecContext *c = avcodec_alloc_context3(codec);if(!c){cout<<"avcodec_alloc_context3 error"<<endl;return -1;}c->bit_rate = 64000;c->sample_rate = 44100;c->sample_fmt = AV_SAMPLE_FMT_FLTP;c->channel_layout = AV_CH_LAYOUT_STEREO;c->channels = 2;c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;int ret = avcodec_open2(c,codec,NULL);if(ret < 0){cout<<"avcodec_open2 error"<<endl;return -1;}cout<<"avcodec_open2 success"<<endl;//2. 打开输出封装的上下文AVFormatContext *oc = NULL;avformat_alloc_output_context2(&oc,NULL,NULL,outfile);if(!oc){cout<<"avformat_alloc_output_context2 error "<<endl;return -1;}AVStream *st = avformat_new_stream(oc,NULL);st->codecpar->codec_tag = 0;avcodec_parameters_from_context(st->codecpar,c);av_dump_format(oc,0,outfile,1);//3. open io, write headret = avio_open(&oc->pb,outfile,AVIO_FLAG_WRITE);if(ret < 0){cout<<"avio_open error"<<endl;return -1;} ret = avformat_write_header(oc,NULL);//44100 16 2//5 创建音频重采样上下文SwrContext *actx = NULL;actx = swr_alloc_set_opts(actx,c->channel_layout,c->sample_fmt,c->sample_rate,//输出格式AV_CH_LAYOUT_STEREO,AV_SAMPLE_FMT_S16,44100, //输入格式0,0);if(!actx){cout<<"swr_alloc_set_opts error "<<endl;return -1;}std::cout<<"swr_alloc_set_opts success"<<endl;ret = swr_init(actx);if(ret < 0){cout<<"swr init error"<<endl;}cout<<"swr_init success "<<endl;//5 打开输入音频文件,进行重采样AVFrame *frame = av_frame_alloc();frame->format = AV_SAMPLE_FMT_FLTP;frame->channels = 2;frame->channel_layout = AV_CH_LAYOUT_STEREO;frame->nb_samples = 1024;//一帧音频的样本数量ret = av_frame_get_buffer(frame,0);if(ret < 0){cout<<"av_frame_get_buffer error"<<endl;return -1;}std::cout<<"av_frame_get_buffer success"<<endl;int readSize = frame->nb_samples * 2 * 2;char  *pcm = new char[readSize];FILE *fp = fopen(infile,"rb");std::cout<<fp;for(;;){int len = fread(pcm,1,readSize,fp);if(len < 0) break;const uint8_t *data[1];data[0] = (uint8_t *)pcm;swr_convert(actx,frame->data,frame->nb_samples,data,frame->nb_samples);if(len <= 0)break;AVPacket pkt;av_init_packet(&pkt);//6 音频编码ret = avcodec_send_frame(c,frame);if(ret != 0) continue;ret = avcodec_receive_packet(c,&pkt);if(ret != 0) continue;//7.音频封装如acc文件pkt.stream_index = 0;pkt.pts = 0;pkt.dts = 0;ret = av_interleaved_write_frame(oc,&pkt);cout<<"["<<len<<"]";}delete pcm;//写入视频索引av_write_trailer(oc);//关闭视频输出avio_close(oc->pb);//清理封装输出上下文avformat_free_context(oc);//关闭编码器avcodec_close(c);//清理编码器上下文avcodec_free_context(&c);return 0;
}

这篇关于音频采样率 wav->aac的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

生日贺卡录放音芯片,多段音频录音ic生产厂商,NVF04M-32minute

可以录音播放的生日贺卡与传统的纸质贺卡相比,它有着创意以及个性的特点,仅需少量的电子元器件,即可实现录音功能,搭配上文字,让声音存储在生日贺卡里,让贺卡也变得有温度,祝福我想亲口对TA说。 生日贺卡录放音芯片方案——NVF04M 采用外挂SPI存储器的方式,达到录音的功能。它的主要特点是声音清晰,录音时间长。目前可以提供的录音时间为32分钟。NV04FM的一个显著特点是存储时间灵活,客

Pr:首选项 - 音频硬件

Pr菜单:编辑/首选项 Edit/Preferences Premiere Pro 首选项中的“音频硬件” Audio Hardware选项卡可以指定计算机的音频设备和设置,还可以指定 Pr 用于音频回放和录制的 ASIO 和 MME 设置(仅限 Windows)或 CoreAudio 设置(仅限 macOS)。 当连接音频硬件设备时,该类型设备的硬件设置(如默认输入、默认输出、主时钟、延迟和

Pr:首选项 - 音频

Pr菜单:编辑/首选项 Edit/Preferences Premiere Pro 首选项中的“音频” Audio选项卡主要作用是控制音频的处理设置,包括音量调整、波形生成、音频渲染等选项,这些设置有助于优化音频的处理和编辑工作,适用于不同的剪辑需求和项目要求。 自动匹配时间 Automatch Time 指定已调整的任何控件返回到其先前设置的时间(在调音台中),以秒 Seconds为单位。

【Python百日进阶-Web开发-音频】Day705 - 音频加载 librosa.load / librosa.stream

文章目录 一、音频加载1.1 librosa.load1.1.1 语法与参数1.1.2 例子1.1.2.1 下载并加载文件1.1.2.2 加载并重采样1.1.2.3 加载文件,从第15秒开始,加载5秒- 1.2 librosa.stream1.2.1 语法与参数1.2.2 例子1.2.2.1 一次对 256 帧的块应用短期傅里叶变换。1.2.2.2 使用较短的帧和不重叠的窗口计算流上的 m

Android AudioManager 音频管理

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.

libmad音频解码库-Linux交叉编译移植

下载并解压libmad-0.15.1b.tar.gz 下载链接:https://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz $tar -xvf libmad-0.15.1b.tar.gz$cd libmad-0.15.1b 1、先执行下面的命令:这条命令是为了适配高版本的gcc,因为高版本的gcc已经将-fforce-mem去除了:

Linux speex音频库-音频数据编解码

speex音频数据编解码 speex简述speex encoder(编码器)speex decoder(解码器)denoise vad (降噪,语音活性检测) speex简述 speex官网 Speex: A Free Codec For Free Speech Overview Speex is an Open Source/Free Software patent-fre

030集——自动弹出对话框、选择文件并播放wav音频文件(winform窗体)——C#学习笔记

如图所示,效果如下: 步骤如下: 新建一个winform窗体,双击界面,进入代码区: 复制(下面代码中命名空间内的代码)到(你的命名空间下),运行。 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Draw

【Python百日进阶-Web开发-音频】Day708 - 时域处理 librosa.lpc

文章目录 一、时域处理1.1 librosa.lpc1.1.1 语法与参数1.1.2 示例1.1.2.1 在整个系列上以 16 阶计算 y 的 LP 系数1.1.2.2 计算 LP 系数,并绘制原始序列的 LP 估计值 一、时域处理 1.1 librosa.lpc https://librosa.org/doc/latest/generated/librosa.lpc.h