私の最初のお勧めは、あなたを助けるために何らかの種類のライブラリを使用することです。ほとんどのサウンドソリューションは過剰であると思われるので、単純なライブラリ(あなたの質問のコメントに推奨されているもの、libsndfileなど)はこのトリックを行うべきです。
WAVファイルを読む方法を知りたい場合は、自分で書くことができます(学校では他の一般の人と同様にライブラリを使用することができます)ので、すばやくGoogle検索であなたが必要とするすべての情報plus some people who have already wrote many tutorials on reading the .wav format。
それでもそれが得られない場合は、データチャンクに到達するまで、ヘッダとWAV/RIFFデータファイルの他のすべてのチャンクを読んでください。それは、exclusively off the WAV Format Specificationに基づいています。実際のサウンドデータを抽出することはあまり難しいことではありません。生データをそのまま使用したり、生データを使用したり、内部的に(32ビットPCMの非圧縮データなど)より快適なフォーマットに変換できます。
reader.Read...(...)
をfread
に置き換えて、指定された型の整数値とバイトサイズを呼び出します。 WavChunks
はWAVファイルチャンクの内部IDのリトルエンディアン値で列挙され、そしてformat
変数はWAVファイル形式に含めることができるWAV形式の種類のタイプのいずれかです:
enum class WavChunks {
RiffHeader = 0x46464952,
WavRiff = 0x54651475,
Format = 0x020746d66,
LabeledText = 0x478747C6,
Instrumentation = 0x478747C6,
Sample = 0x6C706D73,
Fact = 0x47361666,
Data = 0x61746164,
Junk = 0x4b4e554a,
};
enum class WavFormat {
PulseCodeModulation = 0x01,
IEEEFloatingPoint = 0x03,
ALaw = 0x06,
MuLaw = 0x07,
IMAADPCM = 0x11,
YamahaITUG723ADPCM = 0x16,
GSM610 = 0x31,
ITUG721ADPCM = 0x40,
MPEG = 0x50,
Extensible = 0xFFFE
};
int32 chunkid = 0;
bool datachunk = false;
while (!datachunk) {
chunkid = reader.ReadInt32();
switch ((WavChunks)chunkid) {
case WavChunks::Format:
formatsize = reader.ReadInt32();
format = (WavFormat)reader.ReadInt16();
channels = (Channels)reader.ReadInt16();
channelcount = (int)channels;
samplerate = reader.ReadInt32();
bitspersecond = reader.ReadInt32();
formatblockalign = reader.ReadInt16();
bitdepth = reader.ReadInt16();
if (formatsize == 18) {
int32 extradata = reader.ReadInt16();
reader.Seek(extradata, SeekOrigin::Current);
}
break;
case WavChunks::RiffHeader:
headerid = chunkid;
memsize = reader.ReadInt32();
riffstyle = reader.ReadInt32();
break;
case WavChunks::Data:
datachunk = true;
datasize = reader.ReadInt32();
break;
default:
int32 skipsize = reader.ReadInt32();
reader.Seek(skipsize, SeekOrigin::Current);
break;
}
}
http://www.mega-nerd.com/libsndfile/ http://ccrma.stanford.edu/software/snd/sndlib/は、WAVでの作業に役立つ2つのライブラリです – Patashu