tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルExcelVBAでWAVEファイルデータを表示
記事No12579
投稿日: 2008/06/19(Thu) 00:05
投稿者KOKU
WAVEファイルデータをエクセルに取り込みグラフ表示や加工をしたいと思いまして、
以下のプログラム(一部)を作成していますが、ファイルサイズの取り出しでエラー
(型が一致しない)が出て前に進めません。どのように変換して数値データとして取
り出せばいいかご教授いただきたいと思いまして投稿いたしました。

' ファイル情報の表示
Private Sub DispFileInfoByHandle()
    Dim fi As BY_HANDLE_FILE_INFORMATION
    Dim hFile As Long
    Dim ft As FILETIME
    Dim st As SYSTEMTIME
    Dim rc, n As Long
    Dim a As String
    'ファイルのオープン
    hFile = CreateFile(myOpenFile, GENERIC_READ + GENERIC_WRITE, 0, 0,
OPEN_EXISTING, 0, 0)
        
    'ファイル情報の取得
    GetFileInformationByHandle hFile, fi
    'ファイルの読込
    Dim bf As String
    bf = String(fi.FileIndexLow, " ")
    Dim rdcnt As Long
    Dim i, b As Long
    rc = ReadFile(hFile, bf, 30, rdcnt, vbNullString)    
    CloseHandle hFile
    'データ表示
    a = LeftB(bf, 8)
    Sheet1.Cells(n, 1) = a
    
    'この行で型が一致しないと出る
    b = CDec(MidB(bf, 9, 8))
    
    
    Sheet1.Cells(n + 1, 1) = b
End Sub

[ツリー表示へ]
タイトルRe: ExcelVBAでWAVEファイルデータを表示
記事No12580
投稿日: 2008/06/19(Thu) 06:48
投稿者花ちゃん
>     'この行で型が一致しないと出る
>     b = CDec(MidB(bf, 9, 8))

MidB(bf, 9, 8) には何が入っていますか?  数字以外が入っていませんか?

それと b は Long 型 ですが、求めているのは CDec (10 進型) になっていますが
期待値はどちらでしょうか?  b = CLng(MidB(bf, 9, 8))  


>     Dim rc, n As Long
>     Dim i, b As Long

上記は、NG です。(今回の事とは関係ないと思いますが)
rc 及び i はバリアント型になります。Dim i As Long, b As Long のように書いて下さい。

[ツリー表示へ]
タイトルRe^2: ExcelVBAでWAVEファイルデータを表示
記事No12585
投稿日: 2008/06/19(Thu) 15:40
投稿者KOKU
ご回答ありがとうございます。

bfには、ウオッチウインドを見てみますと、
bf : "RIFF0 カ WAVEfmt         Dャ   ア   と出てきます。
そして空白のところは、罫線記号のようなものが表示されています。

なお、b = CLng(MidB(bf, 9, 8))  でも型が一致しないと出てきます。

期待値は、WAVEファイルですので、最初の4バイトに「RIFF」、次の4バイトにWAVEファイルのデータサイズが入っているのでサイズの大きさを数字で取り出したいと思います。

たとえば「478230」などです。

よろしくお願いいたします。ありがとうございます。

[ツリー表示へ]
タイトルRe^3: ExcelVBAでWAVEファイルデータを表示
記事No12588
投稿日: 2008/06/19(Thu) 18:31
投稿者花ちゃん
ファイルサイズを取得するなら下記のようにしても取得できます。

Private Sub Command1_Click()
   Dim bin()  As Byte
   Dim binLen As Long
   Dim strData As String
   Dim intFileNo As Integer
   intFileNo = FreeFile
   Open "c:\start.wav" For Binary As #intFileNo
   binLen = LOF(1) - 1
   ReDim bin(binLen)
   Get #intFileNo, , bin
   Close #intFileNo
   strData = Right("00" & Hex(bin(5)), 2) & Right("00" & Hex(bin(4)), 2)
   Debug.Print CLng("&h" & strData) + 8
End Sub

[ツリー表示へ]
タイトルRe^4: ExcelVBAでWAVEファイルデータを表示
記事No12596
投稿日: 2008/06/20(Fri) 21:22
投稿者KOKU
ありがとうございます。

参考にしてみます。40バイト以降の数値データの変換もありますので色々検討して見ます。

また、API関数でうまくデータを読み出せるものがないかも検討して見ます。

[ツリー表示へ]