[RK3288][Android6.0] Audio中的放音重采样小结
来源:互联网 发布:淘宝虚拟产品怎么发布 编辑:程序博客网 时间:2024/06/13 22:58
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
AudioFlinger::MixerThread::prepareTracks_l -> Threads.cpp
mAudioMixer->setParameter -> //参数有AudioMixer::RESAMPLE
AudioMixer::setParameter -> AudioMixer.cpp
track.setResampler ->
AudioMixer::track_t::setResampler //trackSampleRate为源,devSampleRate为硬件支持采样率。
bool AudioMixer::track_t::setResampler(uint32_t trackSampleRate, uint32_t devSampleRate)
{
if (trackSampleRate != devSampleRate || resampler != NULL) {
if (sampleRate != trackSampleRate) {
sampleRate = trackSampleRate;
if (resampler == NULL) {
ALOGV("Creating resampler from track %d Hz to device %d Hz",
trackSampleRate, devSampleRate);
AudioResampler::src_quality quality;
......
//如果是采样率低于AUDIO_PROCESSING_MUSIC_RATE即40k,那么就用最低质量DYN_LOW_QUALITY。
//如果你对音频的质量有要求,可以修改此值,当然质量越高,肯定越耗cpu.
if (isMusicRate(trackSampleRate)) {
quality = AudioResampler::DEFAULT_QUALITY;
} else {
quality = AudioResampler::DYN_LOW_QUALITY;
}
......
//和录音重采样用的同一个接口。
resampler = AudioResampler::create(
mMixerInFormat,
resamplerChannelCount,
devSampleRate, quality);
resampler->setLocalTimeFreq(sLocalTimeFreq);
}
return true;
}
}
return false;
}
AudioResampler::create():
参考:
http://blog.csdn.net/kris_fei/article/details/72830677
OS: Android 6.0
Kernel: 3.10.92
AudioFlinger::MixerThread::prepareTracks_l -> Threads.cpp
mAudioMixer->setParameter -> //参数有AudioMixer::RESAMPLE
AudioMixer::setParameter -> AudioMixer.cpp
track.setResampler ->
AudioMixer::track_t::setResampler //trackSampleRate为源,devSampleRate为硬件支持采样率。
bool AudioMixer::track_t::setResampler(uint32_t trackSampleRate, uint32_t devSampleRate)
{
if (trackSampleRate != devSampleRate || resampler != NULL) {
if (sampleRate != trackSampleRate) {
sampleRate = trackSampleRate;
if (resampler == NULL) {
ALOGV("Creating resampler from track %d Hz to device %d Hz",
trackSampleRate, devSampleRate);
AudioResampler::src_quality quality;
......
//如果是采样率低于AUDIO_PROCESSING_MUSIC_RATE即40k,那么就用最低质量DYN_LOW_QUALITY。
//如果你对音频的质量有要求,可以修改此值,当然质量越高,肯定越耗cpu.
if (isMusicRate(trackSampleRate)) {
quality = AudioResampler::DEFAULT_QUALITY;
} else {
quality = AudioResampler::DYN_LOW_QUALITY;
}
......
//和录音重采样用的同一个接口。
resampler = AudioResampler::create(
mMixerInFormat,
resamplerChannelCount,
devSampleRate, quality);
resampler->setLocalTimeFreq(sLocalTimeFreq);
}
return true;
}
}
return false;
}
AudioResampler::create():
AudioResampler* AudioResampler::create(audio_format_t format, int inChannelCount, int32_t sampleRate, src_quality quality) { ...... //根据不同的quality选择不同的采样算法 case LOW_QUALITY: ALOGV("Create linear Resampler"); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerOrder1(inChannelCount, sampleRate); break; case MED_QUALITY: ALOGV("Create cubic Resampler"); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerCubic(inChannelCount, sampleRate); break; case HIGH_QUALITY: ALOGV("Create HIGH_QUALITY sinc Resampler"); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerSinc(inChannelCount, sampleRate); break; case VERY_HIGH_QUALITY: ALOGV("Create VERY_HIGH_QUALITY sinc Resampler = %d", quality); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerSinc(inChannelCount, sampleRate, quality); break; case DYN_LOW_QUALITY: case DYN_MED_QUALITY: case DYN_HIGH_QUALITY: ...... resampler = new AudioResamplerDyn<float, float, float>(inChannelCount, ...... }
参考:
http://blog.csdn.net/kris_fei/article/details/72830677
阅读全文
1 0
- [RK3288][Android6.0] Audio中的放音重采样小结
- [RK3288][Android6.0] Audio中的录音重采样小结
- [RK3288][Android6.0] Audio中的混音过程小结
- [RK3288][Android6.0] Audio录音frame rate设置流程小结
- [RK3288][Android6.0] Audio的音量设置流程小结
- [RK3288][Android6.0] Audio的音量计算过程小结
- [RK3288][Android6.0] Audio中的HW Params设置流程
- [RK3288][Android6.0] Audio中的period_size使用规则
- [RK3288][Android6.0] WiFi在Setting中的开启过程小结
- [RK3288][Android6.0] Skia中的编解码小结
- [RK3288][Android6.0] Audio中的单声道到双声道的转换处理过程
- [RK3288][Android6.0] Camera HAL流程小结
- [RK3288][Android6.0] StageFright解码流程小结
- [RK3288][Android6.0] USB 枚举过程小结
- [RK3288][Android6.0] USB UVC 驱动小结
- [RK3288][Android6.0] USB 枚举过程小结
- [RK3288][Android6.0] 串口驱动流程小结
- [RK3288][Android6.0] USB ECHI 驱动小结
- java项目启动报Unsupported major.minor version 51.0错
- php大型网站如何提高性能和并发访问
- php 常用的系统函数
- 火星坐标、百度坐标、WGS84坐标转换代码(JS)
- Adobe Flash 无法正常使用
- [RK3288][Android6.0] Audio中的放音重采样小结
- GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)
- 微信分享功能不可用+不能产生回调
- 集成学习ensemble learning
- Windows系统服务器IIS7.5 Asp.net支持10万请求的设置方法
- Android系统中的LOST.DIR文件夹介绍
- ECS Windows系统使用自带监视器查看IIS并发连接数
- 三种web性能压力测试工具
- 有关软件需求