問題一覧 > 通常問題

No.1905 PURE PHRASE

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 89
作問者 : 👑 hitonanodehitonanode / テスター : SumitacchanSumitacchan
9 ProblemId : 7039 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2022-04-26 01:18:38

問題文

サンプリングレート $44100~\mathrm{Hz}$ で記録された長さ $N = 44100$ (すなわち $1$ 秒間)の音の波形 $\mathbf{A} = [A_1, \dots, A_{N}]$ が与えられます.すなわち,$A_i$ $(1 \le i \le N)$ は時刻 $i / N \ \mathrm{[sec]}$ における信号の変位です. この信号は,何らかの楽器を模した演奏音の $1$ 秒間を切り出したもので,音の高さは C4, D4, E4, F4, G4, A4, B4 のいずれかです.なお,それぞれの音の基本周波数は順に 261.6, 294.3, 327.0, 348.8, 392.4, 436.0, 490.5 $\mathrm{Hz}$ と本問では仮定してよいです(基本周波数に関してはサンプルの説明文もご参照ください).どの高さの音が鳴っているかを判別し,答えを出力してください.

備考

本問題のテストケースの作成方法は本ページの末尾に記載しました.

入力

$N$
$A_1\ A_2 \ \dots \ A_N$

  • $N = 44100$
  • $-32768 \le A_i \le 32767$ $(i = 1, \dots, N)$
  • 入力は全て整数

出力

答えとなる文字列(C4, D4, E4, F4, G4, A4, B4 のいずれか一つ)を出力してください.最後に改行してください.

サンプル

本問題は小さい入力データが提供できないため,サンプルデータを GitHub Gist 上に用意しました.お手数ですがこちらのリンクより適宜ダウンロードしてご利用ください.
サンプル1
入力
出力
C4

Trumpet による C4 の音です.

なお,サンプル1の波形データの冒頭を波形解析ソフトで図示したのが以下のものです(以下,図の横軸の単位は秒です).

これを観察すると,類似した波形が約 $0.0038$ 秒周期で繰り返されていることが見てとれます.この周期の逆数をとると,この波形が $1$ 秒間に約 $260$ 回現れることが分かります.これは C4 の音の基本周波数が約 $261.6 \mathrm{Hz}$ であることに対応しています.波形(数列)全体を約 $N / 261.6$ 要素だけ前後にシフトさせてもデータの様子はあまり変化しない,というのが入力の特徴です.

サンプル2
入力
出力
D4

Pan Flute による D4 の音です.なお波形は以下の通りです.

これを観察すると、$0.0034$ 秒周期で類似の波形が繰り返されていることが見てとれます.この逆数をとると約 $294 \mathrm{Hz}$ で,これはおおむね D4 の基本周波数と一致しています.

サンプル3
入力
出力
E4

Recorder による E4 の音です.波形は以下の通りです.

補足:テストケースの作成方法について

本問で提出コードの判定に用いられるテストケースは以下の方法で作成されています.

  • DAWソフトウェア Cakewalk by BandLab 上でソフトウェアシンセサイザー Cakewalk TTS-1 を使用し,C4, D4, E4, F4, G4, A4, B4 いずれかの単音を 8 秒間鳴らす wav ファイルを作成する.音色はプリセットに用意された Harmonica, Violin, Trumpet, Shakuhachi, Pan Flute, Alto Sax, Church 1, Recorder を使用した.Wav 信号のフォーマットはサンプリングレート $44100~\mathrm{Hz}$, ビット深度は $16$ bit とした.その他ピッチを微調整したが,それ以外の設定は基本的にデフォルトのものから変更していない.
  • 作成した wav ファイルから,ちょうど $1$ 秒分の長さの連続した区間を切り出し,テストケースの入力とする.切り出す位置は作問者によって恣意的に定められた可能性がある.
なお,本問の想定解として用意されたコードは,本問で正誤判定に用いられるテストケース $41$ 個に加え,上記の条件のもと追加でランダムに生成した $10^5$ 個のテストケース全てに関して正答を得られることが確認されています.

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。