[[20110203201939]] 『鳥の鳴き声』(B'ner) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『鳥の鳴き声』(B'ner) W7、Excel7

チッチッチとなく鳥の鳴き声をExcelで出したいのです。

APIでPlaySoundとかを使うようですが、チッとチッの間を短くしたいのです(0.1秒)。
周波数、継続時間、立ち上がり・下り時間、符号間隔時間などの指定など出来るでしょうか? どなたか教えていただければ幸いです。


 私にはできませんが、

 http://www.happy2-island.com/excelsmile/smile04/capter00303.shtml

 ここに、PlaySoundについては書いてあります。
 鳥の鳴き声wavファイルがあればできそうですが・・
          
           (shiojii)

shiojii様 コメント有難うございます。

wavファイルを使用するのではなく、例えばVBのConsoleBeep()などのように、音源もすべてをExcelで作りたいのです。


ApiのBeePAPIを調べてみては?

 ichinose


ichinose様

BeepAPIでの動作は出来るのですが、例えば
Call BeepAPI(2500, 450)
Call BeepAPI(40, 50)
のとき、このcall間での動作を0.05秒とかにしたいのです。VBAの動作としてそんなに早くは無理なのかもしれませんが、ご存知でしょうか?


 >call間での動作を0.05秒とかにしたいのです
 0.05秒の間をおきたいという事ですか?
 ApiにSleepがあります。

 新規ブックの標準モジュール

 Option Explicit
 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
    (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
 Sub Beep_sample()
   Dim i As Long
   Const dwFreq As Long = 1000
   Const dwDuration As Long = 500
   Call BeepAPI(2500, 450)
   Sleep 50 '0.05秒の間
   BeepAPI 40, 50
 End Sub

 因みに
 Sub チューリップ()
    Dim 音, 長さ
    Dim g0 As Long
    音 = Array(400, 449, 504, "s", 400, 449, 504, "s", 599.3, 504, 449, 400, 449, 504, 449)
    長さ = Array(500, 500, 500, 300, 500, 500, 500, 300, 500, 500, 500, 500, 500, 500, 700)
    For g0 = LBound(音) To UBound(音)
        If 音(g0) = "s" Then
           Sleep 長さ(g0)
        Else
           BeepAPI 音(g0), 長さ(g0)
        End If
    Next
 End Sub

 いいリズムだ なんちゃって!!

 ichinose


ichinose様

こうすれば音楽も出来るんだと感心しました。ただ一つだけ意図したところがうまく伝わっておりませんでした。簡単に言うと、鳥の鳴き声を1秒間に10回「チチチチ・・・」と鳴かしたいのです。上のサンプルをいろいろいじったのですが、どうも上手く短く鳴いてくれません。 私の力では無理に思えてきました。


 >どうも上手く短く鳴いてくれません。
 希望よりも長く鳴いてしまうのですね。
 現在のコードを提示してみてはどうでしょうか。
 (wan)

 Option Explicit
 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
    (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
 Sub Beep_sample()
   Dim i As Long
   For i = 1 To 10
      Call BeepAPI(2500, 5)
      Sleep 30
      BeepAPI 40, 5
      Sleep 20
   Next
 End Sub

 これでは?

 ichinose

ichinoseさん

百舌鳥ではなく啄木鳥になりましたが、目標とするものが出来ました。

多分私の説明が不十分だったようです。 大変お手数おかけしました。

有難うございました。

 Option Explicit
 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
    (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

 Sub Beep_sample()
   Dim i As Long

   For i = 1 To 5
      Call BeepAPI(800, 50)
   Next
 End Sub


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.