- ベストアンサー
VBからID3タグをいじる方法
VBからID3タグをいじる方法を教えてください。 ワードパッドでひらいてもどこがタグだか分かりません できればサンプル(ソースでも)お願いします
- carubi
- お礼率47% (9/19)
- Visual Basic
- 回答数4
- ありがとう数6
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
サンプル作ってみました。 ID3=MP3のタグ情報と勝手に思って作ってます。 やはり、MP3のファイル末尾の128バイトに情報が入っているようです。 そのタグの中身は TAG [文字列 3BYTE "TAG"で固定] TRACK NAME トラック名 [文字列 30BYTE] AIRTIST NAME アーティスト名 [文字列 30BYTE] ALUBM NAME アルバム名 [文字列 30BYTE] YEAR リリース年号 [文字列 4BYTE] COMMENT コメント [文字列 30BYTE] (ID3 Tag v1.1 では 28BYTE) GENRE ジャンル番号 [数値 0~255] です。 サンプルのソースはエラーチェックを入れてませんので、ジャンル番号に文字列や大きな数字を入れたらバグると思います。それと、直接そのファイルを操作するのではなく、タグを読み取り、新たなタグ情報をもったファイルを作成する仕組みになってます。擬似的に作成して、ファイルをコピーしたら、元のファイルを操作したように見えるので、そこら辺は適当に扱ってください。 サンプルに必要なもの フォーム コマンドボタン1と2 ラベル1~6 テキストボックス1~6 Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _ Destination As Any, _ Source As Any, _ ByVal Length As Long _ ) Private Const testFile1 As String = "C:\1.mp3" '元となるファイル Private Const testFile2 As String = "C:\2.mp3" '作成されるファイル Private Const AREA_TAG As Long = 128 'タグの領域は128バイト Private lngFileSize As Long 'ファイルサイズ Private fileBuf() As Byte '読み込みバッファ Private Sub Command1_Click() Dim lngFile As Long 'ファイルナンバ Dim tagBuf() As Byte 'タグ情報 'ファイル操作の初期化 Reset 'ファイルサイズを取得 lngFileSize = FileLen(testFile1) '読み込みバッファの領域確保 ReDim fileBuf(lngFileSize - 1) As Byte 'バッファを取得 lngFile = FreeFile Open testFile1 For Binary As #lngFile Get #lngFile, , fileBuf Close #lngFile 'タグエリアの領域確保 ReDim tagBuf(AREA_TAG - 1) As Byte 'バッファからタグ情報のみ取得 Call copyAry(tagBuf(0), fileBuf(lngFileSize - AREA_TAG), AREA_TAG) With Me 'TRACK NAME を取得(3バイト目から30バイト) .Text1.Text = getStringforUniByte(tagBuf, 4, 30) 'AIRTIST NAME を取得(34バイト目から30バイト) .Text2.Text = getStringforUniByte(tagBuf, 34, 30) 'ALUBM NAME を取得(64バイト目から30バイト) .Text3.Text = getStringforUniByte(tagBuf, 64, 30) 'YEAR を取得(94バイト目から4バイト) .Text4.Text = getStringforUniByte(tagBuf, 94, 4) 'COMMENT を取得(98バイト目から30バイト) .Text5.Text = getStringforUniByte(tagBuf, 98, 30) 'GENRE を取得(128バイト目の値) .Text6.Text = tagBuf(128 - 1) End With End Sub Private Sub Command2_Click() Dim lngFile As Long 'ファイルナンバ Dim tagBuf() As Byte 'タグ情報 Dim wkStr As String 'ワークの文字列 Dim setStr As String '実際に収納する文字列 'ファイル操作の初期化 Reset With Me 'お決まりの部分です setStr = "TAG" 'TRACK NAME を取得 wkStr = fixStr_setNullChar(.Text1.Text, 30) setStr = setStr & wkStr 'AIRTIST NAME を取得 wkStr = fixStr_setNullChar(.Text2.Text, 30) setStr = setStr & wkStr 'ALUBM NAME を取得 wkStr = fixStr_setNullChar(.Text3.Text, 30) setStr = setStr & wkStr 'YEAR を取得 wkStr = fixStr_setNullChar(.Text4.Text, 4) setStr = setStr & wkStr 'COMMENT を取得 wkStr = fixStr_setNullChar(.Text5.Text, 30) setStr = setStr & wkStr 'ここまでの文字列をFormUnicodeに変換 setStr = StrConv(setStr, vbFromUnicode) 'バッファにセット(この情報をセットすると、tagBufは127バイトの領域を持つ) tagBuf = setStr 'GENRE を取得 wkStr = .Text6.Text 'GENRE の情報は末尾のバイト目にそのまま値をセット ReDim Preserve tagBuf(AREA_TAG - 1) As Byte tagBuf(AREA_TAG - 1) = wkStr End With 'バッファにタグ情報をセット Call copyAry(fileBuf(lngFileSize - AREA_TAG), tagBuf(0), AREA_TAG) '新たなタグ情報をもったファイルを作成する lngFile = FreeFile Open testFile2 For Binary As #lngFile 'バッファ取得 Put #lngFile, , fileBuf Close #lngFile End Sub Private Sub Form_Load() With Me '各コントロールの初期化 .Command1.Caption = "取得" .Command2.Caption = "更新" .Label1.Caption = "TRACK NAME" .Label2.Caption = "AIRTIST NAME" .Label3.Caption = "ALUBM NAME" .Label4.Caption = "YEAR" .Label5.Caption = "COMMENT" .Label6.Caption = "GENRE" .Text1.Text = "" .Text2.Text = "" .Text3.Text = "" .Text4.Text = "" .Text5.Text = "" .Text6.Text = "" '一応最長文字数を指定しておきますが、あくまで半角での文字数です。全角文字は無理です。 .Text1.MaxLength = 30 .Text2.MaxLength = 30 .Text3.MaxLength = 30 .Text4.MaxLength = 4 .Text5.MaxLength = 30 .Text6.MaxLength = 3 'ここは0~255です End With End Sub '配列の中身をエリアの分だけコピーする関数 Private Sub copyAry(inDest As Byte, inSrc As Byte, inArea As Long) Call CopyMemory(inDest, ByVal VarPtr(inSrc), ByVal LenB(inSrc) * inArea) End Sub 'バイトで納められたUNICODE文字列を指定位置から、指定の長さを取得する関数 Private Function getStringforUniByte(inByte() As Byte, inStartPos As Long, inLength As Long) As String Dim wkBuf() As Byte 'ワークのバッファ Dim wkStr As String 'ワークの文字列 Dim lngFindNull As Long 'vbNullChar を見つけるときのワーク ReDim wkBuf(inLength - 1) As Byte '指定範囲の文字列を得る Call copyAry(wkBuf(0), inByte(inStartPos - 1), inLength) wkStr = StrConv(wkBuf, vbUnicode) '文字列にvbNullCharが含まれている時、それをはずす lngFindNull = InStr(1, wkStr, vbNullChar) If lngFindNull > 0 Then wkStr = Mid(wkStr, 1, lngFindNull - 1) End If '戻りの文字列セット getStringforUniByte = wkStr End Function '文字数をvbNullCharで調整して返す関数 Private Function fixStr_setNullChar(inStrings As String, inLength As Long) As String Dim wkStr As String 'ワークの文字列 '引数の文字列に、引数の長さの分だけのvbNullCharを追加して一時記憶 wkStr = inStrings & String(30, vbNullChar) 'FromUnicodeに変換 wkStr = StrConv(wkStr, vbFromUnicode) '左からinLength分の文字を取得 wkStr = LeftB(wkStr, inLength) 'Unicodeに変換して返す fixStr_setNullChar = StrConv(wkStr, vbUnicode) End Function
その他の回答 (3)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
何度もすいません。自己レスです。。。 '引数の文字列に、引数の長さの分だけのvbNullCharを追加して一時記憶 wkStr = inStrings & String(30, vbNullChar) っていうのが最後の方にあるんですが、 '引数の文字列に、引数の長さの分だけのvbNullCharを追加して一時記憶 wkStr = inStrings & String(inLength, vbNullChar) に修正してください。 30→inLength です。
お礼
ありがとうございます。 これで今作っているMP3プレイヤーも少し完成に近づきました
- TAGOSAKU7
- ベストアンサー率65% (276/422)
ID3タグっていうのはMPEGとかの情報ですか? もしそうなら、ファイル末尾の128バイトという情報がありました。 もうちょっと調査が必要です。 もう少し調べてみますが、ほかに詳しい人がいたらお願いします。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
ID3ってなんなの? 聞いたことないです。 それがわからない人が多いと思いますよ。 ID3の参考アドレスを教えてもらえたら、何とかわかるかも?
関連するQ&A
- mp3のID3タグをVBで編集する方法
mp3のID3タグを編集するソフトをVBで作りたいのですが、 その方法が分かりません。 教えてくださいm(_ _)m 回答よろしくお願いいたします。
- 締切済み
- Visual Basic
- VB6.0 から RFIDタグを制御する方法
Windows2000 SP3 VisualBasic6.0 SP5 を使用しています。 http://retail.fujitsu.com/jp/rfid/rf-short.html ここの RFIDタグ・リーダライタを使っての タグへの読み書きをVBを利用して行いたい のですが、サンプルプログラムがCしかついていません。 どなたかVBではどう記述すればよいか教えて 頂けませんでしょうか・・・。 Cが分からないのです。。。(涙)
- ベストアンサー
- Visual Basic
- VB2005でGetTcpTable
vb2005でのGetTcpTableの使い方を教えてください。 できればサンプルソースの掲載をお願いします。 ※ネットで検索してvb6や他の言語のサンプルをいろいろ見つけたのですが、vb2005用にサンプルを変換してもうまくいかなかったのでVB2005で動くサンプルをお願いします。
- ベストアンサー
- Visual Basic
- ID3タグが消えたのですが、どうすれば直すことができますか?
ID3タグが消えたのですが、どうすれば直すことができますか? 現在、iTunesとfoobar2000を使っています。 (1)、mp3のIDタグを編集しようと思い、まずiTunesでタイトル、アーティスト、アルバム名を編集しました。 (2)、その後、foobar2000でそれらの曲を聴こうと思ったのですが、いくつかの曲が文字化けを起こしており、曲の内容が分からなくなっていました。 (3)、ネットで検索したところ、ID3タグを変換すれば直るというような事が書かれており、foobar2000の方で文字化けした曲を「ID3v2」というものにしました。すると文字化けは直りました。 (この文字化けした曲は元々、「ID3v1」と「ID3v2」の両方のバージョンになっているものやや「ID3v1」と「APEv2」の両方のタグがついているものがありました。) (4)、その後、Windowsエクスプローラでその文字化けしていた曲を見てみるとID3タグの方が消えていました。プロパティで編集しようとしても、文字が打てないようになっています。 (5)、iTunesでそれらの曲をみてみるとちゃんとタグ情報はちゃんと残っていました。そして編集もできます。 (6)、WindowsMediaPlayerでは曲情報が無く何の曲かが分かりません。 後書いているうちに思い出したのですが、foobar2000で曲の編集をして、もしかしたらその時にID3タグの情報を消してしまったのかも・・・ 原因がよく分からないので詳しい方がいましたらよろしくお願いします。
- 締切済み
- その他(インターネット・Webサービス)
- 「ID3タグ」とは何でしょうか?
購入しようと考えているサンディスクのmp3プレーヤー のレビューで、「ID3タグ」というのが出てきます。 http://www.amazon.co.jp/gp/product/customer-reviews/B000FFL0OU/ref=cm_cr_dp_pt/250-5904485-6486606?ie=UTF8&n=3210981&s=electronics 「ID3タグ」とは何でしょうか? 「フォルダーを全く認識しないので全てID3タグでの管理になります」 これって面倒なことでしょうか? 「通常の再生ではID3タグの昇順に再生されてしまい、アルバム毎にフォルダを分けた上にファイル名を連番にしてもだめでした」 アルバムごとに管理・再生できないということでしょうか? とすれば大欠陥ですが。 よろしくお願いします。
- ベストアンサー
- その他(ソフトウェア)
- VB.NETで<Input>タグ、<textarea>タグに値を代入するには?
VB.NET+Javascriptでプログラミングしているのですが、HTMLに<input>タグ(type=text)、<textarea>タグがありまして、これに値を代入する方法がわかりません。 おしえてくださいーー ※該当タグにJavascriptを使うので、VBのテキストボックスはつかえません><
- ベストアンサー
- Visual Basic
- ID3Tagのやり方
お世話になります。 今カーオーディオとしてMP3プレイヤーを持っていますが タイトル名をテキストでだしたいと思っています そこでID3Tagなるものが必要ということで SuperTagEditorというフリーソフトを入れて やってみました。でもよくわかりませんでした。 (新しくファイルができる?orMP3ファイルに書き込まれる?) お聞きしたいのは ・ID3Tagの原理、使い方 ・プレイヤーが半角英数カナにしか対応していない ので日本語を変換してくれるソフトはないか? ということです。 よろしくお願いいたします
- 締切済み
- その他(インターネット・Webサービス)
- ID3タグについて
iTunesでID3のタグの変換ができますよね。 どのバージョンに変えるのが一番いいのでしょうか?? 現在「なし」という項目で設定しているのですが。 よろしくお願いします。
- ベストアンサー
- その他(ソフトウェア)
- VBサンプルソースの使い方
VBサンプルソースの使い方 http://km2net.com/usb-an/index.shtml Km2NetのUSB-Anを利用するため、 VBサンプルソースをDLしたのですが、 拡張子bas、frm、vbpなどのファイルをアプリケーションとして 利用する方法が分かりません。 VBが必要なのかと思って、 MS Visual Basic 2010 Express をインストールしてみたものの 使い方が分からなくて・・・。 どなたかご教授ください。
- ベストアンサー
- Visual Basic
- 複数のタグをDIVタグで囲みたい
<TD>タグの中に<IFRAME>タグと<INPUT>タグがあり、それを<DIV>タグで囲みたいのです。 <TD> <TD> <IFRAME id="xxx" ... ==> <DIV> <INPUT id="yyy" ... <IFRAME id="xxx" ... </TD> <INPUT id="yyy" ... </DIV> </TD> jQueryのwrapall関数かと思うのですが、サンプル等では同じ種類のタグを囲むものしか ありませんでした。 jQueryは経験がないので、四苦八苦しています。 どなたかお知恵をお貸しください。 よろしくお願いします。
- ベストアンサー
- JavaScript
お礼
こんな立派なサンプルを作っていただき,ありがとうございます。 之でID3をいじる部分は完成しました。 多分完成したら,ベクターに飾るので,よかったら,見にきてください(11月終わりごろだと思います) MP3スタジオという名前です