mp2 解码器kjmp输出32bit
来源:互联网 发布:ear cuff淘宝 编辑:程序博客网 时间:2024/06/10 13:16
背景
====
由于kjmp[1] 带的mp2dec.c 输出的为s16le的,我需要输出32bit来和硬解对比。于是有下面的笔记。
PCM
====声音的裸数据最小单位是PCM 。一个PCM sample 就相当于图像里面的一个像素。
相关的概念有采样率,理解为一秒内(时间)横坐标取多少个点。声音的频率是一秒内波形重复多少次。最基本的波形就是我们高中看到的正弦波啦,因此凡提到与波形有关的概念我们就把它当成是在一个正弦波上描述的。比特率是指一秒内总共有多少比特位,它是一个“面积”概念,即横向的乘以纵向的。纵向的振幅值我们用多少个比特位表示。比如电话-程控交换机,采样率为8KHz,每个振幅值8比特编码,比特率为8*8Kb/s。
编码
====
把一个frame (1152 samples)划分为36个subband(32 frequency compenents).
DCT
根据perceptual model 来进行压缩:
频率掩盖效应:
高强度的频率会掩盖低强度的相邻频率。
temporal mask:
高强度的频率会掩盖时间上随后的频率。
输出 MP2 bitstream
header 32
CRC 16 optinal
bit_alloc
scalefactors
samples
====
到samples之前的直接读和查表即可。
对samples要做:
dequantize: 根据bit_alloc,scalefactors来反量化系数.
synthesis: IDCT, apply_window.
存储格式
====
通常一个sample是s16le,可能还有s32le, f64be的。
比较ffmpeg s16le和s32le的输出,发现s16le的一个sample,左移16位就变成的s32le的了。(相关代码在libavcodec/pcm.c ?)
ffmpeg和kjmp[1]解码比较
====
主观比较:从听觉上听不出区别, audacity导入看波形也一样。
客观比较:
gvim 二进制查看对应地址的数据也不是完全一样。
用[1]带的工具:
$ python wav_psnr.py raw.ff.s32le raw.kjmp.s32leComputing PSNR between raw.ff.s32le and raw.kjmp.s32le ...
PSNR: 60.0912322071 dB
ludi@ubun:~/codec/mp2
$ python wav_psnr.py raw0 raw1
Computing PSNR between raw0 and raw1 ...
PSNR: 13.7720499337 dB
mp3 解码
====
huffman_decode
reorder_block
compute_antialias
compute_imdct <TODO>...
附命令
文件截取
dd if=7109.pcm of=7109.raw0 bs=1920000 count=1
mpg2音频
Input #0, mp3, from '7109.mp2':
Duration: 00:01:47.99, start: 0.000000, bitrate: 254 kb/s
Stream #0:0: Audio: mp2, 48000 Hz, stereo, s16p, 254 kb/s
播放和转码
~/ffmpeg/bin/ffplay -i 7109.pcm -f s32le -ab 48000 -ac 2
~/ffmpeg/bin/ffmpeg -i 7109.mp2 -t 5 -f s16le -ab 48000 -ac 2 raw.s16le
transcode raw pcm
ffmpeg -f s16le -ar 44.1k -ac 2 -i file.pcm file.wav
参考
[1] http://keyj.emphy.de/kjmp2/
[2] http://en.wikipedia.org/wiki/MP2
0 0
- mp2 解码器kjmp输出32bit
- mp2
- 解码器输出PSNR为0表示什么
- 解码器输出PSNR为0表示什么
- 输出“welcome to bit!”
- 嵌入式编译器常用输出格式--Intel 32 bit Hex
- 嵌入式编译器常用输出格式--Intel 32 bit Hex
- MP2帧格式介绍
- 用Direct Sound为MP3解码器libmad播放输出
- vlc加入s3c6410 MFC硬件解码器,PP视频输出
- 12bit,24bit,32bit颜色
- 32bit
- 32bit和64bit
- sizeof 32bit 64bit
- 32bit or 64bit
- 32bit还是64bit
- 发烧友级别的最高32bit/384KHz采样率的数字信号输出
- libdca解码器32位定点化
- POJ 1035 Spell checker
- maven jetty plug
- hdu 4888 Redraw Beautiful Drawings(最大流)
- cocos2dx中用触摸机制实现在一个方向上拖动精灵。
- hdoj 1042 N!
- mp2 解码器kjmp输出32bit
- tomcat服务一闪而退的问题
- shell编程指南
- Valid Palindrome
- 使用cocos2d-console工具转换脚本为字节码
- POJ3368 Frequent values 线段树
- 3 Maya模型基础--分离复制物体表面、挤出、布尔运算
- Single Round Match
- 杭电 1029 Ignatius and the Princess IV