0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【VFW】OS付属のmp3コーデックでMP3のエンコードをする

Posted at

今さらVFWのコーディングをするのもなんですが、
レガシーなコードを引き継いでちょっとしたプログラムを書いてaviファイルを作成するのに都合がいいのでメモっておきます。
EternalWindowsさんとか、ネットにわかりやすい解説がまだまだ残ってますしね。

1. レジストリの修正
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32
(64bit版はHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Drivers32 も)

のmsacm.l3acmをl3codecp.acmに修正。

2. WAVEFORMATEX, MPEGLAYER3WAVEFORMATの設定

2チャンネル、16ビット、32000Hzの録音入力を、128khz,CBRでエンコードするときの設定

# define AUD_CAPTURE_SAMPLINGFREQUENCY 32000  // 32000Hz
# define AUD_CAPTURE_CHANNELS 2               // stereo
# define AUD_CAPTURE_BITSPERSAMPLE 16         // 16bit/sample
# define MP3_BITRATE (128*1000)               // 128khz CBR
# define MP3_SAMPLESPERFRAME 1152             // mp3 v1 layerIII
# define MP3_FRAMESIZE (MP3_SAMPLESPERFRAME*(MP3_BITRATE/8)/AUD_CAPTURE_SAMPLINGFREQUENCY)

  WAVEFORMATEX wfx;
  memset(&wfx, 0, sizeof(WAVEFORMATEX));
  wfx.wFormatTag=WAVE_FORMAT_PCM;
  wfx.nChannels=AUD_CAPTURE_CHANNELS;
  wfx.nSamplesPerSec=AUD_CAPTURE_SAMPLINGFREQUENCY;
  wfx.wBitsPerSample=AUD_CAPTURE_BITSPERSAMPLE;
  wfx.nBlockAlign=wfx.wBitsPerSample/8*wfx.nChannels;
  wfx.nAvgBytesPerSec=wfx.nSamplesPerSec*wfx.nBlockAlign;
  
  MPEGLAYER3WAVEFORMAT mp3wf;
  memset(&mp3wf, 0, sizeof(MPEGLAYER3WAVEFORMAT));
  mp3wf.wfx.wFormatTag=WAVE_FORMAT_MPEGLAYER3;
  mp3wf.wfx.nChannels=AUD_CAPTURE_BITSPERSAMPLE;
  mp3wf.wfx.nSamplesPerSec=AUD_CAPTURE_SAMPLINGFREQUENCY;
  mp3wf.wfx.wBitsPerSample=0;
  mp3wf.wfx.nBlockAlign=1;
  mp3wf.wfx.nAvgBytesPerSec=MP3_BITRATE/8;
  mp3wf.wfx.cbSize=MPEGLAYER3_WFX_EXTRA_BYTES;
  mp3wf.wID=MPEGLAYER3_ID_MPEG;
  mp3wf.fdwFlags=MPEGLAYER3_FLAG_PADDING_OFF;
  mp3wf.nFramesPerBlock=1;
  mp3wf.nBlockSize=MP3_FRAMESIZE*mp3wf.nFramesPerBlock;
  mp3wf.nCodecDelay=1393;

aviに入れてvideoと同期させるのにMP3-CBRの方がコーディング上は楽なんです。
MP3のacmの変更はライセンス的にどうなんだろうってのがありますけどね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?