ビープ音を連続して鳴らす

このQ&Aのポイント
  • 何か時間のかかる処理が終わったとき、ユーザーに処理が終わったことをビープ音で知らせたいと思います。
  • 1回だと気付きにくいので3回「ピッピッピッ」と鳴らしたいのですが、Beep を3回記述しても鳴りません。
  • 苦し紛れに下記の関数を作って間に合わせているのですが、間隔を1秒とっているのでちょっと間延びした感じです。もっとリズミカルに鳴らしたいのですが、いい方法があったらどなたか教えてください。
回答を見る
  • ベストアンサー

ビープ音を連続して鳴らす

何か時間のかかる処理が終わったとき、ユーザーに処理が終わったことをビープ音で知らせたいと思います。1回だと気付きにくいので3回「ピッピッピッ」と鳴らしたいのですが、Beep を3回記述しても鳴りません。苦し紛れに下記の関数を作って間に合わせているのですが、間隔を1秒とっているのでちょっと間延びした感じです。もっとリズミカルに鳴らしたいのですが、いい方法があったらどなたか教えてください。 -------------------------------------------------------------------- Public Function beep3()   Dim i As Integer   Dim dend As Double   For i = 1 To 3     dend = Timer + 1     Beep     Do       If Timer > dend Then         Exit Do       End If       DoEvents     Loop   Next i End Function

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

再びmaruru01です。 間にSleepを入れないと出来ない(条件によっては3回に聞こえることもあるけど)ですよ。 っていうか、BeepとSleepで私の環境では出来ましたけど。(VB6.0SP5、Windows2000SP2) あっそうだ、Beepの引数はWindows95、98では無視されます。 では。

lily02
質問者

お礼

ありがとうございました。 自宅のパソコンは98なので、うまく動きませんでした。 仕事先では2000で、2000上で動かすアプリで使用したかったので大助かりです。

その他の回答 (3)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 WindowsAPIにも、「Beep」という関数があります。 APIのBeepは周波数(Hz)と秒数(ms)の2つの引数を持ってるので、音色(周波数)と鳴らす間隔(秒数)を調節出来ます。 各Beep間のインターバルはNo.2の方の通り、APIのSleepを使って調節出来ます。 どちらの関数も、MSDNライブラリーで詳細を参照して下さい。 関数の宣言はAPIビューアで取得して下さい。 では。

lily02
質問者

補足

ありがとうございます。 が、うまくいきません。 timer関数と同じで1回しか鳴りません。 周波数と間隔をいろいろと変えてやってみたのですが、3回Beepを記述しても1回しか鳴りません。

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.2

こんにちは、honiyonです。   確か Sleepという関数があったと思います。   Sleep(1000) で 1秒待ちという意味になります。   Beep Sleep(1000) Beep Sleep(1000) Beep   でいかがですか?   参考になれば幸いです(..

lily02
質問者

補足

ありがとうございます。 が、うまくいきません。 timer関数と同じで1回しか鳴りません。

  • todyssey
  • ベストアンサー率32% (25/77)
回答No.1

あまりお役に立てないかも知れませんが timer は 小数点以下も利用できるはずです。 timer + 1 を timer + 0.3ぐらいにしてみては いかがでしょうか

lily02
質問者

補足

はい、1秒以下でも試しましたが、そうするとうまく3回鳴りません。 0.9以下でだめでした。ハードの周波数の問題とか聞きましたが、それをどうクリアしたらいいのか分かりません。

関連するQ&A

  • ビープ音鳴らし続けたい。

    Beepと記述すると一回だけビープ音が鳴りますが、 ある処理をしている最中、ビープ音を鳴らすことは出来ますでしょうか?

  • シリアル通信:オフライン時にうまく終了してくれません

    シリアルプリンタの制御をVB6で行っております。 以下のようなコードですが、うまく終了してくれません。 'グローバル 'プリンタの状態 Dim BUF as String '起動時 Private Sub Form_Load() MSComm1.PortOpen = True Text1.Text = "" Timer1.Enabled = True End Sub '終了 Private Sub Form_Unload(Cancel As Integer) Timer1.Enabled = False MSComm1.PortOpen = False End Sub 'タイマー Private Sub Timer1_Timer() Timer1.Enabled = False Call CheckPrint Timer1.Enabled = True End Sub Private Sub MSComm1_OnComm() Dim TimeOut As Long Dim sTime As Long Dim eTime As Long Select Case MSComm1.CommEvent '受信 Case comEvReceive TimeOut = 100 sTime = timeGetTime Do If (TimeOut - eTime) < 0 Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until MSComm1.InBufferCount >= 82 BUF = MSComm1.Input End Select End Sub プリンタの状態チェック Private Sub CheckPrint() Dim sTime As Long Dim eTime As Long Dim TimeOut As Long Dim i As Integer Dim n As Integer BUF = "" 'プリンタの情報取得コマンド MSComm1.Output = "~HS" 'タイマ開始 TimeOut = 400 sTime = timeGetTime eTime = 0 Do DoEvents If BUF <> "" Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until TimeOut - eTime < 0 If BUF <> "" Then ... .. 宜しくお願いします。

  • vb2005でプログラムをとめるコードは?

    お世話になります。 vb2005でプログラムに5秒間、時間をとめようとおもいます。 これだとTimerにエラーがでてしまいます。 ('Timer' は型です。有効な式ではありません。) どこをどうなおせばエラーがでなくなるのでしょうか? 教えてください。お願いします。 Dim sngSt As Single sngSt = Timer Do While Timer - sngSt < 5 DoEvents() Loop

  • VB 2008: Do Whie...Loop文について

    Function FileGetChar(ByVal f As String, ByVal p As Integer) As String   Dim i As Integer = 1   Dim j As Integer = 0   Dim l As Integer   Dim n As Integer = FreeFile()   Dim c As Char   If File.Exists(f) Then     FileOpen(n, f, OpenMode.Random, OpenAccess.Read, , 1)     l = FileLen(f)     Do While (i + j <= l)       FileGet(n, c, i + j)       j = j - (Math.Abs(Asc(c)) > 255)       i = i + 1       If i > p Then         Exit Do       Else         c = ""       End If     Loop     FileClose(n)   End If   Return c End Function [イミディエイトウインドウ] ? FileGetChar("D:\Temp\Test.txt",1) "1" ? FileGetChar("D:\Temp\Test.txt",2) "2" と、一応は動作しています。 l------->ファイル長 i+j----->読み込みのカレントポジション p------->読み込み指示ポジション 今、悩んでいるのはDo...Loop文中のIf Else End If の追放。 何か妙手があれば教えて頂きたい。

  • エクセルVBAの繰り返し処理の質問

    C列にある項目とG列にある項目を比較して、 一致し、H列にある数字が10以上ならば、B列にフラグ1を立てる という処理を行いたいんですが、 下記ぐらいまでしか作れず、うまくいきません・・・ Sub フラグを立てる処理() Dim i As Integer Dim j As Integer Dim k As Integer i = 1 j = 1 Do j = j + 1 Do i = i + 1 If Cells(j, 8) > 9 Then Cells(i - 1, 4) = 1 End If Loop Until Cells(i, 3) <> Cells(j, 7) Or Cells(i, 3) = "" Loop Until Cells(j, 7) = "" End Sub わかる方がいらっしゃいましたら、お願いします。

  • VBAでスロットを作る

     VBAでゲームを作ろうとしています。まず、手始めに簡単なスロットを作っています。スロットを回転させて止めるまではできたのですがメッセージを出す段階でメッセージが2回、0とiの値が出ます。次のコードなのですが、なぜできないのか、どうすればできるようになるのか教えてください。よろしくお願いします。 Sub SlotLoop_1() Dim i As Long Static Flg As Boolean Flg = Not Flg 'ボタンを使えるようにする With [a1] 'A1を選ぶ Do If Flg = False Then Exit Do i = (i + 1) Mod 10 '(i+1)を10で割った余り。 .Value = i DoEvents Loop End With MsgBox i 'ここが問題 End Sub

  • エクセルvba 値渡しのsubプロシージャ

    お世話になります。 エクセルVBAにて、loop処理中にCALLかけている subが最初の一度だけしか呼べません。 なにか、特別にしなければならないことがあるのでしょうか。 こんな感じです。 dim i as integer sub main()   i = 1   max = 5   do     if day1 = day2 then 処理1 データ1, データ2     end if     i = i + 1 loop until i = max    end sub sub 処理1(Byval 引数1 as variant, 引数2 as variant)    msgbox("引数1" & 引数1)    msgbox("引数2" & 引数2) end sub データ1 及び データ2、 DAY1 DAY2は、必要に応じて 転送処理等やっています。

  • 再帰処理を用いて階乗を求めるプログラム

    こんにちは 再帰処理を用いて階乗を求めるプログラムについて の質問です。 以下のように考えたのですが、 まったく駄目なようです。 どこをどのように直したらいいのか いまいちわかりません。 どなたか教えて下さい。お願いします。 Private Sub CommandButton1_Click() Dim n As Integer 階乗する数 Dim f As Integer 階乗する数の階乗した値 n = Val(TextBox1)   Do While f > 1 KEISAN n, f Loop TextBox2 = f End Function Function KEISAN(n, f) If n <= 1 Then f = 1 Else f = n * f(n - 1) End If End Function

  • 素数を求めるマクロを

    走らすと暴走したようになり、素数=151で止まります。 どこが悪いのでしょうか。正常に終わるようにしたいです。 ====================== Sub 素数を求める()   Dim i As Long   Dim j As Long   Dim m As Long   Dim p As Long   Dim flg As Boolean   i = 1   j = 1   p = 2   Do     flg = False     For m = 2 To Int(Sqr(p))       If p Mod m = 0 Then         flg = True         Exit For       End If     Next     If flg = False Then       Cells(i, j) = p       i = i + 1       If i > Rows.Count Then         i = 1         j = j + 1       End If     End If     p = p + 1   Loop End Sub ======================

  • Beep音を出すには?

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 'Beep音を出す Dim I As Integer For I = 1 To 100 ' Loop 100 times. Beep() ' Sound a tone. Next I End Sub 上記のコードでBeep音を出したいのですが、鳴りません。 (Beepコードは、VBのサンプルコードです。) OS:WinXP SP3 VB.NET Ver2003です。 フォームにコマンドボタンを一つ貼り付け、 コマンドボタンのクリックイベントで Beep音を鳴らしたいです。 PCのデバイスマネージャ設定は、 Beep音が有効になっています。 他の音(Win立上音他)は、デフォルトのままです。 詳しい方、教えて下さい。