audio - 我在哪里可以学习如何使用音频数据格式?

标签 audio mp3 pcm

我正在开发一个涉及说话卡通脸的 openGL 项目。我希望播放语音(编码为 mp3)并使用音频数据为其嘴巴设置动画。我以前从未真正使用过音频,所以我不确定从哪里开始,但一些谷歌搜索让我相信我的第一步是将 mp3 转换为 pcm。

我并不真正预计需要任何傅立叶变换,尽管这可能很好。当有音频时,嘴真的只需要四处移动(我正在考虑基于音量)。

任何有关实现此类功能的提示或资源指针都将不胜感激。谢谢!

-S

最佳答案

无论您做什么,您都需要先将 MP3 解码为 PCM 数据。有许多第三方库可以为您做到这一点。然后,您需要分析 PCM 数据并对其进行一些信号处理。

从音频中自动生成逼真的口型同步数据是一个非常困难的问题,明智的做法是不要尝试解决它。我喜欢你简单地基于音量的想法。计算当前音量的一种方法是使用某种大小(例如 1/16 秒)的滚动窗口,并计算该窗口上声波的平均功率。也就是说,在第 T 帧,您计算帧 [T-N, T] 的平均功率,其中 N 是窗口中的帧数。

感谢 Parseval's theorem ,我们可以轻松计算波的功率,而无需进行傅立叶变换或任何复杂的操作——平均功率只是窗口中 PCM 值的平方和除以窗口中的帧数。然后,您可以将电源转换为 decibel通过将其除以一些基本功率(为简单起见可以为 1)、取对数并乘以 10 来评级。

关于audio - 我在哪里可以学习如何使用音频数据格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/704069/

相关文章:

matlab - 仅向耳机的一侧发送音调

python - Python,如何使用pyaudio录制24位音频?

jquery - jQuery,使用音频

java - 用于分析 mp3 的库

javascript - 如何在JavaScript中将base64 WAV转换为base64 mp3

apache-flex - 寻找用于音频播放的简单Flex组件

node.js - AWS Lambda 转码器返回失真的音频

node.js - 如何更改 Node 中 PCM 音频流的音量?

java - 在JAVA中将PCM WAV转换为ULAW WAV

c++ - 如何在 C++ 中从 void* 数组中有效地解压 float、int16、int32 等数据?