资源简介
可以从任意采样率,采样格式,位数,转换为其他采样率采样格式位数。
核心函数swr_resample。依赖库为libresample avutil
代码片段和文件信息
#include “stdafx.h“
#include “AudioResample.h“
#include “stdlib.h“
#ifndef max
#define max(ab) (((a) > (b)) ? (a) : (b))
#endif /* max */
#ifndef min
#define min(ab) (((a) < (b)) ? (a) : (b))
#endif /* min */
CAudioResample::CAudioResample()
: m_pSwrCtx(NULL)
m_nInputChannels(0)
m_nInputSampleRate(0)
m_nInputBitwidth(0)
m_InputsmpFmt(AV_SAMPLE_FMT_NONE)
m_nOutputChannels(0)
m_nOutputSampleRate(0)
m_nOutputBitwidth(0)
m_OutputsmpFmt(AV_SAMPLE_FMT_NONE)
m_bNeedResample(false)
{
}
CAudioResample::~CAudioResample()
{
}
AVSampleFormat GetSampleFmtByAudioBitWidth(int nBitWidth)
{
AVSampleFormat smpFmt = AV_SAMPLE_FMT_NONE;
switch (nBitWidth)
{
case 8:
smpFmt = AV_SAMPLE_FMT_U8;
break;
case 16:
smpFmt = AV_SAMPLE_FMT_S16;
break;
case 32:
smpFmt = AV_SAMPLE_FMT_S32; //AV_SAMPLE_FMT_FLT
break;
case 64:
smpFmt = AV_SAMPLE_FMT_S64; //AV_SAMPLE_FMT_DBL;
break;
default:
break;
}
return smpFmt;
}
//带切片
AVSampleFormat GetSampleFmtPlanarByAudioBitWidth(int nBitWidth)
{
AVSampleFormat smpFmt = AV_SAMPLE_FMT_NONE;
switch (nBitWidth)
{
case 1:
smpFmt = AV_SAMPLE_FMT_U8P;
break;
case 2:
smpFmt = AV_SAMPLE_FMT_S16P;
break;
case 4:
smpFmt = AV_SAMPLE_FMT_S32P; //AV_SAMPLE_FMT_FLTP
break;
case 8:
smpFmt = AV_SAMPLE_FMT_S64P; //AV_SAMPLE_FMT_DBLP;
break;
default:
break;
}
return smpFmt;
}
int CAudioResample::AudioResample(char *pInputAudioBuf int nInputAudioSize int nInputSampleRate int nInputBitwidth int nInputChannelNo
char *pOutputAudioBuf int nOutputMaxBufSize int &nOutputBufSize int nOutputSampleRate int nOutputBitwidth int nOutputChannelNo)
{
try{
int nResult = 0;
if (nInputSampleRate == nOutputSampleRate && nInputBitwidth == nOutputBitwidth && nInputChannelNo == nOutputChannelNo)
{
nOutputBufSize = min(nInputAudioSize nOutputMaxBufSize);
memset(pOutputAudioBuf 0 nOutputMaxBufSize);
memcpy(pOutputAudioBuf pInputAudioBuf nOutputBufSize);
}
else
{
SwrContext* pSwrCtx = swr_alloc();
if (pSwrCtx)
{
int64_t nInLayout = av_get_default_channel_layout(nInputChannelNo);
int64_t nOutLayout = av_get_default_channel_layout(nOutputChannelNo);
AVSampleFormat smpFmtIn = GetSampleFmtByAudioBitWidth(nInputBitwidth);
AVSampleFormat smpFmtOut = GetSampleFmtByAudioBitWidth(nOutputBitwidth);
pSwrCtx = swr_alloc_set_opts(pSwrCtx nOutLayout smpFmtOut
nOutputSampleRate nInLayout
smpFmtIn
nInputSampleRate 0 NULL);
if (swr_init(pSwrCtx) >= 0)
{
int nInBufIndex = 0; //输入AudioData索引
int nOutBufIndex = 0; //输出AudioData索引
nOutputBufSize = 0; //Reset实际输出AudioData大小
int nResampleDataSize = 0;//Resample后大小
memset(pOutputAudioBuf 0 nOutputMaxBufSize);
const int nConvertSample = 1024; //每次读取1024个采样
const int nConvertSam
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 376492 2017-05-19 20:30 lib\x64\avutil.lib
文件 18774 2017-05-19 20:30 lib\x64\swresample.lib
文件 374636 2017-05-19 20:19 lib\x86\avutil.lib
文件 18696 2017-05-19 20:19 lib\x86\swresample.lib
文件 4575 2017-05-19 20:19 include\libavutil\attributes.h
文件 170 2017-05-19 20:19 include\libavutil\avconfig.h
文件 9576 2017-05-19 20:19 include\libavutil\avutil.h
文件 10646 2017-05-19 20:19 include\libavutil\buffer.h
文件 9613 2017-05-19 20:19 include\libavutil\channel_layout.h
文件 15776 2017-05-19 20:19 include\libavutil\common.h
文件 8275 2017-05-19 20:19 include\libavutil\dict.h
文件 5468 2017-05-19 20:19 include\libavutil\error.h
文件 23866 2017-05-19 20:19 include\libavutil\fr
文件 1726 2017-05-19 20:19 include\libavutil\intfloat.h
文件 11674 2017-05-19 20:19 include\libavutil\log.h
文件 1249 2017-05-19 20:19 include\libavutil\macros.h
文件 7945 2017-05-19 20:19 include\libavutil\mathematics.h
文件 23485 2017-05-19 20:19 include\libavutil\mem.h
文件 32424 2017-05-19 20:19 include\libavutil\pixfmt.h
文件 5844 2017-05-19 20:19 include\libavutil\rational.h
文件 10318 2017-05-19 20:19 include\libavutil\samplefmt.h
文件 4865 2017-05-19 20:19 include\libavutil\version.h
文件 21885 2017-05-19 20:30 include\libswresample\swresample.h
文件 1718 2017-05-19 20:30 include\libswresample\version.h
文件 10964 2017-09-21 15:05 main.cpp
文件 10071 2017-09-21 15:02 AudioResample.cpp
文件 979 2017-09-21 14:37 AudioResample.vcxproj.user
文件 2191 2017-09-14 10:33 AudioResample.h
文件 8611 2017-09-13 16:47 AudioResample.vcxproj
文件 5705 2017-09-12 11:21 Wave.cpp
............此处省略24个文件信息
相关资源
- 最简单的基于FFmpeg的libswscale的教程
- ffmpeg-2.5.2-win32-shared
- 利用FFmpeg将mkv视频转换为H.264
- 安卓交叉编译ffmepgx86_64版本
- ffmepg的安卓arm(armeabi-v7a)版本
- 基于ARM9的远程视频监控系统
- 最简单的基于FFmpeg的封装格式转换器
- SDK播放器加速.zip
- 基于ffmpeg的经典版 ffplay 音视频播放
- ffmpeg api实现视频转码音视频
- FFMPEG入门基础资料pdf
- ffmpeg ffdoc (FFMPEG的最完整教程)
- ffmpeg转码为hls代码
- ffmpeg-4.0.2最新版 windows vs2013编译动态
- ffmpeg实现直播功能
- linuxubuntu下ffmpeg + alsa 的音频播放器
- 内存H264+PCM发布rtmp.rar
- ffmpeg-4.2.1-win32-dev.zip
- M3U8视频PC机64位辅助工具2.0 —&md
- ffmpeg-3.2.tar.bz2
- 适用于VC的FFMpeg静态库已编译)
- 使用ffmpeg api解码h264视频码流,并且能
- MP4v2录制rtsp流存为MP4文件
- [8] ffmpeg + SDL2 实现的视频播放器「快
- ffmpegexe文件
- qt5.8实现rtsp流播放
- OpenCV 1.0.0 patch for ffmpeg errors
- ffmpeg将一个视频文件解码输出bmp和j
- 支持OpenCV3.2的opencv_ffmpeg.7z
-
Mpla
yer.exe 最新版
评论
共有 条评论