1st step to understand DirectShow その11(GrabberSample
Exampleも玉砕)
#include "stdafx.h" struct WAVE_HDR{ void read_wave_format_chunk(FILE *fp,WAVE_HDR* whd) if(whd->wfm.wFormatTag !=3) //IEEE_FLOAT fread(&whd->data_ID,sizeof(DWORD),1,fp); if(whd->data_ID !=0x61746164)//"data" float l_channel[2048]; int i=0; if(i%2) int _tmain(int argc, _TCHAR* argv[]) if( (err=_wfopen_s(&fp, filename,L"rb")) !=0) read_wave_format_chunk(fp,&whd); if(fp) return 0; H.20.5.9
Buffer
sizeは、全く変わってない...... 涙 (-_-)
1.DirectShowを、使い切れない....
以前、MFC(Microsoft Foundation
Class)を、使えなかったのと、同じです。
この帝国(DirectShow)を、自由に動き回れないのは、私の知識不足の為です、クソッ。
この機会に、DirectShowを覚えたいと思ったのですが、そんなもん、生半可では、歯が立たない.....
WAVファイルの書き込みだけは、DirectShowを使います。
1st stepは、これにて終了。
2.ほな、次の手を打ちましょう....
単純に、Win32プログラミングで、行きましょうね、クソッ。
WAVファイルを、読み書きするプログラムは、webの随所で、見ることができます。
大いに参考にさせて頂きました。公開して下さった皆様に、御礼申し上げます。
3.これなら、Buffer sizeも自由自在
後は、どのタイミングで、bufferに書き込むかの、問題です。
以下は、今回のプログラムです。
//
wave_read.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "windows.h"
#include"mmreg.h"
DWORD chunk_ID;
DWORD
file_size;
DWORD file_type;
DWORD fmt_ID;
DWORD
fmt_size;
WAVEFORMATEX wfm;
DWORD
data_ID;
DWORD data_size;
};
{
fread(&whd->chunk_ID,sizeof(DWORD),1,fp);
if(whd->chunk_ID
!=0x46464952) //RIFF
{
printf("not RIFF file!
?n");
return;
}
fread(&whd->file_size,sizeof(DWORD),1,fp);
fread(&whd->file_type,sizeof(DWORD),1,fp);
if(whd->file_type !=0x45564157) //WAVE
{
printf("not WAVE file?n");
return;
}
fread(&whd->fmt_ID,sizeof(DWORD),1,fp);
if(whd->fmt_ID
!=0x20746d66) //fmt
{
printf("not
fmtID?n");
return;
}
fread(&whd->fmt_size,sizeof(DWORD),1,fp);
if(whd->fmt_size ==18)
{
fread(&whd->wfm.wFormatTag,sizeof(WORD),1,fp);
fread(&whd->wfm.nChannels,sizeof(WORD),1,fp);
fread(&whd->wfm.nSamplesPerSec,sizeof(DWORD),1,fp);
fread(&whd->wfm.nAvgBytesPerSec,sizeof(DWORD),1,fp);
fread(&whd->wfm.nBlockAlign,sizeof(WORD),1,fp);
fread(&whd->wfm.wBitsPerSample,sizeof(WORD),1,fp);
fread(&whd->wfm.cbSize,sizeof(WORD),1,fp);
}
if(whd->fmt_size ==16) //for wave files recorded
using PowerSDR
{
fread(&whd->wfm.wFormatTag,sizeof(WORD),1,fp);
fread(&whd->wfm.nChannels,sizeof(WORD),1,fp);
fread(&whd->wfm.nSamplesPerSec,sizeof(DWORD),1,fp);
fread(&whd->wfm.nAvgBytesPerSec,sizeof(DWORD),1,fp);
fread(&whd->wfm.nBlockAlign,sizeof(WORD),1,fp);
fread(&whd->wfm.wBitsPerSample,sizeof(WORD),1,fp);
}
{
printf("not IEEE_FLOAT32 Format?n");
return;
}
{
printf("data error");
return;
}
//data size
fread(&whd->data_size,sizeof(DWORD),1,fp);
float
r_channel[2048];
WORD
loop_number=whd->data_size/4096/4;
//何回ループするか?
WORD
rest_data_number=(whd->data_size%(4096*4))/4; //残りデータ数
int j=0;
for(i;i<4096;i++)
{
{
fread(r_channel+j,sizeof(float),1,fp);
j++;
}
else
{
fread(l_channel+j,sizeof(float),1,fp);
}
}
}
{
FILE *fp;
WAVE_HDR whd;
whd.wfm.cbSize=0;
wchar_t*
filename=L"mywave3.wav";
errno_t err;
{
printf("fail to open file ?n");
if(fp)
fclose(fp);
return
1;
}
fclose(fp);
}