書籍紹介
二進法、ビット演算、コンピュータグラフィックス、二の補数表現、パターンの発見、順序構造とブール代数……コンピュータを支える数学の基礎を学ぼう!
登場人物紹介
僕:数学が好きな高校生。
ユーリ:僕のいとこの中学生。 僕のことを《お兄ちゃん》と呼ぶ。 論理的な話は好きだが飽きっぽい。
《音は波》
僕はユーリといっしょに《音楽と数学》というイベントに来ている。
いまは《音は波》というコーナーを回っているところ(第281回参照)。
ユーリ「お兄ちゃん、次のパネルに行こうよ」
僕「さっきから会場を走り回ってるから、《次》がどこかはもうわからないよ」
ユーリ「いーの、いーの。新しいパネルに行けばそれが《次》だもん」
僕「はいはい」
クイズ(音の大きさ)
(X)(Y)(Z)は、音をグラフとして表したものです。
最も大きい音はどれでしょうか。また最も小さい音はどれでしょうか。
(X)
(Y)
(Z)
※横軸は時刻を表し、縦軸は音圧を表しています。またグラフはどれも同じスケールとします。
ユーリ「あ、これはさっき見たクイズパネルだっけ?」
僕「見てないね。さっき見たのは《音の高さ》のクイズパネルだけど、このクイズパネルは《音の大きさ》だから(第281回参照)」
ユーリ「そっか。音がいちばん大きいのは(Y)だよね。それからいちばん小さいのは(Z)」
僕「そうだね。正解」
クイズの答え(音の大きさ)
(X)(Y)(Z)は、音をグラフとして表したものです。
最も大きい音は(Y)で、最も小さい音は(Z)です。
(X)
(Y)
(Z)
※横軸は時刻を表し、縦軸は音圧を表しています。またグラフはどれも同じスケールとします。
ユーリ「カンタン!」
僕「このグラフでは、音の大きさは《波の振幅》の大きさとして表されていることになるね。ここの部分」
波の振幅
ユーリ「カンタンなクイズばっかりだね」
僕「《音は波》のコーナーは、音が波であることや、波の要素について親しんでもらおうというコーナーだからじゃないかな。親しんでもらうのに、超難問でいきなり挑戦してもしょうがないよね」
ユーリ「その方が楽しそう! 超難問大好きだぜ!」
僕「いやいや」
ユーリ「……波の要素って何?」
僕「波を特徴付けているものは何かということだよ」
ユーリ「また、難しい話を始めたね?」
僕「超難問、好きなんだろ?」
ユーリ「またそーゆーこと言う」
僕「波を特徴付けているものっていうのは、波の周波数や、波の波長や、波の振幅などだよ。そのほかには……」
ユーリ「波を特徴付けているものって大事なの?」
僕「そりゃ大事だね。《音は波》だから、《波を研究する》のは《音を研究する》ことに関係してくる。 じゃ、《波を研究する》っていうのは、いったい何をすることなんだろうか」
ユーリ「ほほー?」
僕「たとえば『ああ……音が鳴ってるなあ……ああ……音が聞こえるなあ……』と何となくぼんやり考えるだけだと話は進まないし、きちんと考えられない」
ユーリ「ちょっとぼんやりし過ぎじゃね?」
僕「『この音は高いけれど、あの音は低い』や『さっきの音は小さいけれど、いまの音は大きい』みたいに、音が持っている特徴を注意深く見分ける必要がある」
ユーリ「聞き分ける」
僕「……音が持っている特徴を聞き分けて、音を見分けて、どんな音なのかを表現したくなる。そしてそのために言葉が必要になる。音の高さを波の周波数として表したり、音の大きさを波の振幅として表したりして」
ユーリ「あっ!」
僕「わっ! ……急に大声出すなよ」
ユーリ「その話ってさー、お兄ちゃんがよく言う《二つの世界》の話だよね」
僕「そうかな?」
ユーリ「《音の世界》と《波の世界》の関係の話でしょ?」
僕「おお、確かに! ユーリ、賢いなあ!」
ユーリ「へへへ」
僕「いま言いたかったのは確かにそれだよ。《音の世界》には、高い音や低い音、大きい音や小さい音がある。 それらの概念を《波の世界》に持っていくと、周波数が高い波や低い波、振幅が大きい波や小さい波に対応して……」
ユーリ「《がいねん》って何?」
僕「概念とは何か? また難しい質問してきたな。ええと、概念とは、具体的な個々の対象を抽象化してまとめてとらえた……そういう概念。 いや、概念を定義するのに概念を使っちゃだめだな。ええと……」
ユーリ「無理しなくていーよ。さっきの話を続けたまえ」
僕「それで……《音の世界》には《高い音や低い音》《大きい音や小さい音》がある。それらの概念を《波の世界》に持っていくと《周波数が高い波や低い波》《振幅が大きい波や小さい波》に対応する。 そうすると、別の観点から研究できることになる」
ユーリ「別の観点?」
僕「音が高い低いという《定性的》な話だけじゃなくて、周波数を使って《定量的》な話ができるということ。あ、定性的っていうのは」
ユーリ「てーせーてき、てーりょーてきは知ってる。お兄ちゃん教えてくれたじゃん」
僕「そうだっけ」
ユーリ「《どんな性質を持ってるか》ってゆーのが定性的で、《どのくらいの量か》ってゆーのが定量的でしょ。性質と量」
僕「そうそう! 《波の世界》の言葉を使って定量的に音の概念を表現すると、音が高い低いだけじゃなくて、どのくらい音が高いかを表現できることになる。周波数を使えばいいからね。 人間の可聴域が約Hz〜約Hzだという話があったけど、 それはまさに《音の世界》の概念を《波の世界》の言葉を使って表現した例になっている(第281回参照)。 人間の耳で聞こえる範囲という《音の世界》の概念を《波の世界》の言葉を使って定量的に表現していることになるわけだ」
ユーリ「うっわー……その話、理屈っぽいけど、おもしろーい!」
僕「そろそろ次のクイズパネルに行こうか」
ユーリ「うんっ!」
音の変換
僕「これもクイズパネルかな」
ユーリ「どらどら」
クイズ(音の変換)
次の図は、 コンピュータのあるプログラムが音を変換しているところを表しています。
どのような変換であるかは、入力と出力の波で示されています。
入力した音に比べて、出力した音はどのように聞こえるでしょうか。
※横軸は時刻を表し、縦軸は音圧を表しています。またグラフはどれも同じスケールとします。
僕「なるほどね。音は波だから、その波の形をコンピュータで変換したら音はどうなるかという問題なんだね。入力した音の波と、出力した音の波があるから、それを見比べて音がどう変わったかを答えるクイズ」
ユーリ「あー、これもカンタンカンタン。だってほら、さっきやったばっかじゃん。入力に比べて出力は振幅が小さくなってる。だから、これ、音が小さくなる!」
僕「そうかな?」
ユーリ「え? ……あー、いまのなし! 音が小さくなるだけじゃないね……音が高くなってる?」
僕「そうだね。振幅を見て音の大きさを調べ、周波数を見て音の高さを見ることになる。周波数は単位時間の波の個数で、出力の波の個数が多いから、音は高くなってる」
- 入力の波に比べて、出力の波は振幅が小さい。だから、音は小さくなる。
- 入力の波に比べて、出力の波は周波数が高い。たから、音は高くなる。
クイズ(音の変換)
入力した音に比べると、出力した音の大きさは小さく、音の高さは高くなります。
※横軸は時刻を表し、縦軸は音圧を表しています。またグラフはどれも同じスケールとします。
ユーリ「ははーん、これ、逆だね!」
僕「逆とは」
ユーリ「さっきと逆じゃん? さっきは《音の世界》を《波の世界》に移して定量的に考えるって話だったけど、この音の変換は逆。《波の世界》の振幅や周波数を調べて、それで《音の世界》のことを考えてる」
僕「うーん、なるほど。ユーリ、今日は冴えてるなあ!」
ユーリ「今日も」
僕「ユーリ、今日も冴えてるなあ」
ユーリ「そんじゃ、次のパネルに行こー!」
僕「ちょっと待って」
ユーリ「え? まだ何か考える必要あるの?」
僕「うん。このクイズに出てきた入力と出力で気になることがある。もしも、このコンピュータに向かって『人間が歌ったらどうなるか』って考えていたんだよ」
ユーリ「は? なに言ってるデスカ? 人間の歌声って音じゃないの? 何か特別なことあんの?!」
僕「いや、もちろん人間の歌声だからといって特別なことはないんだけど、このクイズに出てきたようなきれいなサインカーブとは違うことが起きると思ったんだ」
ユーリ「何言ってるかわかんない」
僕「マイクに向かって歌を歌う。その音をこのコンピュータに通したら、何が起きるかを考える」
ユーリ「さっき答えたじゃん。音の高さは高くなって、音の大きさは小さくなる」
僕「うん、音の大きさはいいんだけど、僕が気になっているのは音の高さ。周波数が高くなったということは、時間の長さを短くしたことになるよね」
ユーリ「時間の長さを短くした?」
僕「うん。コンピュータのことは詳しくないけど、 入力の波を表すデータがコンピュータに入っていって、コンピュータの中でプログラムが動いて、 そのデータを処理して、音として出力するんだろうと思う」
ユーリ「ふんふん?」
僕「周波数を高くするにはどうすればいいか。それは、波を表すデータを短い時間で出力すればいい……と想像できる。 秒で入力された波のデータを秒で出力しちゃえば、周波数は倍になる」
ユーリ「待って、どーゆー計算したの?」
僕「周波数は単位時間の波の個数だった。入力したのと同じ波の個数を半分の時間で出力すれば、周波数は倍になるよね。たとえば、Hzの波で具体的に考えればいい」
ユーリ「えーと、Hzは秒間に個の波があるから、その波を秒間で出すとしたら、秒間には個の波になるってこと?」
僕「そういうこと。だから、再生時間をにしたら周波数は倍になる」
再生時間をにしたら周波数は倍になる
ユーリ「わかったけど、それは音でも歌でも同じなのでは?」
僕「そうなんだけど、一つの歌を短い時間で再生したら早口の歌になってしまうはずだよね!」
ユーリ「あー、そだね。短い時間で同じだけの歌を歌うんだから、ペラペラペラって早口になるってことだね。音声の早回しでしょ。わかるよん」
僕「それが気になる。《音の高さが高くなる》ことと《早口になる》ことはセットになるわけだろ?」
ユーリ「短い時間で歌うんだから、それは当たり前ではないでしょーか」
僕「でもYouTubeには「再生速度」変更メニューがあるんだよ」
ユーリ「あるねー……でも、それが何なの?」
僕「YouTubeで再生速度をたとえば倍にすると、動画を見終えるまでの時間は半分になる。だから当然《早口になる》わけだ。もともと、動画を短時間で視聴するのが目的の機能だから。 でもね、YouTubeで再生速度を倍にしても、YouTubeで《音の高さが高くなる》ことはないんだよ。 つまり、《音の高さが高くなる》ことと《早口になる》ことはセットになっていない。なぜだろうか……と思ったんだ」
ユーリ「再生速度を倍にしたとき、音の高さはそのままだけど早口になるってこと? えー、ほんとー? お兄ちゃんの勘違いじゃないの?」
僕「いや勘違いじゃないよ。このあいだ、YouTubeで歌を聞いたんだけど、再生速度をまちがえて倍速にしてたんだ。でも歌の高さはそのままだった。ただ、歌詞はすごく早口になってた」
ユーリ「超難問、出てきたぞー! お兄ちゃんのクイズだ!」
お兄ちゃんのクイズ
YouTubeで再生速度を倍にしたとき、音の高さはそのままだけど、早口になったんだって。どーなってんの?
僕「クイズにされてしまった」
双倉図書館には自由に使える席も紙もたくさんある。
僕とユーリは会場のパネルそっちのけで考え始めた。
ユーリ「待って。早口になるのはあたりまえだし、問題ないよね?」
僕「そうだね。半分の時間で再生しているんだから早口になる。それはいい。問題なのは、どうして音の高さは変わらないのか」
ユーリ「そんなの、YouTubeで働いている人に聞かなきゃわかんないのでは」
僕「違うよ。いや、違わないんだけど、僕たちが持っている知識を使って《考える》ことはできる」
ユーリ「YouTubeの知識なんてないんですけどー」
僕「YouTubeの知識じゃなくて、音の知識だよ。《音は波》なんだから……うーん」
ユーリ「てーぎにかえれ」
僕「《定義にかえれ》ってか……音は波である。波は振動が伝搬する現象である。音の高さは……」
ユーリ「……周波数?」
僕「周波数は、単位時間の波の数。波の数。波の数?」
ユーリ「波の数。そんなに何回も言わなくても聞こえるって!」
僕「考えてるんだよ! ……ということは、音の高さを変えないようにするには、どうすればいいか?」
ユーリ「単位時間の波の数を変えなきゃいい」
僕「そうだけど、駄目なんだ。時間をに圧縮するんだから、どうやったって、単位時間の波の数は倍になる。だから音は高くなるはずなんだ」
ユーリ「話がぐるぐる同じところ回ってるみたい」
僕「……」
ユーリ「……」
僕「わからない」
ユーリ「わかんにゃい……ねー、わかんないときはどーすんの?」
僕「《もっとやさしい問題をとけ》」
ユーリ「歌を早口にするんじゃなくて、サインカーブを早口にするとか?」
僕「……んん? それだ!」
ユーリ「どれ?」
僕「そうだ。簡単なことだよ。僕は《圧縮》して時間を短くすることだけ考えていた」
波を《圧縮》すると、再生時間はになって、周波数は倍になる
ユーリ「……」
僕「《圧縮》するんじゃなくて《間引く》という手がある!」
ユーリ「まびく」
僕「話をすごく単純にしよう。周波数がHzの音が秒間流れている動画があるとする。波の数は?」
ユーリ「個」
僕「この動画を秒間にして、しかも音の高さを変えないようにしたい。波の数は?」
ユーリ「個?」
僕「そう、そうなんだ! だから、波を間引いて、個に個は捨てることにしよう! そうすれば、再生時間は半分になり、しかも周波数は変わらない。だから、音の高さは変わらない」
波を《間引く》と、再生時間をにしても、周波数は変わらない
ユーリ「あ、ほんとだ! お兄ちゃん、すごーい!」
僕「でもこの方法は、音の高さが一定じゃないと難しくなる。周波数が一定じゃないと、この図でいう細長い短冊の幅は一定じゃなくなる。だからコンピュータが周波数を調べながら捨てるべきデータはどれかを判断する必要がある。 それから、データを捨てているから、きっと音は悪くなってしまうだろうなあ」
ユーリ「待って待って待って! ユーリ、ひらめいちゃった!」
僕「お?」
ユーリ「ほれほれ、積分のときに短冊出てきたじゃん? あのときみたいに、短冊をすごーく細くして間引いたらいいじゃん!」
僕「区分求積法のときみたいに、だよね。それは僕も考えたよ。でも、それはうまくいかない。短冊を細くして間引くだけでは音の高さは変わってしまう。 波が個できるのにどれだけの時間が掛かるか、つまり周期を考慮しないとうまく行かないんだ。 単純な例を考えればわかるよ。こんなふうに個の波を短冊に切って枚に枚を間引いたとすると、 周波数は倍になる。波の形が汚いからわかりにくいけど、半分の時間に個の波があることがわかる。周波数は倍だ」
短冊を細くして間引くだけでは音の高さは変わってしまう
ユーリ「あー、そっかー……難しーんだね」
僕「そうだねえ……難しい、でも、おもしろいなあ。《音は波》だから、波を調べれば音を調べることになる。波を変えれば音が変わる」
ユーリ「……ねーお兄ちゃん。逆もあるよね」
僕「逆とは」
ユーリ「カラオケのキー設定。自分の声に合わせてキーを変える。あれって、音の高さは変えるけど、一曲の時間は変わんない」
僕「ああ、確かに逆だね。音の高さは変えるけど、再生時間は変わらない。早口にもならない。どうすればできるんだろう」
ユーリ「《音は波》だから……」
こんなふうにして、僕とユーリの《音は波》トークは続いていった。
解けるかどうかはわからない。超難問かどうかもわからない。
でも、自分で気付いた問題を考えていくのは楽しい。とても、楽しい。
(第282回終わり。第283回へ続く)
読者への情報
音の高さを変えずに再生時間を変える技術はタイムストレッチと呼ばれています。
また、再生時間を変えずに音の高さを変える技術はピッチシフトと呼ばれています。
参考文献
- 青木直史『サウンドプログラミング入門』