C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: コンボボックスについて


(過去ログ 77 を表示中)

[トピック内 21 記事 (1 - 20 表示)]  << 0 | 1 >>

■45419 / inTopicNo.1)  コンボボックスについて
  
□投稿者/ イチ (3回)-(2010/01/12(Tue) 18:30:51)

分類:[C#] 

2010/01/13(Wed) 12:57:15 編集(投稿者)

メトロノームを作りたいと思っています。

コンボボックスをつかって、テンポを選びたいのですが、コンボボックスの使い方がわかりません。

作りたいとしているものは、
コンボボックス内に40,41,42,43・・・と選択があって、
“42”を選択して、再生ボタンを押したらと、42/60のテンポで音がなる。 というものです。

つまり、
40を選択した時、 → 実行結果A  
41を選択した時  → 実行結果B
のように実装されるプログラムを書きたいです。

初歩的な質問ですみません・・・。



補足ですが、
別に卒研の目的がメトロノームを作るということではありません。
多少ズレがあってもいいし、本来作りたいものに、あくまでも目安として簡単なメトロノーム機能が備わればいいなと思っています。

引用返信 編集キー/
■45420 / inTopicNo.2)  Re[1]: コンボボックスについて
□投稿者/ .SHO (1111回)-(2010/01/12(Tue) 18:51:51)
No45419 (イチ さん) に返信

とりあえず、いろんなサンプルを見合わせて、なんとか作ってみてから
質問されてはどうでしょう?

「C# コンボボックス」で検索。
引用返信 編集キー/
■45426 / inTopicNo.3)  Re[2]: コンボボックスについて
□投稿者/ επιστημη (2375回)-(2010/01/12(Tue) 19:48:41)
επιστημη さんの Web サイト
> なんとか作ってみてから質問されてはどうでしょう?

ヒント:
ListBoxの選択項目が変化するとイベント:SelectedIndexChanged
が飛んでくるので、イベントハンドラでそいつをつかまえます。
んでもって SelectedItem.ToString() すれば "40" とか "41" とかが手に入ります。


引用返信 編集キー/
■45428 / inTopicNo.4)  Re[3]: コンボボックスについて
□投稿者/ Hongliang (544回)-(2010/01/12(Tue) 20:44:36)
普通に 1 刻みなら NumericUpDown の方が自然じゃないかなぁ……。
引用返信 編集キー/
■45438 / inTopicNo.5)  Re[4]: コンボボックスについて
□投稿者/ みきぬ (701回)-(2010/01/13(Wed) 09:26:35)
HScrollBar(or VScrollBar)という手もある。
引用返信 編集キー/
■45439 / inTopicNo.6)  Re[5]: コンボボックスについて
□投稿者/ たくボン (309回)-(2010/01/13(Wed) 09:40:16)
No45438 (みきぬ さん) に返信
> HScrollBar(or VScrollBar)という手もある。

そもそも39/60とか41/60とかのFSPを実現するならTimerじゃ役不足じゃないの?
timeGetTimeとかGetTickCountで実装するならtimeBeginPeriod、timeEndPeriodも考慮するべきだし、NumericUpDownやVScrollBarはどうかと思う。

どこの大学か知らないけど、Timerで作るメトロノームなんか小学生じゃあるまいし、そんなんで大学の卒研ってOKなの?
引用返信 編集キー/
■45440 / inTopicNo.7)  Re[6]: コンボボックスについて
□投稿者/ επιστημη (2377回)-(2010/01/13(Wed) 09:49:42)
επιστημη さんの Web サイト
> そもそも39/60とか41/60とかのFSPを実現するならTimerじゃ役不足じゃないの?

# "役不足"の使い方間違ってます。

メトロノームでの39/60とは60秒の間に39回です。
Frames-Per-Secondぢゃありません。
とはいえ正確なリズムを刻むのにTimerでいいの? って不安はありますけども。

引用返信 編集キー/
■45441 / inTopicNo.8)  Re[7]: コンボボックスについて
□投稿者/ たくボン (310回)-(2010/01/13(Wed) 09:59:36)
No45440 (επιστημη さん) に返信
>>そもそも39/60とか41/60とかのFSPを実現するならTimerじゃ役不足じゃないの?
>
> # "役不足"の使い方間違ってます。

確かに役不足と言うのは言いすぎかもしれないけど、正確なタイミングを測るにはTimerじゃ厳しい場合があるって意味で役不足。
テンポがずれてもいいってなら問題ないと思うけど、俺ならそんなメトロノームなんかいらない。

> メトロノームでの39/60とは60秒の間に39回です。
> Frames-Per-Secondぢゃありません。

確かにFPSとは厳密に言えば違うけど、フレーム数を算出して、分割されたフレームに併せて処理をするのがいいと思うんだけど?
ここらは、どれくらいの精度を出すかで仕様が変わると思うけど、少なくとも39/60なんかの場合はそれより小さいフレーム分割で計測するのがいんじゃないかな?

動画や音楽再生のプログラムしてたからFPSと言ってしまったけど、考え方は同じと思うんだけど。
引用返信 編集キー/
■45442 / inTopicNo.9)  Re[8]: コンボボックスについて
□投稿者/ 774RR (453回)-(2010/01/13(Wed) 10:06:37)
蛇足 : [役不足] と [能力不足] は意味が正反対
引用返信 編集キー/
■45443 / inTopicNo.10)  Re[6]: コンボボックスについて
□投稿者/ みきぬ (702回)-(2010/01/13(Wed) 10:09:40)
いやさ、私としてはタイマーの正確性の話はどうでもよくて、単に数値を選ぶ手段としてそっちのほうがいいんじゃね? と思っただけなんですがね。
引用返信 編集キー/
■45445 / inTopicNo.11)  Re[9]: コンボボックスについて
□投稿者/ επιστημη (2378回)-(2010/01/13(Wed) 10:14:22)
επιστημη さんの Web サイト
> 蛇足 : [役不足] と [能力不足] は意味が正反対

そゆこと。役不足:役者の力量に対し「役が不足」していること。端役。

> ここらは、どれくらいの精度を出すかで仕様が変わると思うけど、
> 少なくとも39/60なんかの場合はそれより小さいフレーム分割で計測するのがいんじゃないかな?

それには同意。フツーのメトロノームで180/分かそこらでしょう。
それだと毎秒3回、フレームを切らない場合Timer.Intervalは333[ms]。
この程度なら多少の誤差に目をつぶればそこそこ使い物になりそうな程度。


引用返信 編集キー/
■45446 / inTopicNo.12)  Re[7]: コンボボックスについて
□投稿者/ たくボン (311回)-(2010/01/13(Wed) 10:23:57)
No45443 (みきぬ さん) に返信
> いやさ、私としてはタイマーの正確性の話はどうでもよくて、単に数値を選ぶ手段としてそっちのほうがいいんじゃね? と思っただけなんですがね。

1秒=1000ms。これを60で分割する時点で16.66666・・・の循環小数。
正確な精度を実現するなら、OSの分解能を変更する必要がある。
分解能の変更はtimeBeginPeriod、timeEndPeriod。これを使ってもすぐに反映されないので、若干のタイムラグが発生する。
NumericUpDownやVScrollでホイールぐりぐりされた日にゃ、辛いものがある。

まぁ、分解能を1でアプリケーションの頭とケツで制御すれば問題ないんだろうけど。
引用返信 編集キー/
■45447 / inTopicNo.13)  Re[10]: コンボボックスについて
□投稿者/ たくボン (312回)-(2010/01/13(Wed) 10:25:07)
No45445 (επιστημη さん) に返信
>>蛇足 : [役不足] と [能力不足] は意味が正反対
>
> そゆこと。役不足:役者の力量に対し「役が不足」していること。端役。

ごめんなさい。間違えてましたm(..)m
引用返信 編集キー/
■45448 / inTopicNo.14)  Re[8]: コンボボックスについて
□投稿者/ επιστημη (2379回)-(2010/01/13(Wed) 11:10:19)
επιστημη さんの Web サイト
> 1秒=1000ms。これを60で分割する時点で16.66666・・・の循環小数。

フツーのメトロノームだと1分(=60秒)を最大200程度に分割です。
60/200[s] = 333.3333...[ms] なので1000秒に1秒のズレが生じます。
また、1分間に200拍が保てたとしても、拍間の時間の揺れ(拍ユレ)が気になるところ。

引用返信 編集キー/
■45449 / inTopicNo.15)  Re[8]: コンボボックスについて
□投稿者/ GOD (24回)-(2010/01/13(Wed) 11:42:50)
No45446 (たくボン さん) に返信
> ■No45443 (みきぬ さん) に返信
>>いやさ、私としてはタイマーの正確性の話はどうでもよくて、単に数値を選ぶ手段としてそっちのほうがいいんじゃね? と思っただけなんですがね。
>
> 分解能の変更はtimeBeginPeriod、timeEndPeriod。これを使ってもすぐに反映されないので、若干のタイムラグが発生する。
> NumericUpDownやVScrollでホイールぐりぐりされた日にゃ、辛いものがある。
>
そういう使用法ならコンボボックスでも同じことだと思うけど。
引用返信 編集キー/
■45453 / inTopicNo.16)  Re[9]: コンボボックスについて
□投稿者/ επιστημη (2380回)-(2010/01/13(Wed) 13:15:05)
επιστημη さんの Web サイト
メトロノーム、お昼休みにできちゃったですよwww

using System;
using System.Windows.Forms;

namespace Metronome {
  public partial class Form1 : Form {
    public Form1() { InitializeComponent(); }
    // comboBox1 : rythm選択 (2,3,...10)
    // numericUpDown : tempo設定 (1,2,...,200)
    // timer1 : 定周期タイマ
    private int rythm;
    private int tempo;
    private int count;       // label4に↓コレを書く(リズムに合わせて)
    private string[] marks = { "●○○○○○○○○○○",
                               "○●○○○○○○○○○",
                               "○○●○○○○○○○○",
                               "○○○●○○○○○○○",
                               "○○○○●○○○○○○",
                               "○○○○○●○○○○○",
                               "○○○○○○●○○○○",
                               "○○○○○○○●○○○",
                               "○○○○○○○○●○○",
                               "○○○○○○○○○●○",
                               "○○○○○○○○○○●",
                             };

    private void Form1_Load(object sender, EventArgs e) {
      comboBox1.SelectedIndex = 0;
      rythm = 2;
      numericUpDown1.Value = 60;
      tempo = 60;
      timer1.Interval = 60000 / tempo;
      count = 0;
    }

    private void numericUpDown1_ValueChanged(object sender, EventArgs e) {
      tempo = (int)numericUpDown1.Value;
      timer1.Interval = 60000 / tempo;
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
      rythm = comboBox1.SelectedIndex + 2;
    }

    private void timer1_Tick(object sender, EventArgs e) {
      count = (count + 1) % rythm;
      label4.Text = marks[count].Substring(0, rythm);
    }
  }
}

引用返信 編集キー/
■45454 / inTopicNo.17)  Re[9]: コンボボックスについて
□投稿者/ たくボン (313回)-(2010/01/13(Wed) 13:30:19)
No45448 (επιστημη さん) に返信
>>1秒=1000ms。これを60で分割する時点で16.66666・・・の循環小数。
>
> フツーのメトロノームだと1分(=60秒)を最大200程度に分割です。
> 60/200[s] = 333.3333...[ms] なので1000秒に1秒のズレが生じます。
> また、1分間に200拍が保てたとしても、拍間の時間の揺れ(拍ユレ)が気になるところ。

これについては、どこかで補正をかけるしかないと思うけど、一番いいのは3回で999.999となった時点で1000と補正かけてしまうのがズレも少なくて良いと思う。今、試しに.NETを使って分解能1のループを作ってみたけど、処理的にはCPUの占有率もほぼ0に近いからもう少し分解能を上げてもいいような気もするけど。

一般的なメトロノームは40から208くらいらしいけど、PC使ったものには6000まで対応できるものもあったし、精度によってそこらへんは調整すればいいと思う。

http://bestmetronome.com/


No45449 (GOD さん) に返信
> そういう使用法ならコンボボックスでも同じことだと思うけど。

ホイールの面だけ考えれば同じですね。まぁ、メトロノーム再生中にテンポの変更はしない作りにすればいいだけか。
引用返信 編集キー/
■45455 / inTopicNo.18)  Re[1]: コンボボックスについて
□投稿者/ みきぬ (704回)-(2010/01/13(Wed) 13:51:19)
No45419 (イチ さん) に返信
> 2010/01/13(Wed) 12:57:15 編集(投稿者)
>
> 補足ですが、
> 別に卒研の目的がメトロノームを作るということではありません。
> 多少ズレがあってもいいし、本来作りたいものに、あくまでも目安として簡単なメトロノーム機能が備わればいいなと思っています。
>
了解っす。
まあこんな流れになったのもご愛敬ということで。
引用返信 編集キー/
■45618 / inTopicNo.19)  Re[2]: コンボボックスについて
□投稿者/ イチ (5回)-(2010/01/15(Fri) 22:40:16)
解決することが出来ました。
επιστημηさんのヒントがとても参考になりました。どうもありがとうございました。

ですが、やはり、テンポにはずれが出てきてしまいますね…。
60で割り切れる数値ならいけそうなのですが…。

また質問させて頂くことになるかもしれませんが、どうぞよろしくお願いします<(_ _)>


解決済み
引用返信 編集キー/
■45619 / inTopicNo.20)  Re[3]: コンボボックスについて
 
□投稿者/ 774RR (456回)-(2010/01/15(Fri) 23:00:17)
割り切れないときには DDA という手法でずれを分散させることができるよ。
とりあえずチェックはつけとこう
解決済み
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -