高比特率音频格式兼容性较差

news/2025/2/22 16:18:43/

问题描述:
mtk的项目播放高比特率的音频杂音,这个问题的本质是播放IEEE的float型32位pcm数据有噪音。
根本原因分析:
mtk原始组件无法处理32位浮点数据,因此需要在提取器上进行。
解决方案:
在提取器上将32位浮点数据更改为16位数据,然后发送mtk原始组件,也就是在wavextractor里面把32位的数据转换成16位的数据,然后再去交给解码库解码。
代码实现:

diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 911c19f..85ec7d8 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -8740,6 +8740,7 @@
int32_t pcmType = 1;
int32_t channelAssignment = 0;
int32_t numericalType = 0;
+ int32_t pcmFormat = 1;OMX_AUDIO_PARAM_RAWTYPE def;
InitOMXParams(&def);
@@ -8761,6 +8762,11 @@
def.nChannelAssignment = channelAssignment;
}+ if (msg->findInt32("pcm-format", &pcmFormat)) {
+ def.nPcmFormat = pcmFormat;
+ ALOGV("pcmFormat is %d", pcmFormat);
+ }
+
msg->findInt32("endian", &endian);
msg->findInt32("pcm-type", &pcmType);
msg->findInt32("numerical-type", &numericalType);
diff --git a/media/libstagefright/WAVExtractor.cpp b/media/libstagefright/WAVExtractor.cpp
index ba2ebbe..7ae4e22 100644
--- a/media/libstagefright/WAVExtractor.cpp
+++ b/media/libstagefright/WAVExtractor.cpp
@@ -504,7 +504,20 @@
buffer->set_range(0, n);#if defined(MTK_AOSP_ENHANCEMENT) && defined(MTK_AUDIO_RAW_SUPPORT)
- ALOGV("======PCM Data pass MTK PCM Component !======");
+ if (mWaveFormat == WAVE_FORMAT_PCM) {
+ ALOGV("PCM Data pass PCM Component !");
+ }
+ else if (mWaveFormat == WAVE_FORMAT_IEEE_FLOAT) {
+ //ALOGD("hxl mWaveFormat = %d", mWaveFormat);
+ if (mBitsPerSample == 32) {
+ // Convert 32-bit float samples to 16-bit signed in place
+ const size_t numSamples = n / 4;
+
+ memcpy_to_i16_from_float((int16_t *)buffer->data(), (const float *)buffer->data(), numSamples);
+ buffer->set_range(0, 2 * numSamples);
+ }
+ mMeta->setInt32(kKeyPcmFormat, mWaveFormat);
+ }
#else
// TODO: add capability to return data as float PCM instead of 16 bit PCM.
if (mWaveFormat == WAVE_FORMAT_PCM) {

http://www.ppmy.cn/news/900646.html

相关文章

格式工厂采样率,比特率怎样设置才能使音频声音大容量小

如果不考虑音频质量,单纯为了减少文件大小,可以把采样率、比特率设置为最低,这样文件最小。 较低的采样率使音质变差,为保证音频质量,建议采用44.1KHz采样率,比特率128KB/S。 音量大小要在音量控制这里设置…

python使用eyed3获取音频信息包含采样率比特率和通道信息等

from eyed3 import mp3 # 打开文件并读取音频信息 f=mp3.Mp3AudioFile("data/11767.wav") bitrate = f.info.bit_rate sample_rate = f.info.sample_freq channel_count = f.

音频参数获取:采样率、比特率,通道数

获取音频文件采样率、比特率,通道数的一种方法: MediaExtractor mex new MediaExtractor();try {mex.setDataSource(mp3Path);} catch (IOException e ) {// TODO Auto-generated catch blocke.printStackTrace();}MediaFormat mf mex.getTrackFormat(…

FFmpeg基础知识音频篇(二)

音频基础知识 声音的频率是周期的倒数,它表示的是声音在1秒钟内的周期数,单位是赫兹(Hz)。千赫(kHz),即1000Hz,表示每秒振动1000次 声音有振幅,振幅的主观感觉是声音的大小。声音的振幅大小取决于空气压力波距平均值(也称平衡态)的最大偏移量…

ffmpeg限制文件大小php,ffmpeg将音频比特率限制为128kb / s [关闭]

我想将文件上转换为256kb / s . (我知道我正在失去质量和所有这一切,我知道我想要上转换64kb / s > 256kb / s) 我正在使用的命令 ffmpeg -i "Same Love.m4a" -acodec libfaac "Same Love.m4a" -b:a 256kb \ -loglevel debug 我已经使用了我…

音频比特率_将音频文件转换为更高的比特率有意义吗?

音频比特率 When converting audio files, it would make sense to avoid converting into a higher bitrate, as it is commonly understood that you can never recapture data lost in a previous conversion. Read on to see, however, when upgrading the bitrate is just…

修改wav格式音频比特率的标准方法

前 言 记得之前写过一篇文章,介绍怎么将amr音频转为wav格式,这个过程是没有问题的,转码产生的音频文件是可以正常播放的。但是,由于项目中的服务器智能播放比特率为64kbps的wav音频,而转码产生的wav音频比特率为128kb…

音频比特率

CBR(Constant Bit Rate,固定比特率) CBR是最古老最简单的MP3编码(压缩)方式。采用此法编码时,整个文件的比特率都是一样的,换言之,MP3文件每秒使用的比特率都是一样。尽管音乐文件有…