【问题标题】:Analysing wave header分析波头
【发布时间】:2015-01-21 13:04:00
【问题描述】:

为了播放我的测试波形文件,我设置了以下格式fmt

fmt.setChannelCount(2);
fmt.setCodec("audio/pcm");
fmt.setByteOrder(QAudioFormat::LittleEndian);
fmt.setSampleType(QAudioFormat::SignedInt);
fmt.setSampleRate(44100);
fmt.setSampleSize(16);

它也适用于这些设置:

fmt.setSampleRate(22050);
fmt.setSampleSize(32);

这些设置适用于 QAudioOutput:

player = new QAudioOutput(fmt);
file = new QFile(fileName);
file->open(QIODevice::ReadOnly);
player->start(file);

通过此设置,我可以正确播放我的测试波形文件。

但我想通过读取标题来检测格式的设置。

我分析了一下,它说:

Opening WAV file at:  "C:/Deep Purple - Anthology (Disc 2) - 09 - Hold On.wav" 
The size of the WAV file is:  53994908 
WAV File Header read: 
File Type:  "RIFFWAVE" 
File Size:  53994900 
WAV Marker:  "WAVE" 
Format Name:  "fmt??(" 
Format Length:  4128 
Format Type:  256 
Number of Channels:  512 
Sample Rate:  11289600 
Sample Rate * Bits/Sample * Channels / 8:  45158400 
Bits per Sample * Channels / 8.1:  1024 
Bits per Sample:  4096 
Data Header:  "" 
Data Size:  937783393 

如果我将采样率除以通道数,我会得到每个通道的采样率 22050。但为什么我必须设置 44100 才能让它听起来不错?为什么有 512 个频道?用Audacity打开文件,只有2个(Audacity说:Stereo, 44100Hz, 32-bit float)。

【问题讨论】:

  • 你分析它的方式是乱码。你是怎么分析的?
  • 我不知道什么是乱码。我的意思是我检测音频的采样率等等。根据 Riff WAV 规范读取标题。
  • 然而你正在阅读标题,它会导致字节偏移。 (5122 有一个额外的字节...1128960044100 有一个额外的字节...)你是如何阅读标题的?
  • 我第一次尝试时确实使用了此代码:ptrackapp.com/apclassys-notes/qt-c-wav-file-reader

标签: c++ qt audio encoding


【解决方案1】:

当我从事此类项目时,这里有很多链接帮助了我很多。

https://github.com/visore/QAudioCoder

http://qt-project.org/forums/viewthread/6899

http://doc.qt.digia.com/qt-maemo/demos-spectrum-app-wavfile-cpp.html

http://fledisplace.com/QtMultimediaExample2.html

我确实在其中一个示例中发现了一个错字,它没有读取具有正确字节顺序的参数之一。让我仔细检查一下是哪一个,我会回复你的。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多