• 大小: 44.51MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-28
  • 语言: 其他
  • 标签: ffmpeg  

资源简介

可以从任意采样率,采样格式,位数,转换为其他采样率采样格式位数。 核心函数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\frame.h

     文件       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个文件信息

评论

共有 条评论