=============================================================================== 【名  称】 VisualBasic用 MP3操作DLL Ver 1.615 【圧 縮 名】 vbmp31615.lzh 【制作者名】 ミケ 【動作環境】 Windows95/98/NT/2000 (98/NT/2000 動作確認済み)        VisualBasic 4.0/5.0/6.0 (6.0 動作確認済み)        (VC++, C++Builder, Delphi, HSP 等でも動作報告を受けています) 【作成方法】 LHA X vbmp31615.lzh 【備 考】 Microsoft VisualBasic を別途用意してください。 ------------------------------------------------------------------------------- VisualBasic用 MP3操作DLL これは VisualBasic で MPEG Audio ファイルを操作するアプリケーション開発を 目的としたライブラリです。 このライブラリは GPL に準拠しています。 ■特徴 ・すべての MP3 形式に対応 MPEG-1/2 Layer1〜3 及び、RIFF WAVE/MP3 形式に完全対応しています。 また、MPEG2 より低い周波数帯をサポートする MPEG 2.5 や VBR(可変長ビットレート)形式、またWindows標準のWAVEファイル にも対応しています。 ・スレッドの利用により MPEG Audio をバックグラウンドで再生 スレッドの利用により MPEG Audio ファイル再生開始後、 すぐに VisualBasic へ制御が戻ります。 再生経過時間の表示、再生中の音量調節などのリアルタイムな操作が可能です。 ・コールバック関数による再生時間、ステータスの自動通知(VB5以降対応) コールバック関数により、再生時間及びステータスを DLL から 自動的に通知されます。よって、タイマーコントロールを利用しなくても 簡単にステータス管理が行えます。 ・i486 マシンで演奏可能!! 再生時のサンプリングレートや読み込みバッファサイズなど 細かい設定が行えるため、比較的非力なCPUでも再生可能な プレイヤーを作成できます。 試しに、我が家の PC-9821Lt2(i486 DX2 50MHz) でサンプリング レート22KHz モノラルにして演奏してみたところ、頭の読み込み 時にわずかに音飛びしましたが、後は正常に演奏されました。 (サンプルプログラム使用) ・タグの編集機能 タグの編集機能をにより、より凝った mp3 プレイヤーを作成できます。 ジャンル番号とジャンル名の関係は別関数より取得することが可能です。 また、再生中のファイルに対しても更新可能となっています。 ・MP3 -> RMP などのファイル変換可能 タグ編集ツールには基本的な機能である、ファイル形式の変換 SI フィールドの編集、マックヘッダ除去機能をサポートしました。 mp3 プレイヤーの枠を越えた多様なソフトが作成可能です。 ・歌詞ファイル&LYRICS3 v2.00タグに対応 歌詞ファイルやLYRICS3タグの自動読み込みに対応しました。 使用者は歌詞ファイルの構造などを意識せず、簡単に歌詞表示機能を 追加することができます。 ・スペクトラムアナライザ/オシロスコープ機能搭載 スペクトラムアナライザやオシロスコープ機能を追加しました。 スペアナ付きのプレイヤーも簡単に作成できます。 ・グラフィックイコライザ機能搭載 グラフィックイコライザの搭載により音質を自由に変更できます。 ・ACM利用によるエンコード機能搭載 外部の CODEC を利用することで WAV ファイルのエンコードが可能です。 ■対応ファイル形式 ◇MPEG Audio ・バージョン/レイヤー MPEG-1 Layer1〜3 MPEG-2 Layer1〜3 MPEG 2.5 VBR(可変長ビットレート)形式 - Xing形式 VBR - F-IIS形式 VBR ・ファイル形式 標準形式 RIFF WAVE 形式 RIFF MP3(RMP3) 形式 ・拡張子 *.mp1, *.mp2, *.mp3, *.rmp, *.wav ・タグ - ID3Tag v1, ID3Tag v1.1 - SIフィールド - LYRICS3 v2.0 タグ ※MACバイナリ、ID3Tag v2付きファイルも再生可 ◇WAVEファイル(Windows標準PCMファイル) ・拡張子 *.wav ◇その他 - 歌詞ファイル ミリ秒タグ、@タグなどにも対応 ■添付ファイル VBMP3.DLL VB用 MP3操作DLLファイル VBMP3.BAS VBMP3.DLLをを使用するための宣言を記述した標準モジュール SAMPLE.LZH VBMP3.DLL を利用した MP3 プレイヤーのサンプル・プログラム README.TXT このファイル func.txt 関数リファレンス code.txt 定数一覧 gpl_j.txt GNU 一般公有使用許諾書(和文) gpl_e.txt GNU 一般公有使用許諾書(英文) TimeTag.LZH タイムタグ仕様書(@タグについてもこちらを参照) ■MP3.DLL の利用方法 ●開発 (1)VBMP3.DLL をプロジェクトファイルと同じディレクトリ、もしくは windows\system ディレクトリに置きます。 (2)プロジェクトファイルと同じディレクトリに と VBMP3.BAS をコピーします。 (3)プロジェクトファイルに VBMP3.BAS を追加します。 ※開発中にメニューバーのストップボタンを押しプログラムを終了すると vbmp3_free() 関数がコールされません。そのため DLL が確保したメモリが 解放されず、VB の動作が不安定になることがあります。 プログラムの終了するときには、必ず vbmp3_free() 関数を実行するように してください。 ※VBでは「\0」ターミネータが効かないため、文字列を取得する 関数では「\0」以降のゴミデータも取得してしまいます。 vbmp3.bas 同梱の NTrim 関数を利用するなどして「\0」以降の データを削除してから利用するようにしてください。 ●実行 VBMP3.DLL をコンパイルしたファイルと同じディレクトリ、もしくは windows\system ディレクトリに置きます。 ■注意事項 1. 著作権 ・ このプログラムの著作権は、Xing Technology, GoodNoise, 高橋政雄氏, ミケこと、苅込大輔が保有しています。 ・ 本プログラムで使用しているFFTアルゴリズムの著作権は Reliable Software が保有しています。 ・ TimeTag.LZH(タイムタグ仕様書)の著作権は駄歌詞屋氏が保有しています。 配布先:http://get.to/dagashiya ・ このプログラムはフリーウェアですが、転載、配布、公開する場合、 「3. 転載及び再配布について」にある条件を守ってください。 2. 免責 ・ VisualBasic用 MP3操作DLL の使用による、いかなる損害、その他についても 作者はその責任を負いません。 ・ バグ等があったとしても、これを訂正する義務は負いません。 3. 転載及び再配布について ・ 添付ファイル及び内容を変更しない限り、転載、再配布は自由にして頂いて かまいません。 ただし、VBMP3.DLL を必要とする実行形式ファイルとともに添付する場合は VBMP3.DLL 単体での再配布もかまいません。 この場合は、README.TXT 等のドキュメントファイルに VBMP3.DLL の著作権が 作者にあることを明記して頂けると有り難いです。 また、このプログラムは GPL に準拠していますが、この DLL を利用する アプリケーションは GPL に準拠する必要はありません。 詳しくは、GNU 一般公有使用許諾書をお読み下さい。 4. サポート 最新版の公開等は、以下のページより行っています。 http://www.angel.ne.jp/~mike/ VisualBasic用 MP3操作DLL に関して、ご質問/ご要望等がありましたら 作者宛にメールしてください。 感想なども送ってもらえると嬉しいです(^^)/ (忙しく返事が出来ないときはご容赦ください) e-mail : mike@angel.ne.jp ※動作不正の報告は、OSの種類とバージョン、VBMP3 のバージョン どの様な操作をした時に発生したかも一緒に教えてください。 こちらで、再現できれば早期に対応できると思います。 5. GPL について 本ライブラリのデコードエンジンは、当初は Visual C++で作るMP3 Player に 付属している Xingの古いデコードエンジンを元にしたライブラリを利用してい ました。(*この時点では、出版社側が許可を得ています。) しかし、途中のバージョンより、VBRやグラフィックイコライザ対応のため、 デコードエンジン部分に更に変更を加えました。 GPLに基づいているため、オープンソースとします。 このソースコードを改変して配布する場合は、GPLに基づきますので、注意して ください。 GPLの詳細についてはGNU 一般公有使用許諾書をお読み下さい。 MP3 Decoder originally Copyright (C) 1995-1997 Xing Technology Corp. http://www.xingtech.com Portions Copyright (C) 1998 GoodNoise Portions Copyright (C) 1999 Masao Takahashi Portions Copyright (C) 1999-2000 Daisuke Karikomi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 6. VBMP3.dll 及び VCMP3.lib のソース公開について 本プログラムのソースはメールにて公開しております。 希望される方は、下記のアドレスまでソース希望とメールしてください。 折り返し、VBMP3.dll 及び VCMP3.lib のソース一式を送付します。 mailto: mike@angel.ne.jp 要望が多い場合は、一括で送らせていただくこともありますので ご了承下さい。 また、デコードライブラリ mp3dec のソースはホームページ上で 公開しておりますので、そちらからダウンロードしていただくよう お願いします。 http://www.angel.ne.jp/~mike/ ■バージョンアップ履歴 Ver 1.615 ・高速シーク時にファイルクローズ漏れがあったのを修正 ・高速シーク時に総演奏時間以上の位置にシークすると曲の頭に 戻っていたのを修正 ・頭にタイムタグが付いていなかったときタグ時間を0で返していたのを修正 Ver 1.614 ・再生前に vbmp3_getSpectrum 実行時にエラーとなっていたのを修正 ・上記に伴い vbmp3_getWave も修正 ・vbmp3_setLyricsNextAdjustTimeの内容が反映されていなかったのを修正 Ver 1.613 ・ID3Tag v2 のサイズに誤った値が設定されている場合にvbmp3_cutID3v2を 使用した場合にもゴミが残らないように修正 ・vbmp3_checkTimeTag使用時にタグ無しファイルで 1 が返っていたのを修正 ・vbmp3_getLyricsで取得できる歌詞がおかしくなっていたのを修正 ※上記に伴い、vbmp3_getLyrics カラオケタグ付き歌詞の行でをカラオケタグ 毎に取得していたのを1行取得に変更 (問題がある場合はお知らせ下さい) ・タイムタグ仕様書を添付 ・関数リファレンスにVBMP3の初期設定値一覧を追加 Ver 1.612 ・Lyrics3 タグの存在しないデータを再生中 vbmp3_readLyrics3Data を実行すると、途中で演奏が止まってしまうバグを修正 ・vbmp3_getLyrics2 で取得できるタグサイズがマイナス値に なっていたのを修正 ・シーク中に誤ったステータスを取得することがあったのを修正 ・リロード中に誤ったステータスを取得することがあったのを修正 ・vbmp3_setLyricsNextAdjustTimeによる先行読み出し指定時に タグ間時間(length)にも反映するよう修正 ・最初のタイムタグ以前の情報も保存・表示するように変更 ・vbmp3_outLyricsFileでタグ無し行、@タグ行を出力するように修正 ・歌詞読込後にvbmp3_setNotTagLyricsLineによる切替可能に変更 ・@タグ取得関数追加(vbmp3_getAtTagData) ・歌詞情報取得用コールバック関数呼び出し関数テスト追加(vbmp3_getCallbackLyricsData) ※API が固まっていないため、実験公開します。 工夫次第で、現在の getLyrics 系では出来なかった全歌詞表示なども可能となります。 この関数についてご要望がありましたらメールもしくは掲示板にお願いします。 ・カレントタグ位置取得関数追加(vbmp3_getLyricsPoint) ・vbmp3_openなどに、テキストボックスを直接引数に設定し、文字をセットしない状態で 実行すると NULLポインタが渡されてしまう仕様に対応 Ver 1.611 ・ID3Tag v2 除去関数追加(vbmp3_cutID3v2) ・歌詞時間(Winamp->標準時間)変換関数追加(vbmp3_convTimeW2N) ・歌詞時間(標準時間->Winamp)変換関数追加(vbmp3_convTimeN2W) ・歌詞ファイル出力関数追加(vbmp3_outLyricsFile) ・時間タグのない行末に改行コードを付けてしまっていたのを修正 ・内部的に@タグに対応(2000/05/18現在の仕様準拠) ・@タグ読込設定関数追加(vbmp3_useAtMarkTag) ・歌詞標準時間比設定関数追加(vbmp3_setTimeRatio) ・vbmp3_setLyricsTime に 2(設定時間比使用) を追加 ・vbmp3_clearLyrics, vbmp3_setLyricsFile, vbmp3_readLyrics3Data の 3関数を再生中にも使用可能に変更 ・タイムタグ有無チェック関数追加(vbmp3_checkTimeTag) Ver 1.61 ・RMP形式<->WAVE形式の相互変換に対応 ・vbmp3_changeMp3でエラーが発生することがあったのを修正 ・共通部の処理を一部修正 ・vbmp3_getLyrics2歌詞行切替処理を修正 ・Winamp時間の取得方法を駄歌詞屋氏の形式に変更 参考: http://dagashiya.virtualave.net/04_1.html ・高速シーク使用設定関数追加(vbmp3_quickSeek) ※高速シーク時は、再生時間などが多少ずれることがあります。 ・vbmp3_getFileTypeのファイルタイプに標準WAVEファイル(64)を追加 ・誤差軽減のため時間取得に float を使用していた箇所を double に変更 ・シーク処理を一部修正 ・ピッチ変更部分を修正 Ver 1.604 ・データサイズ以上のポイントへシークされたときの処理を変更 ・歌詞行の表示タイミング調整関数追加(vbmp3_setLyricsNextAdjustTime) ・vbmp3_setListInfoEX2関数の内部処理を修正(VB正式対応) Ver 1.603 ・vbmp3_getSilentFrames の処理を一部修正 ・vbmp3_getLyrics, vbmp3_getLyrics2 で最初の時間タグ位置に来るまで 歌詞情報を取得できなくなっていたのを修正 ・歌詞表示位置の調整関数追加(vbmp3_setLyricsAdjustTime) ・outputデバイスオープン時にソフトボリュームを初期化してしまっていたのを修正 ・シーク処理を一部修正 ・停止時のシークで再生開始するか設定する関数追加(vbmp3_setSeekPlay) Ver 1.602 ・vbmp3_getSilentFrames で無音部分を取得できなくなっていたのを修正 Ver 1.601 ・WAVEファイル及び VBR形式ファイルのシークがおかしかったのを修正 Ver 1.60 ・vbmp3_getFileTagInfoEX 実行時に不安定になっているのを対策? ・可変長対応SI設定関数追加(vbmp3_setListInfoEX2) (サンプルの提供ありがとうございました>YunaSoftさん) ・歌詞ファイルのタグ無し行読込設定関数追加(vbmp3_setNotTagLyricsLine) ・データ無しSIフィールドの出力設定関数追加(vbmp3_setNotDataSiWrite) ・停止中のシーク処理が無視されていたのを修正 ・読込済み歌詞データLYRICS3登録関数追加(vbmp3_setReadLyrics3Info) ・カラオケタグ有無チェック関数追加(vbmp3_checkKaraokeTag) ・無音フレーム数取得関数の対象に 0x00 データを追加 ・フレーム取得方法設定関数追加(vbmp3_setFrameReadFlag) ・シーク処理に時間が掛かっていたのを修正 Ver 1.59 ・サイズの大きいファイルを読み込むと桁あふれが発生していたのを修正 ・vbmp3_getFileLyrics3Info(VB)関数実行時に余計な「\0」を削除 Ver 1.58 ・カラオケタグの位置によってエラーとなっていたのを修正 ・先頭にタグのない行の読込に対応 ・カラオケタグ対応歌詞取得関数追加(vbmp3_getLyrics2) ・vbmp3_setListInfoEx(VB)関数実行時に余計な「\0」を削除 ・vbmp3_getLyricsでタグのない行を優先して表示していたのを修正 ・歌詞表示時間切替関数追加(vbmp3_setLyricsTime) ・wave出力デバイスID設定関数追加(vbmp3_setWaveOutDeviceId) ・LYRICS3 削除関数追加(vbmp3_delFileLyrics3Info) Ver 1.57 ・LYRICS3 の歌詞を読み込む処理追加 - 上記に伴い vbmp3_getLyrics 関数で LYRICS3 の歌詞表示可能 ・LYRICS3 情報取得関数追加(vbmp3_getFileLyrics3Info) ・LYRICS3 情報取得関数(VB用)追加(vbmp3_getFileLyrics3InfoVB) ・オープン時の LYRICS3 自動読込設定関数追加(vbmp3_setLyrics3Use) ・LYRICS3 の歌詞を手動で読み込ませる関数追加(vbmp3_readLyrics3Data) ・読込歌詞情報クリア関数追加(vbmp3_clearLyrics) ・スペアナ用窓切り替え関数追加(vbmp3_setFftWindow) ・RIFF 形式のファイルへ ID3Tag v1 を新規追加するとき IID3 フィールドも作成するように修正 ・RIFF WAVE形式の解析に失敗することがあったのを修正 ・LYRICS3 情報編集関数追加(vbmp3_setFileLyrics3Info) ・LYRICS3 情報編集関数(VB用)追加(vbmp3_getFileLyrics3InfoVB) ・SIフィールド取得拡張関数追加(vbmp3_getListInfoEX) ・SIフィールド取得拡張関数(VB用)追加(vbmp3_getListInfoExVB) ・SIフィールド編集拡張関数追加(vbmp3_setListInfoEX) ・SIフィールド編集拡張関数(VB用)追加(vbmp3_setListInfoExVB) ・ID3Tag v1.1 対応 - ID3Tag v1 取得用拡張関数追加(vbmp3_getFileTagInfoEX) - ID3Tag v1 編集用拡張関数追加(vbmp3_setTagInfoEX) ・カラオケタグに対応 - カラオケタグ使用設定関数追加(vbmp3_setKaraokeUse) Ver 1.56 ・LYRICS3 v2.00 に暫定対応 - フレーム取得処理を修正 (vbmp3_open, getFileInfo, getFileInfo2) - RIFF形式変換時に LYRICS3 を ILYC フィールド、もしくは IID3 フィールドに残す処理を追加 (vbmp3_changeRmp, vbmp3_changeWav) - 標準MP3形式変換時に LYRICS3 を残す処理を追加 (vbmp3_changeMp3) - 奇数バイトの LYRICS3 に対応 - ファイルタイプに LYRICS3(=32) を追加 (vbmp3_getFileType) - LYRICS3 の挿入フィールドを設定する関数追加(vbmp3_setLyrics3InsField) - SIフィールド更新時に LYRICS3 を ILYC フィールド、もしくは IID3 フィールドに残す処理を追加 (vbmp3_setListInfo) ※ LYRICS3 を挿入するフィールドの更新は行えません。 すべてのフィールドを更新したい場合は、LYRICS3 を挿入しない 設定にして下さい。 ・128BYTE を越す SIフィールドを読み込むとエラーとなっていたのを修正 Ver 1.55 ・WAVEファイルデコード時に時間/フレーム/サンプル数を 取得できくなっていたのを修正 Ver 1.54 ・再生しながらWAVEファイルにデコードする関数追加(vbmp3_playDecodeWave) ・VBRI (F-IIS方式のVBR) に対応 (情報の提供ありがとうございました>計さん) Ver 1.53 ・ボリューム変更可能かチェックする関数追加(vbmp3_getWaveOutSupport) ・ハードボリューム関連処理を修正 ・再生時のスレッドチェック強化 ・無音フレーム数取得関数追加(vbmp3_getSilentFrames) ・WAVEデバイスオープン失敗時にエラーとなっていたのを修正 ・Windows2000でWAVEファイルの再生に失敗していたのを修正 Ver 1.52 ・一部の特殊な WAVE ファイルが再生できなかったのを修正 ・演奏時間補正の設定関数追加(vbmp3_setOverTime) ・ソフトボリューム変更関数追加(vbmp3_setSoftVolume) ・ソフトボリューム取得関数追加(vbmp3_getSoftVolume) Ver 1.51 ・WinNT で音程を変えない速度変更を行うと不安定になっていたため WinNT では機能しないよう暫定的に対処 ・音程を変えない速度変更処理一部変更 ・ステータスを停止に変えるタイミングを変更 ・vbmp3_play 時の多重再生チェック強化 Ver 1.50 ・エンコード終了時にファイルをクローズしていなかったのを修正 ・最後に発生したエラー番号取得関数追加(vbmp3_getLastErrorNo) ・音程を変えない再生速度変更関数追加(vbmp3_setStepPitch) ・再生速度の設定値取得関数追加(vbmp3_getStepPitch) Ver 1.49 ・オシロスコープとスペクトラム・アナライザを 8bit WAVEファイルに対応 ・ID3 Tag v2 を内包した RIFF 形式 mp3 に対応 - オープン処理修正(vbmp3_open) - 各種情報取得系処理修正(vbmp3_getFileInfo2 等) - ファイル変換系処理修正(vbmp3_changeRmp 等) - ファイルタイプ取得処理修正(vbmp3_getFileType) Ver 1.48 ・Ver1.47 のファイル未オープン時にエラーの修正漏れ対策 Ver 1.47 ・WAVEファイルの再生に対応 - WAVEファイル判別処理追加 - デコード処理変更 - シーク処理変更 - フェードイン・アウト処理変更 - 1フレームサイズを暫定的に 44100バイトに設定 (MPEG-1 Layer3 2ch データでは 4608バイトとなる) - その他細かい修正 ・ファイル未オープン時に vbmp3_getTotalSamples 等を を実行するとエラーとなっていたのを修正 Ver 1.46 ・フェードアウト関数追加(vbmp3_fadeOut) ・フェードイン演奏開始関数追加(vbmp3_setFadeIn) ・フェードアウト演奏終了関数追加(vbmp3_setFadeOut) Ver 1.45 ・ピッチ変更関数追加(vbmp3_setPitch) ・ピッチの設定値取得関数追加(vbmp3_getPitch) ・再生データ再読込関数追加(vbmp3_reload) Ver 1.44 ・曲の最後でコールバックされず時間が狂っていたのを修正 ・ACM「Fraunhofer IIS MPEG Layer-3 Codec (professional)」 によるエンコード機能追加(vbmp3_encodeOpen, vbmp3_encodeStart, vbmp3_encodeStop,vbmp3_getEncodeState) ・シーク時に停止状態でも曲が開始されていたのを修正 Ver 1.43 ・vbmp3_getFileType で ReadOnly ファイルを読み込んだとき エラーになっていたのを修正 ・ID3 Tag v1 入りのファイルが読み込めなくなっていたのを修正 (サンプルの提供ありがとうございました>Tomokiさん) ・歌詞ファイルのミリ秒タグに対応 ・曲の最後へシークしたとき歌詞の位置が変わらなかったのを修正 ・Winamp再生時間取得関数追加(vbmp3_getWinampPlayMs) ・Winamp総演奏時間取得関数追加(vbmp3_getWinampTotalSec) ※上記2関数の取得時間はあくまで推定時間です。 自前で歌詞表示を行う場合などにご利用下さい。 ・再生時のビットレート取得間数追加(vbmp3_getPlayBitRate)(VBR対応) Ver 1.42 ・グラフィックイコライザ機能追加(vbmp3_setEqualizer) ・SCMPX形式VBRとXing仕様VBRの判別処理変更 ・時間取得のタイミング変更 ・VBMP3_OPTION 構造体の初期値調整により音飛び軽減 - outputBlock を復帰 ・出力サンプリングレート変更による倍速演奏対応 - 演奏時間取得処理 - 時間指定のシーク処理 - 歌詞取得処理 ※上記の倍速演奏は動作を保証しません。 また、倍速演奏時のサンプル数及びフレーム数には対応しません。 取得した値をn倍することで求めることが出来ます。 Ver 1.41 ・データが奇数バイトの時、SIフィールド読込みに失敗していたのを修正 ・データが奇数バイトの時、SIフィールド書込み位置が誤っていたのを修正 (サンプルの提供ありがとうございました>ふんわりさん) ・SCMPX形式VBRとXing仕様VBRの判別処理変更 Ver 1.40 ・Ver 1.39 のVBR対応が完全ではなかったため修正 (各種テストやサンプルの提供ありがとうございました>琥珀さん) ・ファイルオープン前に vbmp3_getFileInfo2 などを使用すると エラーとなっていたのを修正(Ver1.39のバグ) Ver 1.39 ・再生サンプル数取得関数追加(vbmp3_getPlaySamples) ・総サンプル数取得関数追加(vbmp3_getTotalSamples) ・指定サンプル移動関数追加(vbmp3_setPlaySamples) ・上記に伴いシーク処理を修正 ・WAVE成分取得関数追加(vbmp3_getWave) ・上記に伴い以下の関数を廃止(定義は残してあります) - vbmp3_getWaveData また、コールバック関数より次の id を廃止 - MSG_WAVE_LEFT - MSG_WAVE_RIGHT ・vbmp3_getSpectrum 関数を大幅修正 ・上記に伴い以下の4関数を廃止(定義は残してあります) - vbmp3_startAnalyzeThread - vbmp3_stopAnalyzeThread - vbmp3_startAnalyze - vbmp3_stopAnalyze ・VBMP3_OPTION 構造体の項目の初期値変更 - outputBlock は未使用 ・時間をサンプル数から算出するように変更 ・Winamp との時間誤差修正処理を変更 ・歌詞情報取得のタイミングを変更 ・一部の VBR 形式 MP3 ファイルが再生できなかったのを修正 Ver 1.38 ・再生フレーム数取得関数追加(vbmp3_getPlayFlames) ・指定フレーム移動関数追加(vbmp3_setPlayFlames) Ver 1.37 ・アナライズスレッド生成許可関数追加(vbmp3_startAnalyzeThread) ・アナライズスレッド生成禁止関数追加(vbmp3_stopAnalyzeThread) Ver 1.36 ・スペクトラムアナライザ機能追加 ・アナライズ結果取得関数追加(vbmp3_getSpectrum) ・アナライズ開始関数追加(vbmp3_startAnalyze) ・アナライズ停止関数追加(vbmp3_stopAnalyze) ・再生時間取得処理変更 outputBlock をフレーム数から WAVEデータブロック数に変更 ・VBMP3_OPTION 構造体の項目の初期値変更 ・ボリューム取得関数追加(vbmp3_getVolume) (停止中のみ取得可能です) Ver 1.35 ・MP3 再生中に vbmp3_getFileInfo2 等で違うビットレートのファイルを 読み込むと動作が不安定になっていたのを修正 Ver 1.34 ・WAVEデータ取得関数追加(vbmp3_getWaveData) ・コールバック関数のWAVE データ取得用の id 追加 ※上記の機能は、WAVE の波形を表示するためのものです。 タイマーコントロールのみかコールバック関数との併用かを 選択できます。 (サンプルでは実行時のコールバック使用/未使用で切り替わります) コールバック関数を使用する方法は終了時にエラーが 発生することがあります。かなり厳密にテストし私の環境では100% 起こりませんが、場合によっては発生する可能性があります。 動作の確認をしてから使用するようにしてください。 Ver 1.33 ・歌詞ファイルのセット関数追加(vbmp3_setLyricsFile) ・歌詞ファイル読込関数追加(vbmp3_getLyrics) ・歌詞切り替えのタイミングをできるだけ Winamp に近づけるよう補正 (まだ、完全ではありません。今後、更に微調整していきます。) Ver 1.32 ・WAVEファイルデコード関数追加(vbmp3_decodeWave) Ver 1.31 ・VBMP3 で使用しているデコードライブラリを変更 Joint Stereo 再生時に右チャンネルの出力がおかしかったのを修正 ・コールバック周りの処理修正 ・バッファサイズが大きいと再生時間を先読みしてしまう(秒数がずれる)為 VBMP3_OPTION の初期値を変更(現在、対策案を検討中) ※音飛び防止のためバッファサイズを大きくしたときは再生時間の 補正を行って下さい。 Ver 1.30 ・VBMP3 で使用しているデコードライブラリを変更 ・MPEG 2.5 の再生に対応 ・VBR(可変長ビットレート)形式に対応(BitRateに 0 が返ります) ・vbmp3_setDecodeOption / vbmp3_getDecodeOption 関数で使用する VBMP3_OPTION 構造体の項目内容変更 ・VBMP3 内部の ID3Tag, RIFF 取得処理を共通関数化 ・コールバック関数の引数id の番号割り当て変更 ・VBMP3_OPTION の初期値変更により音飛び軽減(CPU負荷は高くなったかも(^^;) ・コールバック周りの処理修正 ・コールバック一時停止用関数(vbmp3_stopCallback)と コールバック再開始用関数(vbmp3_startCallback)を暫定追加 暫定の為、リファレンスには記述しません。 使用方法: Call vbmp3_stopCallback '処理 Call vbmp3_startCallback Ver 1.29 ・コールバック設定関数追加(vbmp3_callback) Ver 1.28 ・標準MP3->RIFF MP3(RMP)形式変換関数追加(vbmp3_changeRmp) ・標準MP3->RIFF WAV形式変換関数追加(vbmp3_changeWav) ・RIFF形式->標準MP3変換関数追加(vbmp3_changeMp3) ・SIフィールド編集関数追加(vbmp3_setListInfo) ・マックヘッダ除去関数追加(vbmp3_cutMacBinary) ・ファイルタイプ取得関数追加(vbmp3_getFileType) Ver 1.27 ・ジャンル番号(251〜255)に対応 ・vbmp3_getFileInfo, vbmp3_getFileInfo2 のファイル読込処理を高速化 Ver 1.26 ・vbmp3_getFileInfo,vbmp3_getFileInfo2,vbmp3_getFileTagInfo 関数で、READ ONRY 属性のファイルを読み込めないバグを修正 ・vbmp3_openで取得できるトラック名及びアルバム名を ID3Tag のみに修正 ・vbmp3_getFileInfo,vbmp3_getFileInfo 関数の同期ヘッダ取得処理に 誤りがあったのを修正 ・MPEG2.5 形式ファイルのタグ及びMPEGヘッダ情報取得対応 ※再生には対応していません Ver 1.25 ・vbmp3_getFileInfo に LIST チャンク 取得を加えた関数追加 (vbmp3_getFileInfo2) ・RIFF 形式の MP3 ファイルの LIST チャンク(SI フィールド)データ 取得関数追加(vbmp3_getListInfo) ・タグの書き込み時に genre へ 0〜255 以外の値を指定したとき 動作が不安定になっていたのを修正 ・タグ情報取得関数追加(vbmp3_getFileTagInfo) Ver 1.24 ・WindowsNT で vbmp3_getGenre 関数使用時にアプリケーションエラーと なっていたのを修正 これに伴い、vbmp3_getGenre の引数/戻り値変更 Ver 1.23 ・vbmp3_open によりオープンされていなくても ファイル情報取得可能な関数追加(vbmp3_getFileInfo) Ver 1.22 ・ファイルオープン時にタグ情報のクリアをしていなかったのを修正 ・vbmp3_getGenreで100個近くのジャンル名を取得したときに エラーとなっていたのを修正 ・タグ編集関数追加(vbmp3_setTagInfo) Ver 1.21 ・vbmp3_play 実行直後に vbmp3_getState を実行すると 停止中となるのを修正 ・vbmp3_close を短時間に連続実行するとスレッドの 解放に失敗するのを修正 ・ジャンル取得関数追加(vbmp3_getGenre) ・VBMP3.bas に、文字列の \0 以降を除去する関数 NTrim を追加 【使用法】 'orgStr : "\0" の含まれた文字列 newStr = NTrim(orgStr) Ver 1.2 ・VBMP3 設定関数追加(vbmp3_setVbmp3Option) ・VBMP3 設定値取得関数追加(vbmp3_getVbmp3Option) ・デコードエンジン設定関数追加(vbmp3_setDecodeOption) ・デコードエンジン設定値取得関数追加(vbmp3_getDecodeOption) Ver 1.11 ・拡張子が mp3 の RIFF WAVE 形式ファイルが 読み込めなかったのを修正 Ver 1.1 ・タグ情報取得関数追加(vbmp3_getTagInfo) ・MPEGヘッダ情報取得関数追加(vbmp3_getMpegInfo) ・VBMP3 バージョン取得関数追加(vbmp3_getVersion) ・ヘッダ部の先頭が 0x00 で始まるファイル(Macヘッダ?)に対応 ・RIFF WAVE/MP3 形式のデータチャンクサイズに ファイルサイズ以上のデータサイズが格納されていたとき TotalSize が取得できなかったのを修正 ・WAVE ファイル等を読み込んだときエラーとなっていたのを修正 Ver 1.0 一般公開 ■参考文献 この DLL を作成する上で以下の書籍を参考にさせて頂きました。 ●MP3関連 高橋政雄著 VisualC++ 6.0 でつくる MP3 Playerプログラミング エーアイ出版 月刊Cマガジン ソフトバンク パブリッシング社 ●DLL関連 北山洋幸著 技術者のための VisualC++ 実践プログラミング技法 技術評論社 ■謝辞 ・オリジナルのデコードライブラリをフリーで公開して下さいました Xing Technology に心より感謝致します。 ・FreeAmp と言う有用なソフトのソースを公開して下さった GoodNoise の皆様に 心から感謝致します。 http://www.freeamp.org ・「VisualC++ 6.0 でつくる MP3 Playerプログラミング」という VC++ の知識に 乏しい私でも分かりやすい本を書いていただき、更に MPEG 2.5 / VBR に対応した デコードライブラリを提供して下さいました高橋 政雄氏に心から感謝致します。 ・スペクトラムアナライザを実現するために Reliable Software の FFTアルゴリズムを利用させて頂きました。 高速なアルゴリズムを提供して下さいました Reliable Software の皆様に 心から感謝致します。 ・歌詞対応に当たり、Lyrics3形式、Winamp時間の取得方法、そして貴重な 時間を割いての詳細なテストと報告など、多大な協力をして下さりましたました、 駄歌詞屋氏に心から感謝致します。 http://get.to/dagashiya ■追記(雑談) Ver1.0 を出したとき私の VC++ 歴は丁度1週間程度でした。 VBMP3 を作り始めたきっかけは、インターネット上で VB で使用できる MP3 用ライブラリが見つからなかったことです。 いつもであれば、「無ければ自分で作ってしまえ」となるのですが今回は Mpeg のデコードなど高度な技術が必要なため、容易に手が出ませんでした。 そんな中、本屋で偶然、参考文献にある MP3本を見つけました。 当時、私は VC++ を所有していない(C++ の経験が殆どない)の状態だったのですが ダメもとで、すこし立ち読みしてみました。 すると、使い慣れた C 言語でのソースもあるではないですか。 これなら、私でも作れるかも、という甘い気持ちで、いきなり VC++ を購入し 作成に入りました(^^; MP3本には、DLL のソースも付いていましたが、クラスの山、かつ API が クラスのインスタンスを渡すという方式のものでした。 当然、そのままでは VB では使えません。(クラス自体は何とかなるのですが(^^;) そんなわけで、付属のソースを参考に C でソースを書くことから始めました。 とは言っても、いきなり作れる物ではありません。 まずは DLL と VB の連携。次に、MPEG情報取得のみの DLL。 そしてスレッド無しの再生DLL と徐々に作成していきました。 そうして出来たのが VBMP3 です。 これを書いている今現在でも VC++(の C)歴が2ヶ月程度です。 もし、「C なら分かるけど VC++ はよく分からない」または 「VB を使用しているけど処理が遅い」などの経験がある方は DLL 作成に チャレンジしてみてはいかがでしょうか。 VB で使える DLL 作成であれば参考文献の2冊目の本だけも大丈夫ですよ(^^)/ 最後までお読みいただき、ありがとうございますm(__)m [vbmp31615.lzh]