Discuss Scratch

pen_daisuki
Scratcher
16 posts

音程や、周波数、振動数などに話し合うとこ

音程や、周波数、振動数などの作り方があったら必ず、教えてください。
daihuku-otya
Scratcher
100+ posts

音程や、周波数、振動数などに話し合うとこ

スクラッチに関係ありますか?
pen_daisuki
Scratcher
16 posts

音程や、周波数、振動数などに話し合うとこ

daihuku-otya wrote:

スクラッチに関係ありますか?
カラオケを作ってみたいんです。
pen_daisuki
Scratcher
16 posts

音程や、周波数、振動数などに話し合うとこ

daihuku-otya wrote:

スクラッチに関係ありますか?
教えて下さい!
daihuku-otya
Scratcher
100+ posts

音程や、周波数、振動数などに話し合うとこ

それはあなたの個人的な希望であって、話し合うところとして成立しないのではないでしょうか?
inoking
Scratcher
1000+ posts

音程や、周波数、振動数などに話し合うとこ

#2:
Scratch で再現しようということなので関係ないことはありません。
注意が目的になっていませんか。こちらを読んでみてください。
ただ、トピックを作るに値するかというと微妙です。
いくつかの質問で完結する話であれば 質問コーナー5 を使ってもらったほうがよかったかもしれません。
とりあえず、この話題は回答があるまでこのトピックで続けたほうがよいでしょう。

pen_daisuki さん:
次回からは、トピックを作る前に ちょっと待って! New topicを押す前にここに書こう に書いてもらうと
色々アドバイスがもらえるでしょう。
abee
Scratcher
1000+ posts

音程や、周波数、振動数などに話し合うとこ

#1
「周波数」で検索すると関係するプロジェクトが見つかります。
KimiruHamiru
New Scratcher
500+ posts

音程や、周波数、振動数などに話し合うとこ

pen_daisuki wrote:

音程や、周波数、振動数などの作り方があったら必ず、教えてください。

pen_daisuki wrote:

カラオケを作ってみたいんです。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/631082142/
を見た感じ、
「カラオケ採点システムを作りたい」という話かと思ったので、そこに話題を絞って話を続けます。

Scratchの標準機能で、プロジェクトの実行中に、「マイクから入って来たの音」の情報を得ることができるブロックは、
わたしの知る限りでは「音量(「音」カテゴリの紫のじゃなく、「調べる」カテゴリの水色のブロック)」だけです。

「カラオケ採点システム」を作ろうとするなら、このブロックをどう使うか、という話になると思います。
とりあえず、
[音量データ v]の全てを削除する
[200000]回繰り返す
(音量)を[音量データ v]に追加する //くどいようですが、実際には音カテゴリの紫のじゃなく調べるカテゴリの水色のです。
end
等と書くと、「マイクから入って来た音の、大きさの変化」を記録することができます。
実行時間を「~秒待つ」ブロックで調整するなどすると、理論上は
「リズム」に関しては評価システムが作れる
=「声が出ている、出ていない」のタイミングについては得られる
と思います。

音楽での人の声の「音程」を取得するという話になるとミリ秒単位未満の精度が必要になってくるはずなので、かなり難しいことになると思いますが、まずはリズムの評価から実際に試してみて、うまく行ってから追及することを考えるのが良いと思います。

Last edited by KimiruHamiru (Jan. 21, 2022 04:34:12)

KimiruHamiru
New Scratcher
500+ posts

音程や、周波数、振動数などに話し合うとこ

遡って、

単純に「カラオケを作る=音楽を鳴らす」という話であるなら、「録音したものを再生する」のがよいです。
終わるまで[なんかの曲 v]の音を鳴らす // Scratchの「音をアップロードする」機能で、「.wav、.mp3形式のファイル」なら利用できる。

Scratch標準機能で周波数を直接指定するようなことはできませんが、素性の知れている音声データの周波数を変える、といったことは、音カテゴリの「ピッチの効果」ブロックが使えます。
[ピッチ v]の効果を[0]にする // 0が「そのままの音」
終わるまで[A Elec Piano v]の音を鳴らす // "A Elec Piano"はScratch標準の素材。多分440Hzぐらいのはず。
[ピッチ v]の効果を[20]にする // 20は「元の音の全音上」。
終わるまで[A Elec Piano v]の音を鳴らす //A Elec Pianoはラの音なのでシの音になる。
Scratchの検索で「周波数」とかで探してみると、そのものずばりな「指定周波数の音を鳴らす」プロジェクトも見つかるはずです。
「ピアノのどの音が周波数何Hz」とかいった情報も、Googleで「シの音 周波数」とか検索するとみつかるようです。
pen_daisuki
Scratcher
16 posts

音程や、周波数、振動数などに話し合うとこ

KimiruHamiru wrote:

pen_daisuki wrote:

音程や、周波数、振動数などの作り方があったら必ず、教えてください。

pen_daisuki wrote:

カラオケを作ってみたいんです。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/631082142/
を見た感じ、
「カラオケ採点システムを作りたい」という話かと思ったので、そこに話題を絞って話を続けます。

Scratchの標準機能で、プロジェクトの実行中に、「マイクから入って来たの音」の情報を得ることができるブロックは、
わたしの知る限りでは「音量(「音」カテゴリの紫のじゃなく、「調べる」カテゴリの水色のブロック)」だけです。

「カラオケ採点システム」を作ろうとするなら、このブロックをどう使うか、という話になると思います。
とりあえず、
[音量データ v]の全てを削除する
[200000]回繰り返す
(音量)を[音量データ v]に追加する //くどいようですが、実際には音カテゴリの紫のじゃなく調べるカテゴリの水色のです。
end
等と書くと、「マイクから入って来た音の、大きさの変化」を記録することができます。
実行時間を「~秒待つ」ブロックで調整するなどすると、理論上は
「リズム」に関しては評価システムが作れる
=「声が出ている、出ていない」のタイミングについては得られる
と思います。

音楽での人の声の「音程」を取得するという話になるとミリ秒単位未満の精度が必要になってくるはずなので、かなり難しいことになると思いますが、まずはリズムの評価から実際に試してみて、うまく行ってから追及することを考えるのが良いと思います。
音程に反応するプログラムが知りたいです。お願いします!
hirayuu1414
Scratcher
500+ posts

音程や、周波数、振動数などに話し合うとこ

少し酷な答えになると思いますが、Scratchの標準機能では無理です。
inoking
Scratcher
1000+ posts

音程や、周波数、振動数などに話し合うとこ

hirayuu1414 wrote:

少し酷な答えになると思いますが、Scratchの標準機能では無理です。
断言する理由を教えてください。
KimiruHamiru
New Scratcher
500+ posts

音程や、周波数、振動数などに話し合うとこ

pen_daisuki wrote:

音楽での人の声の「音程」を シュトクスルト取得するという話になるとミリ秒単位未満の精度が必要になってくるはずなので、かなり難しいことになると思いますが、まずはリズムの評価から実際に試してみて、うまく行ってから追及することを考えるのが良いと思います。

pen_daisuki wrote:

音程に反応するプログラムが知りたいです。お願いします!

hirayuu1414 wrote:

少し酷な答えになると思いますが、Scratchの標準機能では無理です。

即答するなら私の答えも
「多分無理」
「Scratchを教えることができる、理系大卒ではないオトナを、100人連れてきたら、100人が「無理」と答えるはず」。

なのですが、本当に無理なのか確信が持てていません。

トピックが封鎖される可能性が高いので容赦ない感じで手短に書くと

「ミリ秒単位未満の精度」の部分がポイントです。
そっち方面はシロウトといえばシロウトなんですが、音は波なので、「音量ブロックの性質+音量変化の解像度がとても高い(88200Hzとかより)」みたいな条件が満たされると、「いわゆるzero-crossingする部分」で音量が変化して、値は+のまま、音量変化として何かが拾える可能性があるかなと思っています。どの程度の精度が得られればいいか、具体的な数字はちょっと、実験とか、音量ブロックの仕様とか、人の声の周波数帯とか、倍音の傾向とか、いろいろ調べる必要があって、時間がかかると思います。

ただ、その可能性が開けるにしても「振動数」の一種である「リズム(LFO=low frequency oscillator)」が拾えるプログラムが書けることが前提です。

理科の(専門の)先生とか音楽(専門の)の先生とかだと、別な答えが得られるかも知れません。

Last edited by KimiruHamiru (Jan. 21, 2022 10:07:45)

abee
Scratcher
1000+ posts

音程や、周波数、振動数などに話し合うとこ

#10
Scratch 1.4であれば、高速フーリエ変換(FFT)による音の周波数解析ができるので可能です。
pen_daisuki
Scratcher
16 posts

音程や、周波数、振動数などに話し合うとこ

abee wrote:

#10
Scratch 1.4であれば、高速フーリエ変換(FFT)による音の周波数解析ができるので可能です。
それって、どうやってその画面にしているんですか?
abee
Scratcher
1000+ posts

音程や、周波数、振動数などに話し合うとこ

Shift-Click-Rです。その先のツールの使い方は、それだけで本が書けたりするので、このトピックで書くのはちょっと大変かもしれません。あくまでも、できるかと言われれば、できるという話です。

Last edited by abee (Jan. 21, 2022 10:35:50)

KimiruHamiru
New Scratcher
500+ posts

音程や、周波数、振動数などに話し合うとこ

(ごめんなさい。引用ミスして「pen_daisuki wrote:」としてました。最初のとこは「Kimiruhamiru wrote:」です。
pen_daisuki
Scratcher
16 posts

音程や、周波数、振動数などに話し合うとこ

KimiruHamiru wrote:

pen_daisuki wrote:

音楽での人の声の「音程」を シュトクスルト取得するという話になるとミリ秒単位未満の精度が必要になってくるはずなので、かなり難しいことになると思いますが、まずはリズムの評価から実際に試してみて、うまく行ってから追及することを考えるのが良いと思います。

pen_daisuki wrote:

音程に反応するプログラムが知りたいです。お願いします!

hirayuu1414 wrote:

少し酷な答えになると思いますが、Scratchの標準機能では無理です。

即答するなら私の答えも
「多分無理」
「Scratchを教えることができる、理系大卒ではないオトナを、100人連れてきたら、100人が「無理」と答えるはず」。

なのですが、本当に無理なのか確信が持てていません。

トピックが封鎖される可能性が高いので容赦ない感じで手短に書くと

「ミリ秒単位未満の精度」の部分がポイントです。
そっち方面はシロウトといえばシロウトなんですが、音は波なので、「音量ブロックの性質+音量変化の解像度がとても高い(88200Hzとかより)」みたいな条件が満たされると、「いわゆるzero-crossingする部分」で音量が変化して、値は+のまま、音量変化として何かが拾える可能性があるかなと思っています。どの程度の精度が得られればいいか、具体的な数字はちょっと、実験とか、音量ブロックの仕様とか、人の声の周波数帯とか、倍音の傾向とか、いろいろ調べる必要があって、時間がかかると思います。

ただ、その可能性が開けるにしても「振動数」の一種である「リズム(LFO=low frequency oscillator)」が拾えるプログラムが書けることが前提です。

理科の(専門の)先生とか音楽(専門の)の先生とかだと、別な答えが得られるかも知れません。

プログラムの式を教えてください
pen_daisuki
Scratcher
16 posts

音程や、周波数、振動数などに話し合うとこ

MitchyRoad wrote:

https://turbowarp.org/636610704/editor?turbo
作ってみたけど感度ゴミ
これって周波数の求め方の式ですか?
KimiruHamiru
New Scratcher
500+ posts

音程や、周波数、振動数などに話し合うとこ

pen_daisuki wrote:

プログラムの式を教えてください
あくまで

KimiruHamiru wrote:

「多分無理」
という前提で、思考実験的なコードになるのですが、

@greenFlag がクリックされたとき
[音量変化 v]の全てを削除する
(10)回繰り返す
[マーカー]を[音量変化 v]に追加する
getData((2000年からの日数)+((0.003)/(86400)))
(0.5)秒待つ
end
定義 getData (timeOut)
<<(2000年からの日数)<(timeOut)>ではない>まで繰り返す
(音量)を[音量変化 v]に追加する// ここで使うのは水色の音量ブロックです
end
// 定義は「再描画せずに実行する」をオンにする
みたいなコードを書くと、

・5秒の間、
・0.5秒ぐらいに1回、測定する。
・一回の測定は、3ミリ秒の間に、
・Scratchにできる範囲で一番細かい時間単位(ミリ秒未満)で、何度も「音量」の値を記録する

という意味になるはずです。

「こういうやり方で記録したデータが、細かく変化する」
具体的には、
「マーカーからマーカーの間にデータがたくさんあって、且つ、その数字が何度も揺れるように変化するか」
を観察することが、音程を拾える可能性の前提になる(具体的な数字はちょっと私の頭では検証に時間がかかります)

というのが私の考え、なのですが、実際にやってみると「音量」ブロックの扱う時間単位が大きすぎるようで、
揺れるような変化は見られない」=「今のScratchでは絶望的に無理っぽい」という感触です。

「リズムを拾う」場合は「秒待つ」の使い方とかが違ってくると思いますが、基本的には同じような考え方になります(もっとうまい方法もあるかも知れません)。

こんなコードでも「高い音を出そうとすると音量の数値が大きくなる」とか傾向は多分見ることができると思うので、「音の周波数」は拾えなくても、案外高精度で「望ましい歌唱かどうか」の評価ができたりする可能性は、あるかなと思っています。そもそも、「カラオケの評価システムは、本当に音の周波数を元にしているのか」という辺りも、情報が足りません。
ともあれ、上のようなコードで「音量ブロックが返すデータの、時間変化を、観察する」のが第一歩と思います。

あと、

ブラウザのサウンド系APIの機能としては多分可能と思われるなので、「自力で拡張機能を作る」あるいは「Scratchじゃない環境で作る」方が現実的、という気はします。「今のScratchでガチに挑戦する」場合は、多分「ScratchのソースコードをgitHubで見て、音量ブロックがどういう仕組みで作られているか調べる」のがスタート地点になると思います。

Powered by DjangoBB