【发布时间】: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 规范读取标题。
-
然而你正在阅读标题,它会导致字节偏移。 (
512是2有一个额外的字节...11289600是44100有一个额外的字节...)你是如何阅读标题的? -
我第一次尝试时确实使用了此代码:ptrackapp.com/apclassys-notes/qt-c-wav-file-reader