- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试从 .wav 中读取数据并将其放入 fft。要读取 wav 文件,我正在使用 sndfile 库。
SNDFILE* infile;
SF_INFO sfinfo ;
memset (&sfinfo, 0, sizeof (sfinfo)) ;
infile = sf_open ("sound.wav", SFM_READ, &sfinfo);
double data [BUF_SIZE];
while (readcount = (int)sf_readf_double (infile, data, BUF_SIZE))
{
for (int i = 0; i < readcount; i++)
{
cout << data[i] << " ";
}
}
但是这个(和其他文件)中的每个值都在 (-1 ; 1) 之间。它是否正确?为什么每个值都这么小?我应该读取时域中的振幅(音量)。
最佳答案
这是浮点样本的规范格式。使用 float
值,您可以获得完整的 32 位精度。裁剪也很容易表示。如果样本值高于 1 或低于 -1,则表示样本被裁剪了。对于整数值,没有办法知道这一点。
float 也是一种应用操作的简单示例格式。例如,混合是微不足道的(您只需将样本值加在一起。)
所以即使一开始看起来很奇怪,它也是音频样本表示的最佳格式。将所需的操作应用于浮点值后,即可将它们转换为输出所需的格式(如 16 位整数)。此操作很简单。这是一个将浮点样本转换和剪辑为当今使用的任何已知整数样本格式的函数:
#include <limits>
/* Convert and clip a float sample to an integer sample. This works for
* all usual integer sample types (8-bit, 16-bit, 32-bit, signed or
* unsigned.)
*/
template <typename T>
T floatSampleToInt(float src) noexcept
{
if (src >= 1.f)
return std::numeric_limits<T>::max();
if (src < -1.f)
return std::numeric_limits<T>::min();
return src * (float)(1UL << (sizeof(T) * 8 - 1))
+ ((float)(1UL << (sizeof(T) * 8 - 1))
+ (float)std::numeric_limits<T>::min());
}
例如,如果您想将浮点样本转换为带符号的 16 位整数样本,您可以:
int16_t intSample = floatSampleToInt<int16_t>(floatSample);
请注意,24 位整数样本被 32 位覆盖。 32 位样本也是有效的 24 位样本;它的低 8 位只是被截断了。
关于c++ - 来自wav文件的数据在-1和1之间,c++,sndfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47518980/
我正在尝试将 Nyquist(一种音乐编程平台,参见:https://www.cs.cmu.edu/~music/nyquist/ 或 https://www.audacityteam.org/abo
我想使用“fvad”库来检测音频静音部分,但我有 QByteArray 而不是 SNDFILE。我怎样才能做到这一点? sf_read_double(infile, buf0, framelen) [
我正在尝试从 .wav 中读取数据并将其放入 fft。要读取 wav 文件,我正在使用 sndfile 库。 SNDFILE* infile; SF_INFO sfinfo ; mems
“#include ”是什么意思? (对不起,我是 c\c++ nub) 顺便说一句,我了解 ActionScript 和 HTML。 最佳答案 这是一个预处理器指令,用于包含名为“sndfile.h
我编写了一个小程序来播放 PCM 音频文件,使用来自 github 的引用,并对我的应用程序稍作修改。该程序编译良好,但我在依赖项和 ALSA 设备方面遇到了一些运行时问题。 我收到的错误是: ERR
这个问题已经有答案了: What mean file with extension "h.in"? (3 个回答) 已关闭 8 年前。 我在 Linux 上使用 gcc 进行编译因为 sndfile.
我想使用 textPad 读取 8 位 wav 文件的数据,我知道数据位于第 44/46 字节,但我无法读取它。 我有那个代码: 52 49 46 46 F8 37 01 00 57 41 56 45
我有一个关于语音识别的项目。虽然我使用了库“sndfile.h”,但我仍然停留在读取输入声音上。我有一个疑问:sf_readf_float()函数读取的数据是时域信号,对吧?如果不是,那是什么?有什么
我正在 Windows 7(64 位)上开发 CodeBlocks 12.11。我正在用 C 编程,我正在使用库:libsndfile (http://www.mega-nerd.com/libsnd
我已经编写了一个函数来使用 portaudio 和 sndfile 播放声音文件。不幸的是,音质很糟糕。声音更像是嘶嘶声。以下是我正在使用的函数的源代码。 #define _GLIBCXX_USE_C
我有一个用 SF_FORMAT_WAV|SF_FORMAT_FLOAT 打开的文件,但有 24 位格式的样本。Sndfile 文档说调用程序使用的数据类型和文件的数据格式不需要相同所以使用 sf_wr
我正在托管一个 python Flask 服务,它使用声音文件库进行音频计算。它在我的本地运行良好,但当我在 Redhat 上托管它时,我看到以下问题。任何建议 - from soundfile i
我正在尝试将 TensorFlow Lite 用于使用 Jupyter 笔记本的语音识别项目,但是当我尝试执行“导入 librosa”(使用此处找到的命令:https://github.com/Sha
我正在尝试部署一个使用 TensorFlow 和 Librosa 的 flask 应用程序。因此,作为 Librosa 的依赖项,我需要 sndfile 包。 当我运行我的 Flask 应用程序时,出
我正在尝试为一个小型 python web 项目编写 Dockerfile,但依赖项有问题。我一直在互联网上进行一些搜索,它说 Librosa 库需要 libsndfile 才能正常工作,所以我尝试使
我一直在编写一些代码来使用 PortAudio 和 sndfile 在 C++ 中播放立体声 .wav 文件,但是输出声音是模糊的并且向下倾斜(向下倾斜对我来说不是问题,但它可能是问题的一部分) .看
首先,我是 Go 和低级编程领域的新手,所以请多多包涵...:) 所以我要做的是这个;使用 libsndfile 读取 .wav 文件binding去和玩portaudio . 我找不到这方面的任何例
我在 Windows 10 Pro 机器上使用 Docker(Linux 容器)。我创建了一个 docker 容器来运行我的 flask 应用程序,并在 requirements.txt 文件中提到了
我目前使用的是 Fedora 20 x86_64。我使用以下命令构建了 libsndfile: sudo ./configure BASE_FLAGS=-32 sudo make sudo make
目标是在 Heroku 上部署音频预测 ML 模型,该模型使用 Python 中的 librosa 库。 app.py 文件使用 librosa 库从音频中提取特征。 当我尝试在 Heroku 上部署
我是一名优秀的程序员,十分优秀!