Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在应用FFT之前从wav文件读取数据_C++_Fft_Wav_Pcm - Fatal编程技术网

C++ 在应用FFT之前从wav文件读取数据

C++ 在应用FFT之前从wav文件读取数据,c++,fft,wav,pcm,C++,Fft,Wav,Pcm,这是我第一次使用wave文件。 问题是我不完全理解如何正确读取存储的数据。我的阅读代码: uint8_t* buffer = new uint8_t[BUFFER_SIZE]; std::cout << "Buffering data... " << std::endl; while ((bytesRead = fread(buffer, sizeof buffer[0], BUFFER_SIZE / (sizeof buffer[0]), wav

这是我第一次使用wave文件。 问题是我不完全理解如何正确读取存储的数据。我的阅读代码:

    uint8_t* buffer = new uint8_t[BUFFER_SIZE];
    std::cout << "Buffering data... " << std::endl;
    while ((bytesRead = fread(buffer, sizeof buffer[0], BUFFER_SIZE / (sizeof buffer[0]), wavFile)) > 0)
    {
        //do sth with buffer data
    }
uint8\u t*buffer=新的uint8\u t[buffer\u SIZE];

你有两种常见的情况。首先,WAV文件表示一个简短的音频样本,您希望将整个内容读入内存并对其进行操作。所以缓冲区大小是一个变量。基本上,您需要查找文件的末尾以获取其大小,然后加载它

第二种常见情况是,WAV文件表示相当长的音频记录,您希望对其进行分段处理,通常是通过实时写入输出设备。所以缓冲区大小需要足够大,以容纳一小块大小的块,但不能太大,以至于需要过多的内存。现在,音频“帧”的大小通常由输出设备本身给出,它期望每秒25个采样与视频或类似的东西同步。您通常需要一个双缓冲器,以确保在DAC(数模转换器)用完时始终能够满足对更多样本的需求。然后在给出一个示例后,您从磁盘加载下一个数据块。有时块大小没有一个“正确”的值,您只需要使用一些相当合理的方法来平衡内存占用和调用数量


如果需要进行FFT,通常使用二次方的缓冲区大小,以简化快速变换。您需要的大小取决于您感兴趣的最低频率。

您有两种常见情况。首先,WAV文件表示一个简短的音频样本,您希望将整个内容读入内存并对其进行操作。所以缓冲区大小是一个变量。基本上,您需要查找文件的末尾以获取其大小,然后加载它

第二种常见情况是,WAV文件表示相当长的音频记录,您希望对其进行分段处理,通常是通过实时写入输出设备。所以缓冲区大小需要足够大,以容纳一小块大小的块,但不能太大,以至于需要过多的内存。现在,音频“帧”的大小通常由输出设备本身给出,它期望每秒25个采样与视频或类似的东西同步。您通常需要一个双缓冲器,以确保在DAC(数模转换器)用完时始终能够满足对更多样本的需求。然后在给出一个示例后,您从磁盘加载下一个数据块。有时块大小没有一个“正确”的值,您只需要使用一些相当合理的方法来平衡内存占用和调用数量


如果需要进行FFT,通常使用二次方的缓冲区大小,以简化快速变换。您需要的大小取决于您感兴趣的最低频率。

您的意思是-128到127(而不是172)?看到有符号值的原因是将它们存储在有符号的int8中。uint8是unsignedtrue,是我的错,我更改了代码。现在它给了我四个不同的值:128、127、87、0。我仍然不知道它到底是如何正确的?我们没有你的数据,所以我不知道我们如何知道这些值是否正确。我使用的文件:处理txt文件的输出。好的,我刚刚用附加信息编辑了我的问题。你是指-128到127(而不是172)?看到有符号值的原因是将它们存储在有符号的int8中。uint8是unsignedtrue,是我的错,我更改了代码。现在它给了我四个不同的值:128、127、87、0。我仍然不知道它到底是如何正确的?我们没有你的数据,所以我不知道我们如何知道这些值是否正确。我使用的文件:正在处理输出到txt文件。好的,我刚刚用其他信息编辑了我的问题。