CD音源を高サンプリング化:Pythonで実践するアップサンプリング処理

投稿者: | 2025年3月30日

オーディオの世界では、ハイレゾ音源や高品位再生といったキーワードが当たり前のように語られるようになって久しいですが、その中で「アップサンプリング」という技術に注目が集まっています。

特に音響マニアの間では、「CD音源(44.1kHz)を96kHzや192kHzに変換すると音質が向上するのか?」という議論が繰り返されてきました。

この記事では、CD音源のアップサンプリング処理をPythonで実践しつつ、その背後にある理論的な基礎についても掘り下げます。

Pythonを使った音響処理に興味がある方、またアップサンプリングの“本当の意味”を知りたいという音響マニアに向けて、実践的かつ深い内容を目指します。

キーパーソン紹介

こうたろう

この記事を担当:こうたろう

1986年生まれ
音大卒業後日本、スウェーデン、ドイツにて音楽活動
ドイツで「ピアノとコントラバスのためのソナタ」をリリースし、ステファン・デザイアーからマルチマイクREC技術を学び帰国
金田式DC録音のスタジオにて音響学を学ぶ
独立後芸術工房Pinocoaを結成しアルゼンチンタンゴ音楽を専門にプロデュース
その後写真・映像スタジオで音響担当を経験し、写真を学ぶ
現在はヒーリングサウンド専門の音楽ブランド[Curanz Sounds]を立ち上げ、ピアニスト, 音響エンジニア, マルチメディアクリエーターとして活動中
当サイトでは音響エンジニアとしての経験、写真スタジオで学んだ経験を活かし、制作機材の解説や紹介をしています。
♪この記事には広告リンクを含みます♪

アップサンプリングとは何か?

今回は主にCD音源のアップサンプリングに視点を置こうと思います。

近年市販のCD音楽を購入し、楽しむ際のデジタルオーディオとしてアップサンプリングをして少しでも音質を向上させたいと思うオーディオ好きはたくさんいることでしょう。

ご存知の通りCD音源は、1秒間に44,100回音の波をデジタルで記録する「44.1kHz」というサンプリング周波数で収録されています。

この44.1kHzという値は、人間の可聴域(おおよそ20Hz〜20kHz)をカバーするために設定されたもので、「ナイキスト定理(標本化定理)」に基づいたものであるわけです。

詰まり、人間のスペック上ハイレゾ音源などに関しては本来なら聞こえていないということになるわけですが、これもまたこの記事を読んでいる方であれば体験済みだと思いますが、DVD(48khz)は確かに音がいいと感じますし、96khzに至ってはやはりその壁は大きい、192khzはやっぱりそれなりの情報量があるものだ・・・と感じると思います。

これはブラインドでもわかる範囲にはなってきますが、一方で320kbpsであればMP3圧縮でも音質的には問題ないと感じることも実際にあるわけで、高音質の定義というのはスペック上だけの議論の枠に収まらない何かこうスピリチュアル的な側面も持ち合わせいるわけであります。

44.1khzの補間処理

アップサンプリングとは、こうした既存のデジタル音源を、より高いサンプリング周波数に変換する処理のことです。

たとえば、44.1kHzの音源を96kHzに変換すると、もとの波形の“間”に新たなサンプル点を補間して、より細かく波形を表現するようになります。

しかし重要なのは、ここで“新しい音の情報が生まれるわけではない”という点です。

アップサンプリングはあくまで補間処理であり、すでに存在している音の波形を「なめらかに描き直す」操作に過ぎません。

そのため、情報理論的な意味での情報量は増えず、可聴帯域以上の音(例:40kHzなど)が出現するわけでもありません。

これは例えば、会議メモの補完で感じてみてください。

ある会議の議事録のメモを取り、あとから日本語の文章を埋めていく。

すると、内容自体は把握しやすいくなりますが、決して会議そのものの内容を克明に記録しているわけではないということです。

例えば、「明日、山田、12時、打ち合わせ」これが44.1khzだとすると、「明日山田さんと12時に打ち合わせがあります」というのがアップサンプリングなわけです。

人間の可聴範囲のスペックを考慮すると、前者のメモで十分に意味は伝わりますが、保管することによってより文章がなめらかになるというわけなんですね。

アップサンプリングを行う意味

では、情報としての解析はすでに人間のスペックでは十分であるはずなのに、なぜアップサンプリングが行われるのでしょうか? その理由は主に3つに分けられます:

  1. DAC(デジタル-アナログ変換器)の性能を引き出すため 高サンプリングレートを受け入れられるDACでは、変換精度やアナログ出力の滑らかさが向上する可能性があります。
  2. デジタル処理(EQやリバーブなど)の精度向上 プラグインやDAW内部での処理は高解像度で行った方がアーティファクトが出にくく、より自然な音になる場合があります。
  3. 主観的な音質の向上 リスナーの心理的な影響や再生環境との相互作用により、アップサンプリング後の音が「良く聞こえる」ケースがあります(ただし、これは科学的に未確定な領域です)。

特にEQやリバーブ処理を行う場合、もとのドットに対する演算処理をかけていくわけであります。

そのため、より高解像度のモニターができるようになり、繊細な処理をかけていくことができます。

このあたりは主にリマスターの分野になってくるのではないかと思います。

また、先述の通り、ある意味スピリチュアル的な側面をもって、音質が向上したと感じる場合があります。

オーディオマニアあるあるですよね。

私もそういう傾向がありますが、本人がよければそれでいいんです。

なぜならそれはアートの領域だから。

いい絵とは何か?これはいい音楽とは何かと問いかけているようなもの。

そして、いい音とはなにか?

これはいい色とはなにか?と問いかけているようなもの。

〇〇をすればいい色になる・・・というアプローチに対してそこになんら意味は持ち合わせていません。

そして2度とでないその色がいい色であると感じるその思考回路と、それを生み出し、感じ取ったプロセス自体に意味があるのです。
そこがアートの領域と言えるのではないでしょうか。

だから、いい音、のためにアップサンプリングをするのは、理屈で意味はなくても、意味は存在するというわけです。

Pythonで実践:アップサンプリング処理のサンプルコード

以下は、Pythonを使ってCD音源(44.1kHz)のWAVファイルを、指定したフォルダから読み込み、アップサンプリング(例:96kHz)して、指定したフォルダに書き出す処理のサンプルコードです。

一度コードを組んでしまえばあとはリッピングしたCDをそのままフォルダからフォルダへ自動アップサンプリングできますので、Pythonに不慣れな方もぜひトライしてみてください。

難しく考えないで、適当なテキストエディタにコードをコピペして、コマンドで実行するだけでOKです!(拡張子は.pyにしてくださいね)

また、このスクリプトを実行するには、以下のPythonライブラリが必要です:

  • librosa(音声処理のための高機能ライブラリ)
  • soundfile(WAVの読み書き用)
  • numpy(librosaの内部依存)
  • scipy(resample補間の内部依存)

以下のコマンドを使ってインストールしてください。

MacやUnix系の環境の方は

python3 -m pip install librosa soundfile numpy scipy

Windowsの方は

pip install librosa soundfile numpy scipy

librosaは内部で多くの依存関係を使用しますので、初回インストール時は少し時間がかかる場合があります。

"""
CD音源(44.1kHz)のWAVファイルを96kHzにアップサンプリングし、
別のフォルダに保存するPythonスクリプト
"""
import os
import librosa
import soundfile as sf

# ======= 設定項目 =======
# 入力元のフォルダパス(例:"./input_wav")
input_folder = "./input_wav"

# 出力先のフォルダパス(例:"./output_wav")
output_folder = "./output_wav"

# 出力サンプリング周波数(例:96000Hz)
target_sr = 96000

# 出力先フォルダが存在しなければ作成する
os.makedirs(output_folder, exist_ok=True)

# ======= ファイル処理ループ =======
# 入力フォルダ内の全ての.wavファイルを処理
for filename in os.listdir(input_folder):
    if filename.endswith(".wav"):
        input_path = os.path.join(input_folder, filename)
        output_path = os.path.join(output_folder, filename)

        # 音声ファイルを読み込む(オリジナルのサンプリング周波数を維持)
        y, sr = librosa.load(input_path, sr=None)
        print(f"処理中: {filename} - 元のサンプリング周波数: {sr} Hz")

        # アップサンプリング(補間)処理
        y_up = librosa.resample(y, orig_sr=sr, target_sr=target_sr)

        # 出力ファイルとして保存
        sf.write(output_path, y_up, target_sr)
        print(f"保存完了: {output_path}\n")
  • librosa.load():オリジナルのサンプリングレートを保持したまま読み込み
  • librosa.resample():指定したターゲットのサンプリング周波数に変換(補間処理)
  • soundfile.write():新しいサンプリング周波数で書き出し
  • os.listdir()とos.path.join():フォルダ内の複数ファイルを一括処理可能

可視化:波形とスペクトルの比較

アップサンプリングの処理結果を視覚的に確認するため、以下のように元音源とアップサンプリング後の波形・スペクトルを比較してみましょう。

import matplotlib.pyplot as plt
import numpy as np
import librosa.display

# 可視化対象のファイル(1つ選択)
file_path = "./input_wav/sample.wav"

# 元音源を読み込み
y_orig, sr_orig = librosa.load(file_path, sr=None)

# アップサンプリング処理(96kHz)
target_sr = 96000
y_up = librosa.resample(y_orig, orig_sr=sr_orig, target_sr=target_sr)

# 波形の比較(時間領域)
plt.figure(figsize=(12, 4))
plt.plot(y_orig[:2000], label=f"Original {sr_orig} Hz")
plt.plot(librosa.resample(y_orig[:2000], sr_orig, target_sr), label=f"Upsampled {target_sr} Hz", alpha=0.7)
plt.title("Waveform Comparison (Zoomed In)")
plt.xlabel("Sample Index")
plt.ylabel("Amplitude")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

# スペクトル(周波数成分)の比較
plt.figure(figsize=(12, 4))
D_orig = librosa.amplitude_to_db(np.abs(librosa.stft(y_orig)), ref=np.max)
D_up = librosa.amplitude_to_db(np.abs(librosa.stft(y_up)), ref=np.max)

plt.subplot(1, 2, 1)
librosa.display.specshow(D_orig, sr=sr_orig, x_axis='time', y_axis='log')
plt.title("Original Spectrogram")
plt.colorbar(format="%+2.0f dB")

plt.subplot(1, 2, 2)
librosa.display.specshow(D_up, sr=target_sr, x_axis='time', y_axis='log')
plt.title("Upsampled Spectrogram")
plt.colorbar(format="%+2.0f dB")

plt.tight_layout()
plt.show()

アップサンプリングにより波形がなめらかに補完されている様子や、スペクトルの構造にどのような変化が生じるかを視覚的に理解できます。

アップサンプリングの限界と注意点

アップサンプリングは非常に有用な処理である一方で、いくつかの限界や注意すべきポイントも存在します。以下に代表的なものを挙げておきます。

1. 情報量そのものは増えない

先述の通り、アップサンプリングは「補間処理」であり、元の信号から新たな音の情報を生み出すことはできません。

これは、解像度の低い写真を高解像度に変換しても写っていない部分のディテールまでは復元できないのと同じです。

見かけのサンプル数は増えても、本質的な音の中身は変わらないという点を理解しておく必要があります。

2. 高域にノイズやアーティファクトが生じる可能性

補間アルゴリズムによっては、音の高域に不自然なリンギングや折り返しノイズが発生することがあります。

librosaは品質の高い補間を行いますが、それでも「完璧な再現」ではなく、あくまで推定に基づく補完である点を忘れてはいけません。

3. 再生環境に依存する音質の変化

アップサンプリング後の音質向上は、主にDAC(デジタル-アナログ変換器)やアンプ、再生ソフトの内部処理に依存します。

高性能な再生環境では効果が感じられることもありますが、一般的な再生環境では変化がない、あるいは逆にノイズ成分が強調されてしまう場合もあります。

このように、アップサンプリングは非常に強力なツールでありながら、使いどころや目的を誤ると逆効果になる場合もあります。

特にマニア志向の音響処理においては、こうした技術を「なぜ行うのか」「どのような環境で意味を持つのか」を明確に理解した上で活用することが重要です。

最後に、Pythonのような柔軟なプログラミング環境を用いることで、アップサンプリングの理論と実践を結び付け、視覚的にも確認できる点は大きなメリットと言えるでしょう。

おわりに

アップサンプリングは魔法のような技術ではありませんが、正しく理解し、目的に応じて使いこなすことで、確かな音の違いを引き出すことができる“道具”です。

ぜひ本記事を参考に、あなた自身の耳と手でその効果を確かめてみてください。